2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219401.

        This revision rolled out the previous patch, but after talking
        with reviewer, a rebaseline is what was needed.Rolling back in
        before rebaseline.

        Reverted changeset:

        "Unreviewed, rolling out r219379."
        https://bugs.webkit.org/show_bug.cgi?id=174400
        http://trac.webkit.org/changeset/219401

2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219379.

        This revision caused a consistent failure in the test
        fast/dom/Window/property-access-on-cached-window-after-frame-
        removed.html.

        Reverted changeset:

        "Remove NAVIGATOR_HWCONCURRENCY"
        https://bugs.webkit.org/show_bug.cgi?id=174400
        http://trac.webkit.org/changeset/219379

2017-07-12  Zalan Bujtas  <zalan@apple.com>

        Paginated mode: Infinite recursion in RenderTable::layout
        https://bugs.webkit.org/show_bug.cgi?id=174413

        Reviewed by Simon Fraser.

        This patch is a workaround for avoiding infinite recursion when the table layout does not stabilize.
        Apparently we leak some context (computed padding in this case) from the current to the subsequent layout.
        The subsequent layouts always end up producing different line heights for some of the cells in the <thead>.
        In paginated mode, when the section moves (<thead>, <tbody> etc) we call layout again recursively.
        This could lead to infinite recursion for unstable table layout.

        Unable to come up with a reduction yet.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:

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

        WebRTC: Incorrect sdpMLineIndex for video breaks Firefox interop
        https://bugs.webkit.org/show_bug.cgi?id=173530

        Reviewed by Alex Christensen.

        Test: webrtc/ice-candidate-sdpMLineIndex.html

        Reading missing parameter from libwebrtc backend and setting it when firing the RTCIceCandidate event.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::disableICECandidateFiltering):
        (WebCore::PeerConnectionBackend::newICECandidate):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):

2017-07-12  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyEC PKCS#8 exports
        https://bugs.webkit.org/show_bug.cgi?id=173648

        Reviewed by Jiewen Tan.

        Implement the PKCS#8 export operation for EC keys for platforms that use
        libgcrypt.

        First, the `ECParameters` and the `ECPrivateKey` ASN.1 structures are created
        and filled out accordingly. For the former, the appropriate object identifier
        is written under the `namedCurve` element of the structure. For the latter, we
        write out '1' under `version`, and eliminate the optional `parameters` element.
        An libgcrypt EC context is then used to retrieve the private and public key
        MPIs that are then written out under the `privateKey` and `publicKey` elements,
        respectively.

        After that, we can proceed to create and fill out the `PrivateKeyInfo` structure.
        0 is written out under the `version` element, and the id-ecPublicKey object
        identifier is written out under the `privateKeyAlgorithm.algorithm` element. This
        doesn't strictly follow the specification, since the id-ecDH identifier should be
        used for ECDH keys, but no test in WebKit or the web-platform-tests suite covers
        this, so this specific detail should be revisited later.

        Data of the previously-constructed `ECParameters` structure is retrieved and
        written out under the `privateKeyAlgorithm.parameters` element. Similarly is done
        for the `ECPrivateKey` structure, writing out its data under the `privateKey`
        element. Finally, the optional `attributes` element of the `PrivateKeyInfo`
        structure is eliminated, and the encoded data of this structure is retrieved and
        returned.

        No new tests -- relevant tests are now passing and are unskipped.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::CryptoKeyEC::platformExportPkcs8):

2017-07-12  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Use libepoxy
        https://bugs.webkit.org/show_bug.cgi?id=172104

        Reviewed by Michael Catanzaro.

        No new tests -- no changes in behavior.

        Implement the proper libepoxy header inclusion for ports that enable it.

        The library acts as a loading facility working on top of the system-provided
        OpenGL and EGL libraries, with the headers providing a complete collection of
        specification-defined OpenGL and EGL types, constants and entrypoints.

        Support is added through the USE(LIBEPOXY) build guard. Note that this guard
        isn't exclusive with USE(OPENGL), USE(OPENGL_ES_2) or USE(EGL), so the
        USE(LIBEPOXY) condition is tested before those.

        In case of OpenGL headers, the <epoxy/gl.h> header is included, and in
        case of EGL headers, the <epoxy/egl.h> header. <epoxy/egl.h> includes
        <epoxy/gl.h> on its own, so in some cases the inclusion of the latter is
        omitted.

        EpoxyShims.h header is added, doing a job similar to OpenGLESShims.h. The
        EXT-suffixed GL entrypoints are redefined to the non-suffixed versions.
        No suffixed constants are defined because those are defined by the libepoxy
        headers to the well-known values.

        * CMakeLists.txt:
        * PlatformWPE.cmake:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/EpoxyShims.h: Added.
        * platform/graphics/GLContext.cpp:
        (WebCore::initializeOpenGLShimsIfNeeded):
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        * platform/graphics/PlatformDisplay.cpp:
        * platform/graphics/cairo/CairoUtilities.cpp:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::create):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/egl/GLContextEGL.cpp:
        * platform/graphics/egl/GLContextEGLWPE.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        * platform/graphics/wpe/PlatformDisplayWPE.cpp:

2017-07-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        ImageDecoder: Gifs with infinite animation only play once very often
        https://bugs.webkit.org/show_bug.cgi?id=173403

        Reviewed by Michael Catanzaro.

        It doesn't always happen, it's easier to reproduce when loading big files from the network, but it also depends
        on every file. The problem is that ImageFrameCache is caching the repetition count value always when the size is
        already available. In the case of gif files, the loop count value can be at any point of the image stream, so
        having the size available doesn't mean we also have the loop count. So, if the value is queried before it's
        available, the default value is cached (repeat once) and then always used. We should clear the cached value when
        new data is added to the decoder, like we do with other cached values that can change when more data is decoded.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::clearMetadata): Clear m_repetitionCount.

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

        [SOUP] Do not use C linkage for functions using C++ features
        https://bugs.webkit.org/show_bug.cgi?id=174392

        Reviewed by Michael Catanzaro.

        No new tests because there is no behavior change.

        * platform/network/soup/WebKitSoupRequestGeneric.h: Move G_END_DECLS
        to leave functions which use C++ features outside of the block it
        delimits.

2017-07-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crashes in WebCore::PasteboardHelper::fillSelectionData when source file of drag is unavailable
        https://bugs.webkit.org/show_bug.cgi?id=174161

        Reviewed by Michael Catanzaro.

        It seems selection data could contain an empty string, in which case gtk_selection_data_get_data() returns a
        valid pointer, but gtk_selection_data_get_length() returns 0. When this happens we end up trying to split an
        empty string resulting in an empty vector, but we unconditionally access the first element of the vector.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::selectionDataToUTF8String): Return a null string in case selection data length is 0.
        (WebCore::PasteboardHelper::fillSelectionData): Return early if selection data length is 0, instead of checking
        the selection data pointer.

2017-07-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable FILE_LOCK and implement lockFile and unlockFile
        https://bugs.webkit.org/show_bug.cgi?id=174357

        Reviewed by Michael Catanzaro.

        Implement lockFile and unlockFile using flock().

        * PlatformWPE.cmake:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::lockFile):
        (WebCore::unlockFile):

2017-07-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use FastAllocator in STL containers
        https://bugs.webkit.org/show_bug.cgi?id=174366

        Rubber stamped by Sam Weinig.

        This patch uses FastAllocator for STL containers including std::set and std::map.
        STL can take a template parameter to be used as allocator for containers.
        We prepare FastAllocator, which uses fastMalloc for allocation.
        This allows us to use bmalloc (if supported) for STL containers which offers
        functionalities that is not supported in WTF containers.

        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/server/IndexValueEntry.cpp:
        (WebCore::IDBServer::IndexValueEntry::IndexValueEntry):
        (WebCore::IDBServer::IndexValueEntry::Iterator::Iterator):
        (WebCore::IDBServer::IndexValueEntry::reverseFind):
        * Modules/indexeddb/server/IndexValueEntry.h:
        * Modules/indexeddb/server/IndexValueStore.cpp:
        (WebCore::IDBServer::IndexValueStore::lowestIteratorInRange):
        (WebCore::IDBServer::IndexValueStore::highestReverseIteratorInRange):
        (WebCore::IDBServer::IndexValueStore::Iterator::Iterator):
        * Modules/indexeddb/server/IndexValueStore.h:
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreCleared):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::replaceKeyValueStore):
        (WebCore::IDBServer::MemoryObjectStore::addRecord):
        (WebCore::IDBServer::MemoryObjectStore::updateCursorsForPutRecord):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        (WebCore::IDBServer::MemoryObjectStore::orderedKeys):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::keyAdded):
        (WebCore::IDBServer::MemoryObjectStoreCursor::setFirstInRemainingRange):
        (WebCore::IDBServer::MemoryObjectStoreCursor::setForwardIteratorFromRemainingRange):
        (WebCore::IDBServer::MemoryObjectStoreCursor::setReverseIteratorFromRemainingRange):
        (WebCore::IDBServer::MemoryObjectStoreCursor::incrementForwardIterator):
        (WebCore::IDBServer::MemoryObjectStoreCursor::incrementReverseIterator):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.h:
        * Modules/mediasource/SampleMap.h:
        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::deferTestsForReason):
        (WebCore::dumpState):
        * page/WheelEventTestTrigger.h:
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::enumToStringMap):
        * rendering/OrderIterator.h:

2017-07-11  Per Arne Vollan  <pvollan@apple.com>

        [Win] Build error when building WebKit.dll from WebKit.proj project file.
        https://bugs.webkit.org/show_bug.cgi?id=174410

        Reviewed by Brent Fulgham.

        Copy required header files to forwarding headers folder.

        * PlatformWin.cmake:

2017-07-11  Dean Jackson  <dino@apple.com>

        Remove NAVIGATOR_HWCONCURRENCY
        https://bugs.webkit.org/show_bug.cgi?id=174400

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::hardwareConcurrency): Deleted.
        * page/NavigatorBase.h:
        * page/NavigatorConcurrentHardware.idl: Removed.

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

        RealtimeOutgoingAudioSource should not push more audio data if the WebRTC thread is not able to process it
        https://bugs.webkit.org/show_bug.cgi?id=174383

        Reviewed by Eric Carlson.

        This patch adds support to check for pending-processing audio data.
        If the amount of audio data is bigger than a high water mark of 0.5 seconds,
        we stop pushing new audio data until buffered audio data is lower than a low water mark of 0.1 seconds.
        Patch is tested by adding breakpoints to trigger the high water mark, verifying that low water mark is triggered
        and receiving audio is fine on the other connection endpoint.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::isReachingBufferedAudioDataHighLimit):
        (WebCore::RealtimeOutgoingAudioSource::isReachingBufferedAudioDataLowLimit):
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:

2017-07-11  Dean Jackson  <dino@apple.com>

        Rolling out r219372.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::hardwareConcurrency):
        * page/NavigatorBase.h:
        * page/NavigatorConcurrentHardware.idl: Added.

2017-07-11  Dean Jackson  <dino@apple.com>

        Remove NAVIGATOR_HWCONCURRENCY
        https://bugs.webkit.org/show_bug.cgi?id=174400

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::hardwareConcurrency): Deleted.
        * page/NavigatorBase.h:
        * page/NavigatorConcurrentHardware.idl: Removed.

2017-07-11  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] CryptoKeyECMac::Custom OpenSSL tag is actually tagged type [1]
        https://bugs.webkit.org/show_bug.cgi?id=174382
        <rdar://problem/33244871>

        Reviewed by Brent Fulgham.

        No change of behaviour.

        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportPkcs8):
        Replace CustomECParameters with TaggedType1 according to X.690(08/2015) section 8.14:
        https://www.itu.int/rec/T-REC-X.690-201508-I/en
        and RFC 5915 Appendix A:
        http://www.ietf.org/rfc/rfc5915.txt.

2017-07-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r219045): The <body> element does not get repainted when its background image finishes decoding
        https://bugs.webkit.org/show_bug.cgi?id=174376

        Reviewed by Simon Fraser.

        When adding a CachedImageClient to CachedImage::m_pendingImageDrawingClients
        and the CachedImageClient is not one of the CachedImage::m_clients, we
        should cancel the repaint optimization in CachedImage::imageFrameAvailable().
        This can be done by adding all the CachedImage::m_clients to CachedImage::
        m_pendingImageDrawingClients.

        Test: fast/images/async-image-body-background-image.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addPendingImageDrawingClient):

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

        Unreviewed, fix Windows build after r219355.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::addCrossOriginWindowPropertyNames):
        (WebCore::addCrossOriginWindowOwnPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        (WebCore::addCrossOriginPropertyNames): Deleted.
        (WebCore::addCrossOriginOwnPropertyNames): Deleted.
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::addCrossOriginLocationPropertyNames):
        (WebCore::addCrossOriginLocationOwnPropertyNames):
        (WebCore::JSLocation::getOwnPropertyNames):
        (WebCore::addCrossOriginPropertyNames): Deleted.
        (WebCore::addCrossOriginOwnPropertyNames): Deleted.

2017-07-10  Sam Weinig  <sam@webkit.org>

        [WebIDL] Convert MutationCallback to be a normal generate callback
        https://bugs.webkit.org/show_bug.cgi?id=174140

        Reviewed by Chris Dumez.

        To make this work more nicely, I:
        - Added the ability to for non-nullable interfaces in sequences to be passed
          via a Ref<> rather than a RefPtr<> as a parameter to a callback function.
          (e.g. callback MyCallback = void (sequence<Foo> foos) will now have the 
          signature, CallbackResult<void> handleEvent(const Vector<Ref<Foo>>&) rather
          than CallbackResult<void> handleEvent(const Vector<RefPtr<Foo>>&).
        - Added a new extended attribute for callback functions called [CallbackNeedsCanInvoke]
          that adds a virtual function called canInvoke() to the generated callback.
          All it does is forward to ActiveDOMCallback's canInvokeCallback, but it
          allows the implementation to get to it. We may one day want to move the 
          inheritance of ActiveDOMCallback from the generated source to the base class.
        - Added a new extended attribute for callback functions called [CallbackThisObject=Type]
          which allows you to specify that the callback needs a this object in addition
          to its arguments. When specified, the first argument of the C++ implementation
          function will now correspond to the this object, with the remaining arguments
          shifted over one.

        * DerivedSources.make:
        Add MutationCallback.

        * WebCore.xcodeproj/project.pbxproj:
        Remove non-generated JSMutationCallback.cpp, and add generated JSMutationCallback.cpp.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::filterDeviceList):
        (WebCore::MediaDevicesRequest::start):
        * Modules/mediastream/MediaDevicesRequest.h:
        Switch to using Ref.

        * bindings/IDLTypes.h:
        Add InnerParameterType and NullableInnerParameterType type hooks
        and specialize wrappers to use Ref for InnerParameterType, and RefPtr
        for NullableInnerParameterType.

        * bindings/js/JSCallbackData.cpp:
        * bindings/js/JSCallbackData.h:
        Add support for passing a this object.

        * bindings/js/JSMutationCallback.cpp: Removed.
        * bindings/js/JSMutationCallback.h: Removed.
        Remove custom callback code.

        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::constructJSMutationObserver): Deleted.
        Remove no longer needed custom constructor.

        * bindings/scripts/CodeGenerator.pm:
        (ParseType):
        Add helper to parse a type and cache the result.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        Add support for [CallbackNeedsCanInvoke] and [CallbackThisObject]. When [CallbackThisObject]
        is not specified, use jsUndefined() as the this object as specified by WebIDL.

        * bindings/scripts/IDLAttributes.json:
        Add [CallbackNeedsCanInvoke] and [CallbackThisObject].

        * bindings/scripts/IDLParser.pm:
        (ParseType):
        Add entry point to parse a single type.

        * css/FontFaceSet.h:
        Switch to using Ref.

        * dom/MutationCallback.h:
        Update signatures.

        * dom/MutationCallback.idl: Added.
    
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::canDeliver):
        (WebCore::MutationObserver::deliver):
        Switch to new signatures.

        * dom/MutationObserver.idl:
        Remove CustomConstructor.

        * page/IntersectionObserverCallback.h:
        Switch to using Ref.

        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.cpp: Added.
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.h: Added.
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.h:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp:
        Add / update bindings tests.

2017-07-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        RenderImage should not add itself as a RelevantRepaintedObject if its image frame is being decoded
        https://bugs.webkit.org/show_bug.cgi?id=174336

        Reviewed by Simon Fraser.

        Since nothing will be drawn till the image frame finishes decoding we should
        treat returning ImageDrawResult::DidRequestDecoding from BitmapImage::draw
        the same as we do when the image is still loading.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderImage.h:

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

        [WebRTC] Hanging under LibWebRTCMediaEndpoint::getStats
        https://bugs.webkit.org/show_bug.cgi?id=174377

        Reviewed by Eric Carlson.

        No change of behavior.
        Moving calls to libwebrtc getStats in the signalling thread since doing it in the main thread
        would block the main thread until the signalling thread is ready to handle getStats.
        Reducing stat logging since this may be too much for some devices.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        (WebCore::LibWebRTCMediaEndpoint::gatherStatsForLogging):
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        (WebCore::LibWebRTCMediaEndpoint::startLoggingStats):

2017-07-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove unused OpenGL files
        https://bugs.webkit.org/show_bug.cgi?id=174371

        Reviewed by Timothy Hatcher.

        * platform/graphics/opengl/GLPlatformContext.cpp: Removed.
        * platform/graphics/opengl/GLPlatformContext.h: Removed.
        * platform/graphics/opengl/GLPlatformSurface.h: Removed.

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

        Window's [[OwnPropertyKeys]] is wrong for cross origin windows
        https://bugs.webkit.org/show_bug.cgi?id=174364
        <rdar://problem/33238056>

        Reviewed by Brent Fulgham.

        Window's [[OwnPropertyKeys]] should not list descendant frame names
        when the window is cross-origin:
        - https://github.com/whatwg/html/pull/2777

        This aligns our behavior with Firefox and Chrome.

        No new tests, updated existing test.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::addCrossOriginPropertyNames):
        (WebCore::addCrossOriginOwnPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):

2017-07-11  Timothy Hatcher  <timothy@hatcher.name>

        Fix broken build when ENABLE_VIDEO is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=174368

        Reviewed by Alex Christensen.

        * dom/Document.cpp:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::mediaResponseSources):
        (WebCore::Internals::mediaResponseContentRanges):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-07-11  Ali Juma  <ajuma@chromium.org>

        elementFromPoint() should consider x and y to be in client (layout viewport) coordinates
        https://bugs.webkit.org/show_bug.cgi?id=172019

        Reviewed by Simon Fraser.

        When visual viewports are enabled, this makes TreeScope::nodeFromPoint consider its
        input to be in client coordinates, and clips this input to the layout viewport. This change
        affects the behavior of document.elementFromPoint() and document.caretRangeFromPoint.

        No new tests. Modified an existing test, and made a previously-failing test pass on ios.

        * dom/TreeScope.cpp:
        (WebCore::TreeScope::nodeFromPoint):
        * page/FrameView.cpp:
        (WebCore::FrameView::layoutViewportToAbsoluteRect):
        (WebCore::FrameView::layoutViewportToAbsolutePoint):
        (WebCore::FrameView::clientToLayoutViewportPoint):
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2017-07-11  Timothy Hatcher  <timothy@hatcher.name>

        Broken build when !USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR)
        https://bugs.webkit.org/show_bug.cgi?id=174369

        Reviewed by Alex Christensen.

        * dom/ScriptedAnimationController.h: Include PlatformScreen.h.

2017-07-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address post-review feedback after http://trac.webkit.org/r219310
        https://bugs.webkit.org/show_bug.cgi?id=174300
        <rdar://problem/33030639>

        Reviewed by Simon Fraser.

        Removes pan-gesture-related plumbing introduced in r219310 that is no longer necessary.

        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeWillStartPanGesture):
        (WebCore::ScrollingTree::scrollingTreeNodeDidEndPanGesture): Deleted.

2017-07-11  Alex Christensen  <achristensen@webkit.org>

        Reduce URL size
        https://bugs.webkit.org/show_bug.cgi?id=174319

        Reviewed by Andreas Kling.

        m_fragmentEnd is redundant information. If a URL is valid, then it is always m_string.length().
        If a URL is not valid, then it is always 0. Rather than storing additional information,
        deduce the fragment end from the validity of the URL and the String's length.

        No change in behavior.  This reduces sizeof(URL) from 56 to 48 and reduces operations when parsing.

        * platform/URL.cpp:
        (WebCore::URL::invalidate):
        (WebCore::URL::fragmentIdentifier):
        (WebCore::URL::hasFragmentIdentifier):
        (WebCore::URL::removeFragmentIdentifier):
        * platform/URL.h:
        (WebCore::URL::encode):
        (WebCore::URL::decode):
        (WebCore::URL::hasFragment):
        * platform/URLParser.cpp:
        (WebCore::URLParser::urlLengthUntilPart):
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::allValuesEqual):
        (WebCore::URLParser::internalValuesConsistent):

2017-07-11  Alex Christensen  <achristensen@webkit.org>

        SharedBuffer::size should return a size_t
        https://bugs.webkit.org/show_bug.cgi?id=174328

        Reviewed by Andreas Kling.

        No change in behaviour.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::createTemplateDocumentData):
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::handleProvisionalLoadFailure):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::tryCreateArrayBuffer):
        * platform/SharedBuffer.h:

2017-07-11  Per Arne Vollan  <pvollan@apple.com>

        [Win] Build error when building WebCore from WebCore.proj project file.
        https://bugs.webkit.org/show_bug.cgi?id=174330

        Reviewed by Brent Fulgham.

        The CMake variable PAL_DIR should be set in the project file.

        * WebCore.vcxproj/WebCore.proj:

2017-05-24  Sergio Villar Senin  <svillar@igalia.com>

        [SVG] Leak in SVGAnimatedListPropertyTearOff
        https://bugs.webkit.org/show_bug.cgi?id=172545

        Reviewed by Said Abou-Hallawa.

        SVGAnimatedListPropertyTearOff maintains a vector m_wrappers with references to
        SVGPropertyTraits<PropertyType>::ListItemTearOff. Apart from that SVGPropertyTearOff has a
        reference to SVGAnimatedProperty.

        When SVGListProperty::getItemValuesAndWrappers() is called, it creates a
        SVGPropertyTraits<PropertyType>::ListItemTearOff pointing to the same SVGAnimatedProperty (a
        SVGAnimatedListPropertyTearOff) which stores the m_wrappers vector where the ListItemTearOff
        is going to be added to. This effectively creates a reference cycle between the
        SVGAnimatedListPropertyTearOff and all the ListItemTearOff it stores in m_wrappers.

        We should detach those wrappers in propertyWillBeDeleted() in order to break the cycle.

        * svg/properties/SVGAnimatedListPropertyTearOff.h:

2017-07-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Spin buttons on input type number appear over the value itself for small widths
        https://bugs.webkit.org/show_bug.cgi?id=173572

        Reviewed by Carlos Garcia Campos.

        When drawing the spin buttons, override the width of the input
        element to increment it with the width of the spin button.
        This ensures that we don't end up covering the input values with
        the spin buttons.

        Do this also for user controlled styles, because most web authors
        won't test how their site renders on WebKitGTK+, and they will
        assume spin buttons in the order of 13 pixels wide (that is what
        most browsers use), but the GTK+ spin button is much wider (66 pixels).

        Test: platform/gtk/fast/forms/number/number-size-spinbutton-nocover.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustTextFieldStyle): Call the theme's adjustTextFieldStyle() also for user controlled styles.
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):

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

        We should do ICE candidate filtering at the Document level
        https://bugs.webkit.org/show_bug.cgi?id=173861
        <rdar://problem/33122058>

        Reviewed by Eric Carlson.

        Tests: http/tests/webrtc/filtering-ice-candidate-cross-origin-frame.html
               http/tests/webrtc/filtering-ice-candidate-same-origin-frame.html
               http/tests/webrtc/filtering-ice-candidate-same-origin-frame2.html
               webrtc/filtering-ice-candidate-after-reload.html

        Making UserMediaRequest disable the ICE candidate filtering for the page RTCController.
        All RTCPeerConnection of the page that are created on a document that are same-origin as the top document
        are now registered to the RTCController.
        This allows disabling filtering to only these RTCPeerConnection.

        The page keeps the default ICE candidate filtering policy.
        This policy allows disabling ICE candidate filtering for all RTCPeerConnection.

        When the top document is changing, the RTCController filtering policy is reset
        and its list of RTCPeerConnection is emptied.

        Internals no longer disables ICE candidate filtering by default.
        This allows finer grained testing.
        ICE candidate filtering is disabled for tests including testharnessreport.js
        to enable web-platform-tests to run without modifications.

        * Modules/mediastream/RTCController.cpp:
        (WebCore::RTCController::reset):
        * Modules/mediastream/RTCController.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/Page.cpp:
        (WebCore::Page::disableICECandidateFiltering):
        * page/Page.h:
        (WebCore::Page::shouldEnableICECandidateFilteringByDefault):
        (WebCore::Page::disableICECandidateFiltering): Deleted.
        (WebCore::Page::enableICECandidateFiltering): Deleted.
        (WebCore::Page::isICECandidateFilteringEnabled): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::setICECandidateFiltering):
        (WebCore::Internals::setEnumeratingAllNetworkInterfacesEnabled):
        (WebCore::Internals::isICECandidateFilteringEnabled): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-07-11  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed, rolling out r219325.

        The test is still flaky

        Reverted changeset:

        "[SVG] Leak in SVGAnimatedListPropertyTearOff"
        https://bugs.webkit.org/show_bug.cgi?id=172545
        http://trac.webkit.org/changeset/219325

2017-05-24  Sergio Villar Senin  <svillar@igalia.com>

        [SVG] Leak in SVGAnimatedListPropertyTearOff
        https://bugs.webkit.org/show_bug.cgi?id=172545

        Reviewed by Said Abou-Hallawa.

        SVGAnimatedListPropertyTearOff maintains a vector m_wrappers with references to
        SVGPropertyTraits<PropertyType>::ListItemTearOff. Apart from that SVGPropertyTearOff has a
        reference to SVGAnimatedProperty.

        When SVGListProperty::getItemValuesAndWrappers() is called, it creates a
        SVGPropertyTraits<PropertyType>::ListItemTearOff pointing to the same SVGAnimatedProperty (a
        SVGAnimatedListPropertyTearOff) which stores the m_wrappers vector where the ListItemTearOff
        is going to be added to. This effectively creates a reference cycle between the
        SVGAnimatedListPropertyTearOff and all the ListItemTearOff it stores in m_wrappers.

        We should detach those wrappers in propertyWillBeDeleted() in order to break the cycle.

        * svg/properties/SVGAnimatedListPropertyTearOff.h:

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

        [WK2 iOS] REGRESSION (r216803) During momentum scroll, getBoundingClientRect returns wrong coordinates (missing images on pinterest, elle.com and many other sites)
        https://bugs.webkit.org/show_bug.cgi?id=174286
        rdar://problem/32864180

        Reviewed by Dean Jackson.

        r216803 made getBoundingClientRects relative to the layout viewport, but when scrolling we
        only update that on stable viewport updates (at the end of the scroll). This meant that during
        unstable updates, getBoundingClientRects() used a "frozen" viewport origin so things on-screen
        would appear to be off-screen, causing sites to fail to dynamically load images etc. when
        scrolling.

        Fix by pushing an optional "unstable" layout viewport rect onto FrameView, which gets used by
        FrameView::documentToClientOffset(). This is cleared when we do a stable update.

        This is a short-term solution. Longer term, I would prefer to always call setLayoutViewportOverrideRect(),
        but fix the scrolling tree logic to work correctly in this case.

        Add a bit more scrolling logging.

        Test: fast/visual-viewport/ios/get-bounding-client-rect-unstable.html

        * page/FrameView.cpp:
        (WebCore::FrameView::setUnstableLayoutViewportRect):
        (WebCore::FrameView::documentToClientOffset):
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        (WebCore::ScrollingStateFixedNode::reconcileLayerPositionForViewportRect):

2017-07-10  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Prune statistics in orders of importance
        https://bugs.webkit.org/show_bug.cgi?id=174215
        <rdar://problem/33164403>

        Reviewed by Chris Dumez.

        Test: http/tests/loading/resourceLoadStatistics/prune-statistics.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::reduceTimeResolution):
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Now all set the new statistics field lastSeen.
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString):
        (WebCore::ResourceLoadStatistics::merge):
            Handling of the new statistics field lastSeen.
        * loader/ResourceLoadStatistics.h:

2017-07-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Highlight matching CSS canvas clients when hovering contexts in the Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=174279

        Reviewed by Matt Baker.

        Test: inspector/dom/highlightNodeList.html

        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightNodeList):

2017-07-10  Javier Fernandez  <jfernandez@igalia.com>

        [css-align][css-flex][css-grid] 'auto' values of align-self and justify-self must not be resolved
        https://bugs.webkit.org/show_bug.cgi?id=172707

        Reviewed by Antti Koivisto.

        The CSS Box Alignment specification has been changed recently so that
        now all the propeties have the specificed value as computed value. The
        rationale of this change are at the associated W3C github issue [1].

        This change implies that we don't need to execute the StyleAdjuter
        logic we implemented specifically for supporting 'auto' values
        resolution for computed style. We can live now with resolution at
        layout time only.

        [1] https://github.com/w3c/csswg-drafts/issues/440

        No new tests, just updating the already defined tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Removed
        * css/StyleResolver.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::columnFlexItemHasStretchAlignment):
        (WebCore::RenderBox::hasStretchedLogicalWidth):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::styleDidChange): Added
        (WebCore::RenderFlexibleBox::alignmentForChild):
        * rendering/RenderFlexibleBox.h:

2017-07-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Ignore touch events that interrupt platform-driven momentum scrolling
        https://bugs.webkit.org/show_bug.cgi?id=174300
        <rdar://problem/33030639>

        Reviewed by Simon Fraser.

        See Source/WebKit2/ChangeLog for more detail.

        Tests: fast/events/ios/no-touch-events-when-stopping-momentum-scroll-in-mainframe.html
               fast/events/ios/no-touch-events-when-stopping-momentum-scroll-in-overflow.html
               fast/events/ios/touch-events-during-scroll-deceleration-in-overflow.html

        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeDidEndPanGesture):

2017-07-10  Jeremy Jones  <jeremyj@apple.com>

        Captions and subtitles not showing up in picture-in-picture for MSE content
        https://bugs.webkit.org/show_bug.cgi?id=174317
        rdar://problem/33188591

        Reviewed by Eric Carlson.

        Reverts a regression created by r218403.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateTextTrackRepresentation):

2017-07-10  Per Arne Vollan  <pvollan@apple.com>

        [Win] Link error when building WTF from WTF.proj project file.
        https://bugs.webkit.org/show_bug.cgi?id=174316
        <rdar://problem/33178200>

        Reviewed by Brent Fulgham.

        WTF_CPU_X86 cmake variable needs to be set for link libraries directories to be correct.

        * WebCore.vcxproj/WebCore.proj:

2017-07-10  Jeremy Jones  <jeremyj@apple.com>

        media element handle adding source immediately before src.
        https://bugs.webkit.org/show_bug.cgi?id=174284
        rdar://problem/33115439

        Reviewed by David Kilzer.

        Test: media/video-source-before-src.html

        Adding a source causes a selectMediaResource block to be enqueued.
        If dataLoadingPermitted prevents creating the m_player but sets the srcAttr, then
        the enqueued selectMediaResource will be in a bad state, with a srcAttr but no m_player.

        This fix prevents selectMediaResource from being called, if data loading is not permitted
        when adding a source element, to match how it prevents player creation when setting srcAttr.

        This fix also adds a debug assert to catch the problem earlier and adds an early return to
        prevent the crash in release builds.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::sourceWasAdded):

2017-07-10  Megan Gardner  <megan_gardner@apple.com>

        Add location to NavigationActionData
        https://bugs.webkit.org/show_bug.cgi?id=174233
        <rdar://problem/29165518>

        Reviewed by Simon Fraser.
        
        Add the root view location of a tap to a NavigationAction to vend to Safari.

        Test: small enough change to not be tested alone.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::absoluteLocationConvertedToRootView):
        * dom/MouseRelatedEvent.h:

2017-07-10  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move plugin object customization into the generator
        https://bugs.webkit.org/show_bug.cgi?id=174238

        Reviewed by Chris Dumez.

        - Added [Plugin] extended attribute to forward the necessary hooks
          for get/set/delete to the plugin code.
        - Removed [CustomNamedSetter] and replaced it's remaining uses
          [CustomPut] (formally called [CustomPutFunction]).
        - Renamed [CustomNamedGetterOnPrototype] to [CustomPutOnPrototype]
          because that is actually what it does.
        - Removed [CustomGetOwnPropertySlotByIndex] and made 
          [CustomGetOwnPropertySlot] imply it, as the other custom hooks
          do.
        - Renamed [CustomEnumerateProperty] to [CustomGetOwnPropertyNames]
          to conform with other attribute names.
        - Renamed [CustomCall] to [CustomGetCallData] to conform with other 
          attribute names.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLAppletElementCustom.cpp: Removed.
        * bindings/js/JSHTMLEmbedElementCustom.cpp: Removed.
        * bindings/js/JSHTMLObjectElementCustom.cpp: Removed.
        Remove custom bindings.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::putCommon):
        (WebCore::JSCSSStyleDeclaration::put):
        (WebCore::JSCSSStyleDeclaration::putByIndex):
        (WebCore::JSCSSStyleDeclaration::putDelegate): Deleted.
        Use [CustomPut] rather than [CustomNamedSetter] to allow us
        to get rid of [CustomNamedSetter]. Reuse put delegate as
        common code to share between put and putByIndex.

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::JSLocation::getOwnPropertySlot):
        (WebCore::JSLocation::getOwnPropertySlotByIndex):
        Replace [CustomGetOwnPropertySlotAndDescriptor] with [CustomGetOwnPropertySlot]
        which is more clear and reduces the number of variants of this hook override
        we need.

        (WebCore::putCommon):
        (WebCore::JSLocation::put):
        (WebCore::JSLocation::putByIndex):
        Use [CustomPut] rather than [CustomNamedSetter] to allow us
        to get rid of [CustomNamedSetter]. Reuse put delegate as
        common code to share between put and putByIndex.

        (WebCore::JSLocationPrototype::put):
        [CustomPutOnPrototype] (which weirdly used incorrectly be called 
        [CustomNamedGetterOnPrototype]) now works like [CustomPut] meaning
        you need to call Base.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        (WebCore::pluginElementCustomGetOwnPropertySlot):
        (WebCore::pluginElementCustomPut):
        * bindings/js/JSPluginElementFunctions.h:
        (WebCore::pluginElementCustomGetOwnPropertySlot): Deleted.
        Remove templatized pluginElementCustomGetOwnPropertySlot, which was 
        completely unnecessary and merge its functionality into the out of
        line overload. Remove pluginElementPropertyGetter from the header,
        since it is only used in implementation, and unify the naming and
        argument position (JSHTMLElement* comes first) of the hooks.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateIndexedGetter):
        (GenerateNamedGetter):
        (GenerateGetOwnPropertySlot):
        (GenerateGetOwnPropertySlotByIndex):
        (GenerateGetOwnPropertyNames):
        (GeneratePut):
        (GeneratePutByIndex):
        (GenerateDeleteProperty):
        (GenerateDeletePropertyByIndex):
        (GenerateNamedDeleterDefinition):
        (InstanceOverridesGetOwnPropertySlot):
        (InstanceOverridesGetOwnPropertyNames):
        (InstanceOverridesPut):
        (InstanceOverridesDeleteProperty):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateGetCallData):
        (GeneratePluginCall):
        (GenerateLegacyCallerDefinitions):
        (GenerateLegacyCallerDefinition):
        (GeneratePrototypeDeclaration):
        (InstanceOverridesGetCallData):
        (HeaderNeedsPrototypeDeclaration):
        - Add support for [Plugin]
        - Remove support for [CustomNamedSetter]
        - Replace [CustomGetOwnPropertySlotByIndex] with [CustomGetOwnPropertySlot]
        - Replace [CustomEnumerateProperty] with [CustomGetOwnPropertyNames]
        - Replace [CustomPutFunction] with [CustomPut].
        - Make subroutine names more consistent (remove a few Definition suffixes)

        * bindings/scripts/IDLAttributes.json:
        Update for new / removed attributes.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp: Added.
        * bindings/scripts/test/JS/JSTestPluginInterface.h: Added.
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestPluginInterface.idl: Added.
        Update / add tests.

        * css/CSSStyleDeclaration.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * storage/Storage.idl:
        Update for new / renamed attributes.

2017-07-03  Brian Burg  <bburg@apple.com>

        Web Replay: remove some unused code
        https://bugs.webkit.org/show_bug.cgi?id=173903

        Rubber-stamped by Joseph Pecoraro.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::lastModified):
        (WebCore::Document::inputCursor): Deleted.
        (WebCore::Document::setInputCursor): Deleted.
        * dom/Document.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::sessionCreatedImpl): Deleted.
        (WebCore::InspectorInstrumentation::sessionLoadedImpl): Deleted.
        (WebCore::InspectorInstrumentation::sessionModifiedImpl): Deleted.
        (WebCore::InspectorInstrumentation::segmentCreatedImpl): Deleted.
        (WebCore::InspectorInstrumentation::segmentCompletedImpl): Deleted.
        (WebCore::InspectorInstrumentation::segmentLoadedImpl): Deleted.
        (WebCore::InspectorInstrumentation::segmentUnloadedImpl): Deleted.
        (WebCore::InspectorInstrumentation::captureStartedImpl): Deleted.
        (WebCore::InspectorInstrumentation::captureStoppedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackStartedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackPausedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackHitPositionImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackFinishedImpl): Deleted.
        (WebCore::InspectorInstrumentation::replayAgentEnabled): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::sessionCreated): Deleted.
        (WebCore::InspectorInstrumentation::sessionLoaded): Deleted.
        (WebCore::InspectorInstrumentation::sessionModified): Deleted.
        (WebCore::InspectorInstrumentation::segmentCreated): Deleted.
        (WebCore::InspectorInstrumentation::segmentCompleted): Deleted.
        (WebCore::InspectorInstrumentation::segmentLoaded): Deleted.
        (WebCore::InspectorInstrumentation::segmentUnloaded): Deleted.
        (WebCore::InspectorInstrumentation::captureStarted): Deleted.
        (WebCore::InspectorInstrumentation::captureStopped): Deleted.
        (WebCore::InspectorInstrumentation::playbackStarted): Deleted.
        (WebCore::InspectorInstrumentation::playbackPaused): Deleted.
        (WebCore::InspectorInstrumentation::playbackFinished): Deleted.
        (WebCore::InspectorInstrumentation::playbackHitPosition): Deleted.
        * inspector/InspectorReplayAgent.cpp: Removed.
        * inspector/InspectorReplayAgent.h: Removed.
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorReplayAgent): Deleted.
        (WebCore::InstrumentingAgents::setInspectorReplayAgent): Deleted.
        * page/EventHandler.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::replayController): Deleted.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::replaySessionStateDidChange): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        * platform/Logging.h:
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::getPluginData):
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::pluginData):
        * replay/AllReplayInputs.h: Removed.
        * replay/CapturingInputCursor.cpp: Removed.
        * replay/CapturingInputCursor.h: Removed.
        * replay/EventLoopInput.cpp: Removed.
        * replay/EventLoopInput.h: Removed.
        * replay/EventLoopInputDispatcher.cpp: Removed.
        * replay/EventLoopInputDispatcher.h: Removed.
        * replay/FunctorInputCursor.h: Removed.
        * replay/MemoizedDOMResult.cpp: Removed.
        * replay/MemoizedDOMResult.h: Removed.
        * replay/ReplayController.cpp: Removed.
        * replay/ReplayController.h: Removed.
        * replay/ReplayInputCreationMethods.cpp: Removed.
        * replay/ReplayInputDispatchMethods.cpp: Removed.
        * replay/ReplaySession.cpp: Removed.
        * replay/ReplaySession.h: Removed.
        * replay/ReplaySessionSegment.cpp: Removed.
        * replay/ReplaySessionSegment.h: Removed.
        * replay/ReplayingInputCursor.cpp: Removed.
        * replay/ReplayingInputCursor.h: Removed.
        * replay/SegmentedInputStorage.cpp: Removed.
        * replay/SegmentedInputStorage.h: Removed.
        * replay/SerializationMethods.cpp: Removed.
        * replay/SerializationMethods.h: Removed.
        * replay/WebInputs.json: Removed.

2017-07-10  Brady Eidson  <beidson@apple.com>

        Cleanup lifetime issues of UniqueIDBDatabase and IDBBackingStore.
        <rdar://problem/32908525> and https://bugs.webkit.org/show_bug.cgi?id=174244

        Reviewed by David Kilzer and Alex Christensen. 

        No targeted test possible, implicitly covered by all IDB tests.

        The original idea behind UniqueIDBDatabase lifetime was that they are ThreadSafeRefCounted and
        we take protector Refs when any operation that needs it alive is in flight.
        
        This added variability to their lifetime which made it difficult to enforce a few different 
        design invariants, namely:
            - UniqueIBDDatabase objects are always created and destroyed only on the main thread.
            - IDBBackingStore objects are always created and destroyed only on the database thread.
        
        This patch removes the ref counting and instead ties UniqueIDBDatabase lifetime to a
        std::unique_ptr that is owned by the IDBServer.
        
        Whenever any operations on the UniqueIDBDatabase are in flight it is kept alive by virtue
        of that unique_ptr in the IDBServer. Once a UniqueIDBDatabase is completely done with all of
        its work, the following happens:
            - On the main thread the IDBServer removes the unique_ptr owning the UniqueIDBDatabase
              from its map.
            - It hands the unique_ptr to the UniqueIDBDatabase itself, which schedules one final 
              database thread task.
            - That database thread task is to destroy the IDBBackingStore, kill its message queues,
              and then message back to the main thread for one final task.
            - That main thread task is to release the unique_ptr, resulting in destruction of the
              UniqueIDBDatabase object.
        
        This is safe, predictable, solves the lifetime issues that r218516 originally tried to solve,
        and solves the lifetime issues that r218516 introduced.

        (This patch also adds many more assertions to cover various design invariants throughout the
        lifecycle of a particular UniqueIDBDatabase)

        ASSERT that IDBBackingStores are only ever created and destroyed on the background thread:
        * Modules/indexeddb/server/IDBBackingStore.h:
        (WebCore::IDBServer::IDBBackingStore::~IDBBackingStore):
        (WebCore::IDBServer::IDBBackingStore::IDBBackingStore):
        
        Transition UniqueIDBDatabase ownership from a RefPtr to a std::unique_ptr:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getOrCreateUniqueIDBDatabase):
        (WebCore::IDBServer::IDBServer::closeAndTakeUniqueIDBDatabase):
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins):
        (WebCore::IDBServer::IDBServer::closeUniqueIDBDatabase): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        
        Make all the other changes mentioned above:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::~UniqueIDBDatabase): Bulk up on ASSERTs
        (WebCore::IDBServer::UniqueIDBDatabase::openDatabaseConnection): 
        (WebCore::IDBServer::UniqueIDBDatabase::performUnconditionalDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::shutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::handleCurrentOperation):
        (WebCore::IDBServer::UniqueIDBDatabase::performIterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::performPrefetchCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):
        (WebCore::IDBServer::UniqueIDBDatabase::activateTransactionInBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::transactionCompleted):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply):
        (WebCore::IDBServer::UniqueIDBDatabase::executeNextDatabaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::executeNextDatabaseTaskReply):
        (WebCore::IDBServer::UniqueIDBDatabase::maybeFinishHardClose):
        (WebCore::IDBServer::UniqueIDBDatabase::isDoneWithHardClose):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformUnconditionalDeleteBackingStore): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        (WebCore::IDBServer::UniqueIDBDatabase::create): Deleted.

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

        Further WebResourceLoadStatisticsStore / ResourceLoadStatisticsStore clean up
        https://bugs.webkit.org/show_bug.cgi?id=174301

        Reviewed by Brent Fulgham.

        Moved some generic file system utility functions down to platform's FileSystem.h.

        * platform/FileSystem.cpp:
        (WebCore::openAndLockFile):
        (WebCore::unlockAndCloseFile):
        * platform/FileSystem.h:

2017-07-10  Andreas Kling  <akling@apple.com>

        REGRESSION(r210226): Keyboard-focused element not preserved when navigating back through page cache, causing multiple elements to have focus
        https://bugs.webkit.org/show_bug.cgi?id=174302
        <rdar://problem/33204273>

        Reviewed by Antti Koivisto.

        Don't clear the active/hovered/focused elements when destroying the render tree,
        since we might need to reconstruct it later, and would like to remember which
        elements those were.

        Only the focused state actually stuck when going in and out of the page cache,
        but this patch removes all the element pointer clearing for consistency.

        Test: fast/history/page-cache-element-state-focused.html

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

2017-07-10  Daniel Bates  <dabates@apple.com>

        REGRESSION (r218616): Cannot build WebCore for macOS 10.12 with macOS 10.13 SDK
        https://bugs.webkit.org/show_bug.cgi?id=173939

        Reviewed by Dan Bernstein.

        (The code in this change was either suggested or written by Dan Bernstein with a very
        minor adjustment to get it to build).

        Allow WebCore to link even though CTFontCreatePhysicalFontForCharactersWithLanguage() is
        undefined when building against the macOS 10.13 SDK targeting macOS 10.12. Let the dynamic
        linker resolve the undefined symbol.

        For completeness the SPI CTFontCreatePhysicalFontForCharactersWithLanguage() was removed
        from the macOS 10.13 SDK.

        * Configurations/WebCore.xcconfig: Tell the linker that CTFontCreatePhysicalFontForCharactersWithLanguage()
        can be undefined when building against macOS 10.13 or later SDK.
        * platform/spi/cocoa/CoreTextSPI.h: Annotate CTFontCreatePhysicalFontForCharactersWithLanguage()
        with its availability information.

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

        Block of text is missing in iBooks sample books.
        https://bugs.webkit.org/show_bug.cgi?id=174295
        <rdar://problem/32955620>

        Reviewed by Antti Koivisto.

        In the simple line layout context, translating y coordinate to a line index is
        normally just a (y / line height) operation. However in case of strut offsets (pagination)
        we need to take these extra paddings into account while resolving the line index.
        This patch fixes the boundary checking for a given line by using the font size only
        when the font is taller than the line.

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

2017-07-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] SoupCookieJar is never released (resulting in sqlite temp files lying around)
        https://bugs.webkit.org/show_bug.cgi?id=166029

        Reviewed by Michael Catanzaro.

        Add clearSoupNetworkSessionAndCookieStorage() to clear the SoupNetworkSession and cookie storage of the main
        network session, ensuring the cookies database is properly closed.

        * platform/network/NetworkStorageSession.h:
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::clearSoupNetworkSessionAndCookieStorage):

2017-07-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move make-js-file-arrays.py from WebCore to JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=174024

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt: Explicitly add files generated by MAKE_JS_FILE_ARRAYS to the build, since the macro no longer
        does it.
        * DerivedSources.make: Updated to use make-js-file-arrays.py from JavaScriptCore. It's no longer needed to set
        PYTHON_PATH to find jsmin.py.

2017-07-10  Charlie Turner  <cturner@igalia.com>

        [GTK] http/tests/media/video-redirect.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=174260

        Reviewed by Carlos Garcia Campos.

        Make sure we're testing new URLs within the same security origin.

        Covered by existing tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::convertToInternalProtocol): Factor out setting our
        internal URL schema.
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL): Use the
        refactored helper.
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation): Use
        refactored helper to ensure both URLs have the same origin.

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

        Resource Load Statistics: User interaction should always go to top document
        https://bugs.webkit.org/show_bug.cgi?id=174120
        <rdar://problem/33117899>

        Reviewed by Chris Dumez.

        Test: http/tests/loading/resourceLoadStatistics/user-interaction-in-cross-origin-sub-frame.html

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
            Now logs user interaction for the top document.
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setThrottledObserverNotifications):
            Test infrastructure.
        (WebCore::ResourceLoadObserver::setNotificationCallback):
            Callback now takes a ResourceLoadObserver::NotificationType.
        (WebCore::ResourceLoadObserver::logFrameNavigation):
            Submits the configured ResourceLoadObserver::NotificationType.
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
            Submits the configured ResourceLoadObserver::NotificationType.
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
            Submits the configured ResourceLoadObserver::NotificationType.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Submits the configured ResourceLoadObserver::NotificationType.
        * loader/ResourceLoadObserver.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
            Resets to throttled notifications.
        (WebCore::Internals::setResourceLoadStatisticsThrottledObserverNotifications):
            Test infrastructure.
        * testing/Internals.h:
        * testing/Internals.idl:
            Added internals.setResourceLoadStatisticsThrottledObserverNotifications().

2017-07-09  Brady Eidson  <beidson@apple.com>

        Remove some obsolete WebKitVersionChecks.
        https://bugs.webkit.org/show_bug.cgi?id=174294

        Reviewed by Dan Bernstein.

        No new tests (No change to testable behavior)

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        
        * page/Settings.in:
        
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isOkCupid): Deleted.
        (WebCore::IOSApplication::isFacebook): Deleted.
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layoutOverflowRectForPropagation):

2017-07-08  Brady Eidson  <beidson@apple.com>

        Remove some obsolete RuntimeApplicationChecks.
        https://bugs.webkit.org/show_bug.cgi?id=174293

        Reviewed by Dan Bernstein.

        No new tests (No change to testable behavior)

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        (WebCore::shouldNotPerformURLAdjustment): Deleted.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isDaijisenDictionary): Deleted.
        (WebCore::IOSApplication::isNASAHD): Deleted.
        (WebCore::IOSApplication::isTheEconomistOnIphone): Deleted.

        * platform/ios/wak/WebCoreThread.h:
        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread):
        (WebThreadSetDelegateSourceRunLoopMode): Deleted.

2017-07-08  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Safe access and life cycle management of bare Curl handle
        by wrapping with C++ class
        https://bugs.webkit.org/show_bug.cgi?id=174002

        Reviewed by Alex Christensen.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForSession):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::CurlContext):
        (WebCore::CurlContext::~CurlContext):
        (WebCore::CurlContext::initCookieSession):
        (WebCore::CurlShareHandle::CurlShareHandle):
        (WebCore::CurlShareHandle::~CurlShareHandle):
        (WebCore::CurlShareHandle::lockCallback):
        (WebCore::CurlShareHandle::unlockCallback):
        (WebCore::CurlShareHandle::mutexFor):
        (WebCore::CurlMultiHandle::CurlMultiHandle):
        (WebCore::CurlMultiHandle::~CurlMultiHandle):
        (WebCore::CurlMultiHandle::addHandle):
        (WebCore::CurlMultiHandle::removeHandle):
        (WebCore::CurlMultiHandle::getFdSet):
        (WebCore::CurlMultiHandle::perform):
        (WebCore::CurlMultiHandle::readInfo):
        (WebCore::CurlHandle::CurlHandle):
        (WebCore::CurlHandle::~CurlHandle):
        (WebCore::CurlHandle::perform):
        (WebCore::CurlHandle::pause):
        (WebCore::CurlHandle::enableShareHandle):
        (WebCore::CurlHandle::setPrivateData):
        (WebCore::CurlHandle::setUrl):
        (WebCore::CurlHandle::clearUrl):
        (WebCore::CurlHandle::clearRequestHeaders):
        (WebCore::CurlHandle::appendRequestHeader):
        (WebCore::CurlHandle::enableRequestHeaders):
        (WebCore::CurlHandle::enableHttpGetRequest):
        (WebCore::CurlHandle::enableHttpHeadRequest):
        (WebCore::CurlHandle::enableHttpPostRequest):
        (WebCore::CurlHandle::setPostFields):
        (WebCore::CurlHandle::setPostFieldLarge):
        (WebCore::CurlHandle::enableHttpPutRequest):
        (WebCore::CurlHandle::setInFileSizeLarge):
        (WebCore::CurlHandle::setHttpCustomRequest):
        (WebCore::CurlHandle::enableAcceptEncoding):
        (WebCore::CurlHandle::enableAllowedProtocols):
        (WebCore::CurlHandle::enableFollowLocation):
        (WebCore::CurlHandle::enableAutoReferer):
        (WebCore::CurlHandle::enableHttpAuthentication):
        (WebCore::CurlHandle::setHttpAuthUserPass):
        (WebCore::CurlHandle::enableCAInfoIfExists):
        (WebCore::CurlHandle::setSslVerifyPeer):
        (WebCore::CurlHandle::setSslVerifyHost):
        (WebCore::CurlHandle::setSslCert):
        (WebCore::CurlHandle::setSslCertType):
        (WebCore::CurlHandle::setSslKeyPassword):
        (WebCore::CurlHandle::enableCookieJarIfExists):
        (WebCore::CurlHandle::setCookieList):
        (WebCore::CurlHandle::getCookieList):
        (WebCore::CurlHandle::clearCookieList):
        (WebCore::CurlHandle::enableProxyIfExists):
        (WebCore::CurlHandle::enableTimeout):
        (WebCore::CurlHandle::setHeaderCallbackFunction):
        (WebCore::CurlHandle::setWriteCallbackFunction):
        (WebCore::CurlHandle::setReadCallbackFunction):
        (WebCore::CurlHandle::setSslCtxCallbackFunction):
        (WebCore::CurlHandle::getEffectiveURL):
        (WebCore::CurlHandle::getPrimaryPort):
        (WebCore::CurlHandle::getResponseCode):
        (WebCore::CurlHandle::getContentLenghtDownload):
        (WebCore::CurlHandle::getHttpAuthAvail):
        (WebCore::CurlHandle::getTimes):
        (WebCore::CurlHandle::maxCurlOffT):
        (WebCore::CurlHandle::expectedSizeOfCurlOffT):
        (WebCore::CurlHandle::enableVerboseIfUsed):
        (WebCore::CurlHandle::enableStdErrIfUsed):
        (WebCore::CurlContext::getEffectiveURL): Deleted.
        (WebCore::CurlContext::createMultiHandle): Deleted.
        (WebCore::CurlContext::mutexFor): Deleted.
        (WebCore::CurlContext::lock): Deleted.
        (WebCore::CurlContext::unlock): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlGlobal::CurlGlobal):
        (WebCore::CurlGlobal::~CurlGlobal):
        (WebCore::CurlShareHandle::handle):
        (WebCore::CurlContext::shareHandle):
        (WebCore::CurlHandle::handle):
        (WebCore::CurlHandle::url):
        (WebCore::CurlContext::curlShareHandle): Deleted.
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::cancel):
        (WebCore::CurlDownload::getUrl):
        (WebCore::CurlDownload::addHeaders):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::writeCallback):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlJobManager.cpp:
        (WebCore::CurlJobManager::CurlJobManager):
        (WebCore::CurlJobManager::~CurlJobManager):
        (WebCore::CurlJobManager::addToCurl):
        (WebCore::CurlJobManager::removeFromCurl):
        (WebCore::CurlJobManager::workerThread):
        * platform/network/curl/CurlJobManager.h:
        (WebCore::CurlJobManager::getMultiHandle): Deleted.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::calculateWebTimingInformations):
        (WebCore::handleLocalReceiveResponse):
        (WebCore::writeCallback):
        (WebCore::getProtectionSpace):
        (WebCore::headerCallback):
        (WebCore::readCallback):
        (WebCore::setupFormData):
        (WebCore::ResourceHandle::setupPUT):
        (WebCore::ResourceHandle::setupPOST):
        (WebCore::ResourceHandle::dispatchSynchronousJob):
        (WebCore::ResourceHandle::applyAuthentication):
        (WebCore::ResourceHandle::initialize):
        (WebCore::ResourceHandle::handleCurlMsg):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::removeFromCurl):
        (WebCore::ResourceHandleManager::startJob):
        * platform/network/curl/ResourceHandleManager.h:
        * platform/network/curl/SSLHandle.cpp:
        (WebCore::setSSLClientCertificate):
        (WebCore::certVerifyCallback):
        (WebCore::setSSLVerifyOptions):

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

        REGRESSION: "visibility:hidden" does not hide play button for video elements
        https://bugs.webkit.org/show_bug.cgi?id=174258
        <rdar://problem/33181452>

        Reviewed by Dean Jackson.

        In order to not have most styles from the page affect the shadow root, we set "all: initial" on the
        media controls container. However, we need to still make the "visibility" property inherit from its
        host such that "visibility: hidden" on the host won't be overridden by setting the property back to
        its initial value, which is "visible".

        Test: media/modern-media-controls/css/visibility-hidden.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container):

2017-07-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Drop NOSNIFF compile flag
        https://bugs.webkit.org/show_bug.cgi?id=174289

        Reviewed by Michael Catanzaro.

        * Configurations/FeatureDefines.xcconfig:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        (WebCore::StyleSheetContents::notifyLoadedSheet):
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::mimeTypeAllowedByNosniff):
        (WebCore::CachedCSSStyleSheet::canUseSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseContentTypeOptionsHeader):
        * platform/network/HTTPParsers.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isScriptAllowedByNosniff):
        * platform/network/ResourceResponseBase.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveResponse):

2017-07-07  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Use a rolling 30-day uptime for processing statistics
        https://bugs.webkit.org/show_bug.cgi?id=174235
        <rdar://problem/33164381>

        Reviewed by Chris Dumez.

        Add a KeyedDecoder specialization for Deque.

        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeObjects):

2017-07-07  Daniel Bates  <dabates@apple.com>

        [AppCache] Ignore fallback entries whose namespace is not prefixed with manifest path
        https://bugs.webkit.org/show_bug.cgi?id=174273
        <rdar://problem/33011682>

        Reviewed by Brent Fulgham.

        As per <https://html.spec.whatwg.org/multipage/offline.html#parsing-cache-manifests> (07/06/2017)
        we should ignore fallback entires whose fallback namespace URL is not prefixed with
        the manifest path. For now we only apply this policy when the manifest is served with
        a non-standard Content-Type to minimize web compatibility risk.

        Test: http/tests/appcache/fallback-namespace-outside-manifest-path.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): Pass the MIME type of the manifest.
        * loader/appcache/ManifestParser.cpp:
        (WebCore::manifestPath): Computes the manifest path from a manifest URL.
        (WebCore::parseManifest): Modified to take the MIME type of the manifest. If the MIME type is
        non-standard (i.e. not text/cached-manifest) then skip fallback entries whose namespace is not
        prefixed with the manifest path. Otherwise, process fallback entries as we do now. Also cleaned
        up the code a bit while I was here, including renaming a local variable to be more descriptive
        and using a const character array for the manifest signature to avoid the need to document the
        length of the manifest signature in a comment.
        * loader/appcache/ManifestParser.h:

2017-07-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] For cross-app drags, 'drop' event handlers are never invoked if dataTransfer.dropEffect is not set while dragging
        https://bugs.webkit.org/show_bug.cgi?id=174219
        <rdar://problem/32083177>

        Reviewed by Ryosuke Niwa.

        Currently, in DragController.cpp, defaultOperationForDrag maps a drag source operation mask of
        DragOperationGeneric to DragOperationMove across all platforms. However, on iOS, where cross-app drag moves do
        not trigger a drop, this means drop handlers won't fire unless the dropEffect is explicitly set to copy.

        To fix this, we introduce DragController::platformGenericDragOperation(), which returns DragOperationCopy on iOS
        and DragOperationMove (the existing behavior) elsewhere. defaultOperationForDrag then maps a drag source
        operation mask of DragOperationGeneric to platformGenericDragOperation().

        Tests:  DataInteractionTests.ExternalSourceHTMLToUploadArea
                DataInteractionTests.ExternalSourceImageAndHTMLToUploadArea
                DataInteractionTests.ExternalSourceMoveOperationNotAllowed

        * page/DragController.cpp:
        (WebCore::DragController::platformGenericDragOperation):
        (WebCore::defaultOperationForDrag):
        * page/DragController.h:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::platformGenericDragOperation):

2017-07-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Show all elements currently using a given CSS Canvas
        https://bugs.webkit.org/show_bug.cgi?id=173965

        Reviewed by Joseph Pecoraro.

        Test: inspector/canvas/css-canvas-clients.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::removeClient):
        * css/CSSImageGeneratorValue.h:
        (WebCore::CSSImageGeneratorValue::clients):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::addObserver):
        (WebCore::HTMLCanvasElement::removeObserver):
        (WebCore::HTMLCanvasElement::cssCanvasClients):
        Each time an observer is added/removed for a given HTMLCanvasElement, send an event to the
        inspector frontend that the CSS canvas client nodes have changed. Additionally, anytime a
        client/use is added/removed from one of the observing CSSCanvasValue, fire the same event.

        * css/CSSCanvasValue.h:
        (isType):
        * html/HTMLCanvasElement.h:
        (WebCore::CanvasObserver::isCSSCanvasValueObserver):
        Allows type traits to distinguish CanvasObserver from CSSCanvasValue::CanvasObserverProxy.

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodes):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodesImpl):
        Notify the frontend that the list of client nodes has changed for the given canvas. Let the
        frontend request the actual list of node IDs when it needs, possibly at a later time.

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

        AVPlayer can continue to be active after released by MediaPlayerPrivateAVFoundationObjC.
        https://bugs.webkit.org/show_bug.cgi?id=174264

        Reviewed by Eric Carlson.

        If the AVPlayer is retained (by an autorelease pool, or internally by other objects in
        AVFoundation), releasing the AVPlayer is not enough to cancel loading or playback. So before
        releasing the AVPlayer, make sure to disassociate the current AVPlayerItem, which should
        cancel all activity in the AVPlayer.

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

2017-07-07  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Remove data url handler for async load
        https://bugs.webkit.org/show_bug.cgi?id=174263

        data url is handled by ResourceLoader. No need for specific handling
        in platform dependent layer.

        Reviewed by Alex Christensen.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startJob):

2017-07-07  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219257.

        The test added in the revision was still extreamly flaky on
        all testers.

        Reverted changeset:

        "[SVG] Leak in SVGAnimatedListPropertyTearOff"
        https://bugs.webkit.org/show_bug.cgi?id=172545
        http://trac.webkit.org/changeset/219257

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

        Unreviewed, rolling out r219238, r219239, and r219241.
        https://bugs.webkit.org/show_bug.cgi?id=174265

        "fast/workers/dedicated-worker-lifecycle.html is flaky"
        (Requested by yusukesuzuki on #webkit).

        Reverted changesets:

        "[WTF] Implement WTF::ThreadGroup"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219238

        "Unreviewed, build fix after r219238"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219239

        "Unreviewed, CLoop build fix after r219238"
        https://bugs.webkit.org/show_bug.cgi?id=174081
        http://trac.webkit.org/changeset/219241

2017-05-24  Sergio Villar Senin  <svillar@igalia.com>

        [SVG] Leak in SVGAnimatedListPropertyTearOff
        https://bugs.webkit.org/show_bug.cgi?id=172545

        Reviewed by Said Abou-Hallawa.

        SVGAnimatedListPropertyTearOff maintains a vector m_wrappers with references to
        SVGPropertyTraits<PropertyType>::ListItemTearOff. Apart from that SVGPropertyTearOff has a
        reference to SVGAnimatedProperty.

        When SVGListProperty::getItemValuesAndWrappers() is called, it creates a
        SVGPropertyTraits<PropertyType>::ListItemTearOff pointing to the same SVGAnimatedProperty (a
        SVGAnimatedListPropertyTearOff) which stores the m_wrappers vector where the ListItemTearOff
        is going to be added to. This effectively creates a reference cycle between the
        SVGAnimatedListPropertyTearOff and all the ListItemTearOff it stores in m_wrappers.

        We should detach those wrappers in propertyWillBeDeleted() in order to break the cycle.

        * svg/properties/SVGAnimatedListPropertyTearOff.h:

2017-07-07  Charlie Turner  <cturner@igalia.com>

        [GStreamer] vid.me videos do not play
        https://bugs.webkit.org/show_bug.cgi?id=172240

        Reviewed by Xabier Rodriguez-Calvar.

        In r142251, code to hide the WK HTTP source elements from elsewhere in
        the pipeline was removed. This has the nasty side-effect of
        auto-plugging the WK HTTP source into things it really should not be
        used in, especially the adaptive streaming demuxers. The reasons this
        is bad are documented in several places on Bugzilla, see the parent
        bug report for more details. The high-level issue is that the WK HTTP
        source and its use of WebCore is not thread-safe. Although work has
        been recently done to improve this situation, it's still not perfect.

        Another issue is the interface hlsdemux expects its HTTP source to
        implement, specifically seeking in READY.

        This does rely on HTTP context sharing being available in GStreamer,
        upstream bug is here:
        https://bugzilla.gnome.org/show_bug.cgi?id=761099. The failing case
        can be demonstrated with
        https://github.com/thiagoss/adaptive-test-server but manual testing on
        popular video hosting sites, including vid.me, shows that this doesn't
        bite us at the moment, just something else to fix in the future.

        There are some QoS issues with the adaptive streaming code in
        GStreamer, but it seems much better to offer a below par QoS in lieu
        of crashing/livelocking when playing certain streams, and issues can be
        raised upstream when they arise.

        This patch does take us further away from the future goal of having all
        networking operations go through the network process, but in return it
        solves some nasty crashes and livelocks that have been irritating
        users for some time. With the pressure off on this issue, work can be
        planned to consider how to make the WK HTTP source a better citizen
        inside the GStreamer pipeline when we migrate the netcode to go
        through the network process.

        A new test is added to check that the single file HLS playlists
        (new in version 4) can be played, which was the primary cause of
        this bug report.

        Test: http/tests/media/hls/range-request.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL): Perform
        some trickery to make sure that we only ever fetch URLs handed to
        us by WebCore. Any further URLs discovered inside the pipeline
        will not get WKWS auto-plugged, since they'll be plain https?
        schemas.
        (WebCore::MediaPlayerPrivateGStreamer::load): Refactor to use the
        setPlaybinURL helper method.
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add
        the setPlaybinURL helper method.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProtocols): Only advertise webkit+https?, this
        ensures we won't get auto-plugged by pipeline elements asking for
        an element to fetch https? resources (like adaptive demuxers).
        (convertPlaybinURI): Undo the trick when another element asks us
        for our URI.

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Implement WTF::ThreadGroup
        https://bugs.webkit.org/show_bug.cgi?id=174081

        Reviewed by Mark Lam.

        * page/ResourceUsageThread.h:

2017-07-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
        https://bugs.webkit.org/show_bug.cgi?id=174150

        Reviewed by Mark Lam.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::captionDisplayMode):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::binaryType):
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::language):
        (WebCore::AccessibilityObject::defaultLiveRegionStatusForRole):
        (WebCore::AccessibilityObject::actionVerb):
        (WebCore::AccessibilityObject::getAttribute):
        (WebCore::AccessibilityObject::placeholderValue):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessKey):
        (WebCore::AccessibilityObject::ariaLiveRegionRelevant):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessKey):
        (WebCore::AccessibilityRenderObject::actionVerb):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::constructElementWithFallback):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsEmptyStringBody):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::selectorText):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::valueName):
        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorSpecificityInternal):
        (WebCore::CSSSelector::specificityForPage):
        (WebCore::CSSSelector::RareData::RareData):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::argument):
        * css/CSSSelectorList.cpp:
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        * css/PageRuleCollector.cpp:
        (WebCore::checkPageSelectorComponents):
        * css/RuleSet.cpp:
        (WebCore::computeMatchBasedOnRuleHash):
        (WebCore::RuleSet::addRule):
        * css/SelectorChecker.cpp:
        (WebCore::tagMatches):
        * css/SelectorFilter.cpp:
        (WebCore::collectDescendantSelectorIdentifierHashes):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertStringOrAuto):
        (WebCore::StyleBuilderConverter::convertStringOrNone):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLocale):
        (WebCore::StyleBuilderCustom::applyValueWebkitTextEmphasisStyle):
        (WebCore::StyleBuilderCustom::applyValueContent):
        (WebCore::StyleBuilderCustom::applyValueAlt):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::StyleSheetContents):
        (WebCore::StyleSheetContents::namespaceURIFromPrefix):
        * css/makeprop.pl:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeCompoundSelector):
        (WebCore::CSSSelectorParser::consumeName):
        (WebCore::CSSSelectorParser::consumeAttribute):
        (WebCore::CSSSelectorParser::defaultNamespace):
        (WebCore::CSSSelectorParser::determineNamespace):
        (WebCore::CSSSelectorParser::prependTypeSelectorIfNeeded):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::attributeNameTestingRequiresNamespaceRegister):
        (WebCore::SelectorCompiler::equalTagNames):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        * dom/Attr.cpp:
        (WebCore::Attr::setPrefix):
        (WebCore::Attr::attachToElement):
        * dom/Attribute.h:
        (WebCore::Attribute::nameMatchesFilter):
        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::nameForProperty):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByTagNameNS):
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueuePostUpgradeReactions):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::convertPropertyNameToAttributeName):
        * dom/Document.cpp:
        (WebCore::createUpgradeCandidateElement):
        (WebCore::Document::createElementForBindings):
        (WebCore::Document::importNode):
        (WebCore::Document::hasValidNamespaceForElements):
        (WebCore::Document::processBaseElement):
        (WebCore::Document::dir):
        (WebCore::Document::bgColor):
        (WebCore::Document::fgColor):
        (WebCore::Document::alinkColor):
        (WebCore::Document::linkColorForBindings):
        (WebCore::Document::vlinkColor):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::setBooleanAttribute):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::getAttribute):
        (WebCore::Element::getAttributeNS):
        (WebCore::Element::setAttribute):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::didMoveToNewDocument):
        (WebCore::Element::setPrefix):
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::addAttributeInternal):
        (WebCore::Element::removeAttributeNS):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::hasAttributeNS):
        (WebCore::Element::computeInheritedLanguage):
        (WebCore::Element::updateNameForDocument):
        (WebCore::Element::updateIdForDocument):
        (WebCore::Element::didAddAttribute):
        (WebCore::Element::didRemoveAttribute):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        (WebCore::Element::attributeWithoutSynchronization):
        (WebCore::Element::idForStyleResolution):
        (WebCore::Element::getIdAttribute):
        (WebCore::Element::getNameAttribute):
        * dom/EventTarget.cpp:
        (WebCore::legacyType):
        * dom/MutationRecord.h:
        (WebCore::MutationRecord::attributeName):
        (WebCore::MutationRecord::attributeNamespace):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::removeNamedItemNS):
        * dom/Node.cpp:
        (WebCore::Node::prefix):
        (WebCore::Node::localName):
        (WebCore::Node::namespaceURI):
        (WebCore::Node::checkSetPrefix):
        (WebCore::locateDefaultNamespace):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::locateNamespacePrefix):
        (WebCore::Node::lookupPrefix):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCachedTagCollectionNS):
        (WebCore::NodeListsNodeData::addCachedCollection):
        (WebCore::NodeListsNodeData::cachedCollection):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCachedTagCollectionNS):
        (WebCore::NodeListsNodeData::removeCachedCollection):
        * dom/PseudoElement.cpp:
        (WebCore::pseudoElementTagName):
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init):
        (WebCore::nullQName):
        (WebCore::createQualifiedName):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::hasPrefix):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeSingleTagNameSelectorData):
        * dom/SlotAssignment.cpp:
        (WebCore::slotNameFromAttributeValue):
        * dom/SlotAssignment.h:
        (WebCore::SlotAssignment::defaultSlotName):
        (WebCore::ShadowRoot::didRemoveAllChildrenOfShadowHost):
        (WebCore::ShadowRoot::didChangeDefaultSlot):
        * dom/TagCollection.cpp:
        (WebCore::TagCollection::TagCollection):
        (WebCore::HTMLTagCollection::HTMLTagCollection):
        * dom/TagCollection.h:
        (WebCore::TagCollectionNS::elementMatches):
        * dom/make_names.pl:
        (printNamesCppFile):
        (printDefinitions):
        (printFactoryCppFile):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeNodeAttribute):
        * editing/Editing.cpp:
        (WebCore::createHTMLElement):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        (WebCore::MarkupAccumulator::shouldAddNamespaceElement):
        (WebCore::MarkupAccumulator::shouldAddNamespaceAttribute):
        (WebCore::MarkupAccumulator::appendNamespace):
        (WebCore::MarkupAccumulator::appendOpenTag):
        (WebCore::MarkupAccumulator::appendAttribute):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::elementURL):
        * editing/markup.cpp:
        (WebCore::AttributeChange::AttributeChange):
        * html/Autocapitalize.cpp:
        (WebCore::stringForAutocapitalizeType):
        * html/Autofill.cpp:
        (WebCore::AutofillData::createFromHTMLFormControlElement):
        * html/DOMTokenList.h:
        (WebCore::DOMTokenList::item):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::name):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::formControlType):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::toggleOpen):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::isCaseSensitiveAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::eventNameForEventHandlerAttribute):
        (WebCore::toValidDirValue):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::name):
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::doesHaveAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::createForJSConstructor):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::name):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setMultiple):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::scope):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::mediaElementCrossOriginAttribute):
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::~LabelsNodeList):
        * html/MediaController.cpp:
        (MediaController::playbackState):
        (eventNameForReadyState):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::initializeAttributes):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        (WebCore::parseHTMLHashNameReference):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::createForeignAttributesMap):
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::id):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::captionMenuOffItem):
        (WebCore::TextTrack::captionMenuAutomaticItem):
        * html/track/TrackBase.cpp:
        (WebCore::MediaTrackBase::setKindInternal):
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::scroll):
        * html/track/WebVTTElement.cpp:
        (WebCore::nodeTypeToTagName):
        * html/track/WebVTTElement.h:
        * html/track/WebVTTToken.h:
        (WebCore::WebVTTToken::StartTag):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::clearFailedLoadURL):
        * loader/NavigationAction.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::showModalDialog):
        * page/EventHandler.cpp:
        (WebCore::eventNameForTouchPointState):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::setName):
        (WebCore::FrameTree::clearName):
        * page/Page.cpp:
        (WebCore::Page::groupName):
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::alternateFamilyName):
        * platform/graphics/FontDescription.h:
        (WebCore::FontCascadeDescription::initialLocale):
        * platform/graphics/FontGenericFamilies.cpp:
        (WebCore::genericFontFamilyForScript):
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::inBandMetadataTrackDispatchType):
        * platform/graphics/TrackPrivateBase.h:
        (WebCore::TrackPrivateBase::id):
        (WebCore::TrackPrivateBase::label):
        (WebCore::TrackPrivateBase::language):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::id):
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        (WebCore::AVTrackPrivateAVFObjCImpl::language):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::label):
        (WebCore::InbandTextTrackPrivateAVCF::language):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.cpp:
        (WebCore::InbandTextTrackPrivateLegacyAVCF::label):
        (WebCore::InbandTextTrackPrivateLegacyAVCF::language):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::label):
        (WebCore::InbandTextTrackPrivateAVFObjC::language):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label):
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::language):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::metadataType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::create):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/mediastream/AudioTrackPrivateMediaStream.h:
        * platform/mediastream/RealtimeMediaSourceSettings.cpp:
        (WebCore::RealtimeMediaSourceSettings::facingMode):
        * platform/mediastream/VideoTrackPrivateMediaStream.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::linkSuggestedFilename):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::markerText):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextAndEmphasisMarksIfNeeded):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::textEmphasisMarkString):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialHyphenationString):
        (WebCore::RenderStyle::initialTextEmphasisCustomMark):
        (WebCore::RenderStyle::initialContentAltText):
        (WebCore::RenderStyle::initialLineGrid):
        (WebCore::RenderStyle::initialFlowThread):
        (WebCore::RenderStyle::initialRegionThread):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectActiveStyleSheets):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getPresentationAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGAttributeHashTranslator::hash):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferSizeAttributesToTargetClone):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::constructAttributeName):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::requestLicense):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        * xml/XPathStep.cpp:
        (WebCore::XPath::nodeMatchesBasicTest):
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::handleNamespaceAttributes):
        (WebCore::handleElementAttributes):

2017-07-06  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary uses of targetStatistics.dataRecordsRemoved in ResourceLoadObserver
        https://bugs.webkit.org/show_bug.cgi?id=174234

        Reviewed by Brent Fulgham.

        Drop unnecessary uses of targetStatistics.dataRecordsRemoved in ResourceLoadObserver. It is
        always 0 since this member is only initialized later on, in the UIProcess.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):

2017-07-06  Yoav Weiss  <yoav@yoav.ws>

        [preload] Avoid reflecting "video" and "audio" when they are not supported `as` value
        https://bugs.webkit.org/show_bug.cgi?id=174199

        Reviewed by Youenn Fablet.

        No new tests as video/audio is supported in tests. I tested this manually.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::as): Make sure "video" and "audio" will not be reflected when they are not supported.

2017-07-06  Chris Dumez  <cdumez@apple.com>

        Drop unused ResourceLoadStatistics members
        https://bugs.webkit.org/show_bug.cgi?id=174226

        Reviewed by Brent Fulgham.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::isPrevalentResource): Deleted.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString):
        (WebCore::ResourceLoadStatistics::merge):
        * loader/ResourceLoadStatistics.h:

2017-07-06  Youenn Fablet  <youenn@apple.com>

        Rendering of WebRTC audio in AudioSampleDataSource may trigger crackles
        https://bugs.webkit.org/show_bug.cgi?id=174223

        Reviewed by Eric Carlson.

        We try reading too quickly and need to back off a little bit if we do not enough data.
        This only affects real audio and not web audio, hence validated through manual testing only.

        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pullSamplesInternal):

2017-07-06  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for WebGL code dealing with WebGL extensions
        https://bugs.webkit.org/show_bug.cgi?id=174186

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Update files. Categorize some of the remaining custom bindings into groups.

        * bindings/IDLTypes.h:
        Add a IDLWebGLExtension type, to model the special WebGLExtension type. In
        the future, WebGLExtension can probably be replaced by a Variant.
        
        * bindings/js/JSDOMConvertWebGL.cpp: Added.
        Move WebGLAny's convertToJSValue and add a convertToJSValue for WebGLExtension.

        * bindings/js/JSDOMConvertWebGL.h:
        (WebCore::convertToJSValue):
        Since WebGLExtension is a wrapper type, we need both a pointer and reference variant
        of the conversion.

        (WebCore::JSConverter<IDLWebGLExtension>::convert):
        Added.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::toJS): Deleted.
        (WebCore::JSWebGL2RenderingContext::getExtension): Deleted.
        Remove custom operation and converter.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Deleted.
        (WebCore::JSWebGLRenderingContext::getExtension): Deleted.
        Remove custom operation and converter.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Add support for IDLWebGLExtension.

        * html/canvas/WebGLAny.cpp: Removed.
        * html/canvas/WebGLAny.h:
        Moved convertToJSValue to the bindings where it belongs.

        * html/canvas/WebGLRenderingContextBase.idl:
        Annotate getExtension with [OverrideIDLType=IDLWebGLExtension].

2017-07-06  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] CTParagraphStyle leak under WebCore::LinkImageLayout::LinkImageLayout
        https://bugs.webkit.org/show_bug.cgi?id=174228

        Reviewed by Andreas Kling.

        * platform/mac/DragImageMac.mm:
        (WebCore::LinkImageLayout::LinkImageLayout):

2017-07-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Improve performance of font lookups
        https://bugs.webkit.org/show_bug.cgi?id=173960
        <rdar://problem/31996891>

        Reviewed by Darin Adler.

        Looking up kCTFontPostScriptNameAttribute is faster than kCTFontNameAttribute.

        No new tests because there is no behavior change.

        * platform/spi/cocoa/CoreTextSPI.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::fontForPostScriptName):

2017-07-06  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r216944): Font loads can cause Chinese characters to draw as .notdef
        https://bugs.webkit.org/show_bug.cgi?id=173962
        <rdar://problem/32925318>

        Reviewed by Simon Fraser.

        Previously, there was no signalling between our font loading code
        which determined whether or not a font should be invisible (because
        its in the middle of loading) and our system fallback code which
        created fonts when we fall off the end of the fallback list. Because
        of this, we were doing two things wrong:

        1. When we started downloading a font, we would try to use a fallback
        font. However, if the fallback font didn't suppor the character we're
        trying to render, we would just bail and draw .notdef
        2. Even if we continued down the fallback list, and fell of the end,
        we wouldn't realize that the system fallback font should also be drawn
        as invisible.

        This patch solves these two problems by:
        1. Performing a search to find the best (local) fallback font with
        which to fall systemFallbackFontForCharacter(). This way, if you say
        "font-family: 'RemoteFont', 'Helvetica'" we will use Helvetica as
        the lookup to ask the system to search for.
        2. Give the Font class an accessor which can create a duplicate, but
        invisible font. Give FontCascadeFonts::glyphDataForVariant() the
        correct tracking to know when to use this invisible duplicate.

        Tests: fast/text/font-loading-system-fallback.html
               http/tests/webfont/font-loading-system-fallback-visibility.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::invisibleFont):
        * platform/graphics/Font.h:
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::findBestFallbackFont):
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback):
        (WebCore::FontCascadeFonts::glyphDataForVariant):
        * platform/graphics/FontCascadeFonts.h:

2017-07-06  Chris Dumez  <cdumez@apple.com>

        FileMonitor should not be ref counted
        https://bugs.webkit.org/show_bug.cgi?id=174166

        Reviewed by Brent Fulgham.

        Update FileMonitor to no longer be refcounted. It was previously easy to leak it
        because the object would ref itself in various lambdas. The client would have to
        explicitely call FileMonitor::stopMonitoring() which was fragile.

        This patch also simplifies the code and API a bit since no longer actually
        requires startMonitoring() / stopMonitoring() API.

        No new tests, covered by API tests.

        * platform/FileMonitor.cpp:
        (WebCore::FileMonitor::FileMonitor):
        (WebCore::FileMonitor::~FileMonitor):
        (WebCore::FileMonitor::create): Deleted.
        (WebCore::FileMonitor::startMonitoring): Deleted.
        (WebCore::FileMonitor::stopMonitoring): Deleted.
        * platform/FileMonitor.h:
        * platform/cocoa/FileMonitorCocoa.mm:
        (WebCore::FileMonitor::FileMonitor):
        (WebCore::FileMonitor::~FileMonitor):
        (WebCore::FileMonitor::startMonitoring): Deleted.
        (WebCore::FileMonitor::stopMonitoring): Deleted.

2017-07-06  Matt Rajca  <mrajca@apple.com>

        Fix build with VIDEO support disabled.
        https://bugs.webkit.org/show_bug.cgi?id=174217

        Unreviewed build fix.

        * page/Page.cpp:

2017-07-06  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219193.

        The tests added with this revision were extreamly flaky on all
        platforms.

        Reverted changeset:

        "[SVG] Leak in SVGAnimatedListPropertyTearOff"
        https://bugs.webkit.org/show_bug.cgi?id=172545
        http://trac.webkit.org/changeset/219193

2017-07-06  Zalan Bujtas  <zalan@apple.com>

        Use WTFLogAlways for debug logging so that it shows up in device system logs
        https://bugs.webkit.org/show_bug.cgi?id=173450

        Reviewed by Simon Fraser.

        If you want to showRenderTree() on-device, the result doesn't show in system log so you can't see it.
        Switch to WTFLogAlways to fix this, for showRenderTree and its dependencies.
        
        * platform/text/TextStream.cpp:
        (WebCore::writeIndent):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showLineTreeAndMark):
        (WebCore::InlineBox::showLineBox):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::showLineTreeAndMark):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::showLineBox):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::showLineTreeAndMark):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::showRenderTreeLegend):
        (WebCore::RenderObject::showRenderTreeForThis):
        (WebCore::RenderObject::showLineTreeForThis):
        (WebCore::RenderObject::showRegionsInformation):
        (WebCore::RenderObject::showRenderObject):
        (WebCore::RenderObject::showRenderSubTreeAndMark):
        * rendering/RenderObject.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::printPrefix):
        (WebCore::SimpleLineLayout::showLineLayoutForFlow):
        * rendering/SimpleLineLayoutFunctions.h:

2017-07-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Unify FontCascadeFonts::glyphDataForVariant() and FontCascadeFonts::glyphDataForNormalVariant()
        https://bugs.webkit.org/show_bug.cgi?id=174213

        Reviewed by Zalan Bujtas.

        They have almost identical code. This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=173962

        No new tests because there is no behavior change.

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForVariant):
        (WebCore::FontCascadeFonts::glyphDataForCharacter):
        (WebCore::FontCascadeFonts::glyphDataForNormalVariant): Deleted.
        * platform/graphics/FontCascadeFonts.h:

2017-07-06  Don Olmstead  <don.olmstead@sony.com>

        [PAL] Move KillRing into PAL
        https://bugs.webkit.org/show_bug.cgi?id=173900

        Reviewed by Myles C. Maxfield.

        No new tests. No change in functionality.

        * Configurations/WebCore.xcconfig:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        * editing/Editor.h:
        (WebCore::Editor::killRing):
        * editing/EditorCommand.cpp:

2017-07-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: Support getting the content of WebGL/WebGL2 contexts
        https://bugs.webkit.org/show_bug.cgi?id=173569
        <rdar://problem/33112420>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/requestContent-2d.html
               inspector/canvas/requestContent-webgl.html
               inspector/canvas/requestContent-webgl2.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::clearIfComposited):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::preventBufferClearForInspector):
        (WebCore::WebGLRenderingContextBase::setPreventBufferClearForInspector):
        Add a flag that will prevent the context buffer from being cleared, allowing it to be copied
        within a toDataURL call. This is currently only used by InspectorCanvasAgent::requestContent.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestContent):
        Since toDataURL attempts to force the canvas to redraw, we can preserve the buffer after it
        finishes drawing so that it can be copied, instead of it normally being swapped out.

2017-07-06  Chris Dumez  <cdumez@apple.com>

        Move ResourceLoadObserver notification throttling logic from WebProcess class to ResourceLoadObserver
        https://bugs.webkit.org/show_bug.cgi?id=174194

        Reviewed by Brent Fulgham.

        Move ResourceLoadObserver notification throttling logic from WebProcess class to
        ResourceLoadObserver. This makes more sense and decreases the complexity of the
        WebProcess class.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setNotificationCallback):
        (WebCore::ResourceLoadObserver::ResourceLoadObserver):
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::scheduleNotificationIfNeeded):
        (WebCore::ResourceLoadObserver::notificationTimerFired):
        * loader/ResourceLoadObserver.h:

2017-07-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r208511): RenderImageResourceStyleImage should not assume image() won't return null if its m_cachedImage is valid
        https://bugs.webkit.org/show_bug.cgi?id=174168

        Reviewed by Simon Fraser.

        RenderImageResourceStyleImage::image() may return a null pointer even if
        its m_cachedImage is not null. The revision r208511, changed the function
        RenderImageResourceStyleImage::shutdown() so it calls Image::stopAnimation().
        But this change assumes that if m_cachedImage is not null then image() will
        return a valid pointer. This is not true because StyleCachedImage::isPending()
        can return true and hence, RenderImageResourceStyleImage::image() will return
        a null pointer.

        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::image): Like what RenderImageResource
        does, return Image::nullImage() if m_styleImage->isPending().

2017-07-06  Commit Queue  <commit-queue@webkit.org>

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

        "Causes crashes on Release builds and API tests" (Requested by
        ddkilzer on #webkit).

        Reverted changeset:

        "Add release assert to explore crash for
        <rdar://problem/32908525>"
        http://trac.webkit.org/changeset/219201

2017-07-06  Commit Queue  <commit-queue@webkit.org>

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

        it broke some layout tests (Requested by clopez on #webkit).

        Reverted changeset:

        "[GStreamer] vid.me videos do not play"
        https://bugs.webkit.org/show_bug.cgi?id=172240
        http://trac.webkit.org/changeset/219194

2017-07-06  David Kilzer  <ddkilzer@apple.com>

        Add release assert to explore crash for <rdar://problem/32908525>

        Reviewed by Brady Eidson.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::~UniqueIDBDatabase): Add
        release assert to catch cases when the IDBBackingStore is not
        deleted before the UniqueIDBDatabase is destroyed.  The
        IDBBackingStore should always be released on the database
        thread.

2017-07-06  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219178.

        This caused a consistent failure with the API test
        StringBuilderTest.ToAtomicStringOnEmpty on all Debug testers.

        Reverted changeset:

        "[WTF] Clean up StringStatics.cpp by using
        LazyNeverDestroyed<> for Atoms"
        https://bugs.webkit.org/show_bug.cgi?id=174150
        http://trac.webkit.org/changeset/219178

2017-07-06  Charlie Turner  <cturner@igalia.com>

        [GStreamer] vid.me videos do not play
        https://bugs.webkit.org/show_bug.cgi?id=172240

        Reviewed by Xabier Rodriguez-Calvar.

        In r142251, code to hide the WK HTTP source elements from elsewhere in
        the pipeline was removed. This has the nasty side-effect of
        auto-plugging the WK HTTP source into things it really should not be
        used in, especially the adaptive streaming demuxers. The reasons this
        is bad are documented in several places on Bugzilla, see the parent
        bug report for more details. The high-level issue is that the WK HTTP
        source and its use of WebCore is not thread-safe. Although work has
        been recently done to improve this situation, it's still not perfect.

        Another issue is the interface hlsdemux expects its HTTP source to
        implement, specifically seeking in READY.

        This does rely on HTTP context sharing being available in GStreamer,
        upstream bug is here:
        https://bugzilla.gnome.org/show_bug.cgi?id=761099. The failing case
        can be demonstrated with
        https://github.com/thiagoss/adaptive-test-server but manual testing on
        popular video hosting sites, including vid.me, shows that this doesn't
        bite us at the moment, just something else to fix in the future.

        There are some QoS issues with the adaptive streaming code in
        GStreamer, but it seems much better to offer a below par QoS in lieu
        of crashing/livelocking when playing certain streams, and issues can be
        raised upstream when they arise.

        This patch does take us further away from the future goal of having all
        networking operations go through the network process, but in return it
        solves some nasty crashes and livelocks that have been irritating
        users for some time. With the pressure off on this issue, work can be
        planned to consider how to make the WK HTTP source a better citizen
        inside the GStreamer pipeline when we migrate the netcode to go
        through the network process.

        A new test is added to check that the single file HLS playlists
        (new in version 4) can be played, which was the primary cause of
        this bug report.

        Test: http/tests/media/hls/range-request.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setPlaybinURL): Perform
        some trickery to make sure that we only ever fetch URLs handed to
        us by WebCore. Any further URLs discovered inside the pipeline
        will not get WKWS auto-plugged, since they'll be plain https?
        schemas.
        (WebCore::MediaPlayerPrivateGStreamer::load): Refactor to use the
        setPlaybinURL helper method.
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add
        the setPlaybinURL helper method.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProtocols): Only advertise webkit+https?, this
        ensures we won't get auto-plugged by pipeline elements asking for
        an element to fetch https? resources (like adaptive demuxers).
        (convertPlaybinURI): Undo the trick when another element asks us
        for our URI.

2017-05-24  Sergio Villar Senin  <svillar@igalia.com>

        [SVG] Leak in SVGAnimatedListPropertyTearOff
        https://bugs.webkit.org/show_bug.cgi?id=172545

        Reviewed by Said Abou-Hallawa.

        SVGAnimatedListPropertyTearOff maintains a vector m_wrappers with references to
        SVGPropertyTraits<PropertyType>::ListItemTearOff. Apart from that SVGPropertyTearOff has a
        reference to SVGAnimatedProperty.

        When SVGListProperty::getItemValuesAndWrappers() is called, it creates a
        SVGPropertyTraits<PropertyType>::ListItemTearOff pointing to the same SVGAnimatedProperty (a
        SVGAnimatedListPropertyTearOff) which stores the m_wrappers vector where the ListItemTearOff
        is going to be added to. This effectively creates a reference cycle between the
        SVGAnimatedListPropertyTearOff and all the ListItemTearOff it stores in m_wrappers.

        We should detach those wrappers in propertyWillBeDeleted() in order to break the cycle.

        * svg/properties/SVGAnimatedListPropertyTearOff.h:

2017-07-05  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move SoftLinking.h into WTF
        https://bugs.webkit.org/show_bug.cgi?id=174000

        Reviewed by Alex Christensen.

        No new tests. No change in functionality

        * Modules/applepay/PaymentRequest.cpp:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        * Modules/applepay/cocoa/PaymentMerchantSessionCocoa.mm:
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/EditorCocoa.mm:
        * editing/cocoa/HTMLConverter.mm:
        * editing/ios/EditorIOS.mm:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/cocoa/SettingsCocoa.mm:
        * page/ios/UserAgentIOS.mm:
        * page/mac/ServicesOverlayController.mm:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/audio/ios/AudioFileReaderIOS.cpp:
        * platform/audio/ios/AudioSessionIOS.mm:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/cf/MediaAccessibilitySoftLink.cpp:
        * platform/cf/MediaAccessibilitySoftLink.h:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/cocoa/DataDetectorsCoreSoftLink.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        * platform/cocoa/ParentalControlsContentFilter.mm:
        * platform/cocoa/TelephoneNumberDetectorCocoa.cpp:
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        * platform/cocoa/WebVideoFullscreenModelVideoElement.mm:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        * platform/graphics/avfoundation/cf/AVFoundationCFSoftLinking.h:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.cpp:
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        * platform/graphics/ios/FontCacheIOS.mm:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/mac/MediaTimeQTKit.mm:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        * platform/ios/DragImageIOS.mm:
        * platform/ios/PlatformPasteboardIOS.mm:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        * platform/ios/QuickLookSoftLink.h:
        * platform/ios/QuickLookSoftLink.mm:
        * platform/ios/RemoteCommandListenerIOS.mm:
        * platform/ios/ThemeIOS.mm:
        * platform/ios/ValidationBubbleIOS.mm:
        * platform/ios/WebCoreMotionManager.mm:
        * platform/ios/WebItemProviderPasteboard.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        * platform/mac/DragImageMac.mm:
        * platform/mac/MediaRemoteSoftLink.cpp:
        * platform/mac/MediaRemoteSoftLink.h:
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        * platform/mac/WebPlaybackControlsManager.mm:
        * platform/mac/WebVideoFullscreenController.mm:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.mm:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/ios/NetworkStateNotifierIOS.mm:
        * platform/network/ios/PreviewConverter.mm:
        * platform/network/mac/BlobDataFileReferenceMac.mm:
        * platform/spi/cocoa/AVKitSPI.h:
        (-[AVTouchBarPlaybackControlsControlling NS_ENUM]): Deleted.
        * platform/spi/cocoa/NSAttributedStringSPI.h:
        * platform/spi/ios/DataDetectorsUISPI.h:
        * platform/spi/mac/AVFoundationSPI.h:
        * platform/spi/mac/DataDetectorsSPI.h:
        * platform/spi/mac/LookupSPI.h:
        * platform/spi/mac/TUCallSPI.h:
        * platform/win/ScrollbarThemeWin.cpp:
        * rendering/RenderThemeCocoa.mm:
        * rendering/RenderThemeIOS.mm:
        * rendering/RenderThemeWin.cpp:
        * testing/Internals.mm:
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTExtensions.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/XSLTUnicodeSort.cpp:

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

        REGRESSION: Stack overflow in RenderBlockFlow::layoutBlock after increasing the font size to max in some RTL vertical books.
        https://bugs.webkit.org/show_bug.cgi?id=174144
        <rdar://problem/32781038>

        Reviewed by Simon Fraser.

        We set the start/end margin on the ruby renderer to support overhanging content. The margins ensure that
        adjacent boxes on the line are placed properly respecting the overhanging content.
        The line breaking algorithm also takes this value into account as it affects the line's available width.
        We need to reset this value before laying out the lines, otherwise we might end up using this value on the line twice;
        first as the renderer's margins (as the result of the previous layout) and second as the renderer's overhanging value.
        Since this is not strictly part of the renderer's layout context (i.e. we set them during the line layout and not at
        RenderRubyRun::layout) we can't rely on the ruby's layout logic to reset them.

        Test: fast/ruby/ruby-overhang-margin-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutLineBoxes):

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Upgrade GCC baseline
        https://bugs.webkit.org/show_bug.cgi?id=174155

        Reviewed by Michael Catanzaro.

        Remove workaround for old GCC.

        * CMakeLists.txt:

2017-07-05  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix iOS build after r219177.

        * page/ios/UserAgentIOS.mm:
        * platform/spi/ios/UIKitSPI.h:

2017-07-05  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix iOS build after r219177.

        * page/ios/UserAgentIOS.mm:
        * platform/spi/ios/UIKitSPI.h:

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use std::lock_guard instead of std::unique_lock if move semantics and try_lock is not necessary
        https://bugs.webkit.org/show_bug.cgi?id=174148

        Reviewed by Mark Lam.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::~AudioSourceProviderAVFObjC):

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Clean up StringStatics.cpp by using LazyNeverDestroyed<> for Atoms
        https://bugs.webkit.org/show_bug.cgi?id=174150

        Reviewed by Mark Lam.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::captionDisplayMode):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::binaryType):
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::language):
        (WebCore::AccessibilityObject::defaultLiveRegionStatusForRole):
        (WebCore::AccessibilityObject::actionVerb):
        (WebCore::AccessibilityObject::getAttribute):
        (WebCore::AccessibilityObject::placeholderValue):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessKey):
        (WebCore::AccessibilityObject::ariaLiveRegionRelevant):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessKey):
        (WebCore::AccessibilityRenderObject::actionVerb):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::constructElementWithFallback):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsEmptyStringBody):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::selectorText):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::valueName):
        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorSpecificityInternal):
        (WebCore::CSSSelector::specificityForPage):
        (WebCore::CSSSelector::RareData::RareData):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::argument):
        * css/CSSSelectorList.cpp:
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        * css/PageRuleCollector.cpp:
        (WebCore::checkPageSelectorComponents):
        * css/RuleSet.cpp:
        (WebCore::computeMatchBasedOnRuleHash):
        (WebCore::RuleSet::addRule):
        * css/SelectorChecker.cpp:
        (WebCore::tagMatches):
        * css/SelectorFilter.cpp:
        (WebCore::collectDescendantSelectorIdentifierHashes):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertStringOrAuto):
        (WebCore::StyleBuilderConverter::convertStringOrNone):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLocale):
        (WebCore::StyleBuilderCustom::applyValueWebkitTextEmphasisStyle):
        (WebCore::StyleBuilderCustom::applyValueContent):
        (WebCore::StyleBuilderCustom::applyValueAlt):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::StyleSheetContents):
        (WebCore::StyleSheetContents::namespaceURIFromPrefix):
        * css/makeprop.pl:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeCompoundSelector):
        (WebCore::CSSSelectorParser::consumeName):
        (WebCore::CSSSelectorParser::consumeAttribute):
        (WebCore::CSSSelectorParser::defaultNamespace):
        (WebCore::CSSSelectorParser::determineNamespace):
        (WebCore::CSSSelectorParser::prependTypeSelectorIfNeeded):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::attributeNameTestingRequiresNamespaceRegister):
        (WebCore::SelectorCompiler::equalTagNames):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        * dom/Attr.cpp:
        (WebCore::Attr::setPrefix):
        (WebCore::Attr::attachToElement):
        * dom/Attribute.h:
        (WebCore::Attribute::nameMatchesFilter):
        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::nameForProperty):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByTagNameNS):
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueuePostUpgradeReactions):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::convertPropertyNameToAttributeName):
        * dom/Document.cpp:
        (WebCore::createUpgradeCandidateElement):
        (WebCore::Document::createElementForBindings):
        (WebCore::Document::importNode):
        (WebCore::Document::hasValidNamespaceForElements):
        (WebCore::Document::processBaseElement):
        (WebCore::Document::dir):
        (WebCore::Document::bgColor):
        (WebCore::Document::fgColor):
        (WebCore::Document::alinkColor):
        (WebCore::Document::linkColorForBindings):
        (WebCore::Document::vlinkColor):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::setBooleanAttribute):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::getAttribute):
        (WebCore::Element::getAttributeNS):
        (WebCore::Element::setAttribute):
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::didMoveToNewDocument):
        (WebCore::Element::setPrefix):
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::addAttributeInternal):
        (WebCore::Element::removeAttributeNS):
        (WebCore::Element::getAttributeNodeNS):
        (WebCore::Element::hasAttributeNS):
        (WebCore::Element::computeInheritedLanguage):
        (WebCore::Element::updateNameForDocument):
        (WebCore::Element::updateIdForDocument):
        (WebCore::Element::didAddAttribute):
        (WebCore::Element::didRemoveAttribute):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        (WebCore::Element::attributeWithoutSynchronization):
        (WebCore::Element::idForStyleResolution):
        (WebCore::Element::getIdAttribute):
        (WebCore::Element::getNameAttribute):
        * dom/EventTarget.cpp:
        (WebCore::legacyType):
        * dom/MutationRecord.h:
        (WebCore::MutationRecord::attributeName):
        (WebCore::MutationRecord::attributeNamespace):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::removeNamedItemNS):
        * dom/Node.cpp:
        (WebCore::Node::prefix):
        (WebCore::Node::localName):
        (WebCore::Node::namespaceURI):
        (WebCore::Node::checkSetPrefix):
        (WebCore::locateDefaultNamespace):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::locateNamespacePrefix):
        (WebCore::Node::lookupPrefix):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCachedTagCollectionNS):
        (WebCore::NodeListsNodeData::addCachedCollection):
        (WebCore::NodeListsNodeData::cachedCollection):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCachedTagCollectionNS):
        (WebCore::NodeListsNodeData::removeCachedCollection):
        * dom/PseudoElement.cpp:
        (WebCore::pseudoElementTagName):
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init):
        (WebCore::nullQName):
        (WebCore::createQualifiedName):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::hasPrefix):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeSingleTagNameSelectorData):
        * dom/SlotAssignment.cpp:
        (WebCore::slotNameFromAttributeValue):
        * dom/SlotAssignment.h:
        (WebCore::SlotAssignment::defaultSlotName):
        (WebCore::ShadowRoot::didRemoveAllChildrenOfShadowHost):
        (WebCore::ShadowRoot::didChangeDefaultSlot):
        * dom/TagCollection.cpp:
        (WebCore::TagCollection::TagCollection):
        (WebCore::HTMLTagCollection::HTMLTagCollection):
        * dom/TagCollection.h:
        (WebCore::TagCollectionNS::elementMatches):
        * dom/make_names.pl:
        (printNamesCppFile):
        (printDefinitions):
        (printFactoryCppFile):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeNodeAttribute):
        * editing/Editing.cpp:
        (WebCore::createHTMLElement):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        (WebCore::MarkupAccumulator::shouldAddNamespaceElement):
        (WebCore::MarkupAccumulator::shouldAddNamespaceAttribute):
        (WebCore::MarkupAccumulator::appendNamespace):
        (WebCore::MarkupAccumulator::appendOpenTag):
        (WebCore::MarkupAccumulator::appendAttribute):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::elementURL):
        * editing/markup.cpp:
        (WebCore::AttributeChange::AttributeChange):
        * html/Autocapitalize.cpp:
        (WebCore::stringForAutocapitalizeType):
        * html/Autofill.cpp:
        (WebCore::AutofillData::createFromHTMLFormControlElement):
        * html/DOMTokenList.h:
        (WebCore::DOMTokenList::item):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::name):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::formControlType):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::toggleOpen):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::isCaseSensitiveAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::eventNameForEventHandlerAttribute):
        (WebCore::toValidDirValue):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::name):
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::doesHaveAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::createForJSConstructor):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::name):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setMultiple):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::scope):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::mediaElementCrossOriginAttribute):
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::~LabelsNodeList):
        * html/MediaController.cpp:
        (MediaController::playbackState):
        (eventNameForReadyState):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::initializeAttributes):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        (WebCore::parseHTMLHashNameReference):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::createForeignAttributesMap):
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::id):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::captionMenuOffItem):
        (WebCore::TextTrack::captionMenuAutomaticItem):
        * html/track/TrackBase.cpp:
        (WebCore::MediaTrackBase::setKindInternal):
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::scroll):
        * html/track/WebVTTElement.cpp:
        (WebCore::nodeTypeToTagName):
        * html/track/WebVTTElement.h:
        * html/track/WebVTTToken.h:
        (WebCore::WebVTTToken::StartTag):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::clearFailedLoadURL):
        * loader/NavigationAction.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::showModalDialog):
        * page/EventHandler.cpp:
        (WebCore::eventNameForTouchPointState):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::setName):
        (WebCore::FrameTree::clearName):
        * page/Page.cpp:
        (WebCore::Page::groupName):
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::alternateFamilyName):
        * platform/graphics/FontDescription.h:
        (WebCore::FontCascadeDescription::initialLocale):
        * platform/graphics/FontGenericFamilies.cpp:
        (WebCore::genericFontFamilyForScript):
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::inBandMetadataTrackDispatchType):
        * platform/graphics/TrackPrivateBase.h:
        (WebCore::TrackPrivateBase::id):
        (WebCore::TrackPrivateBase::label):
        (WebCore::TrackPrivateBase::language):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::id):
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        (WebCore::AVTrackPrivateAVFObjCImpl::language):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::label):
        (WebCore::InbandTextTrackPrivateAVCF::language):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.cpp:
        (WebCore::InbandTextTrackPrivateLegacyAVCF::label):
        (WebCore::InbandTextTrackPrivateLegacyAVCF::language):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::label):
        (WebCore::InbandTextTrackPrivateAVFObjC::language):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label):
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::language):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::metadataType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::create):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/mediastream/AudioTrackPrivateMediaStream.h:
        * platform/mediastream/RealtimeMediaSourceSettings.cpp:
        (WebCore::RealtimeMediaSourceSettings::facingMode):
        * platform/mediastream/VideoTrackPrivateMediaStream.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::linkSuggestedFilename):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::markerText):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::nextOffset):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextAndEmphasisMarksIfNeeded):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::textEmphasisMarkString):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialHyphenationString):
        (WebCore::RenderStyle::initialTextEmphasisCustomMark):
        (WebCore::RenderStyle::initialContentAltText):
        (WebCore::RenderStyle::initialLineGrid):
        (WebCore::RenderStyle::initialFlowThread):
        (WebCore::RenderStyle::initialRegionThread):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectActiveStyleSheets):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getPresentationAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGAttributeHashTranslator::hash):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferSizeAttributesToTargetClone):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::constructAttributeName):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::requestLicense):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        * xml/XPathStep.cpp:
        (WebCore::XPath::nodeMatchesBasicTest):
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::handleNamespaceAttributes):
        (WebCore::handleElementAttributes):

2017-07-05  Chris Dumez  <cdumez@apple.com>

        [iOS] User agent string incorrectly says "iPhone" instead of "iPad" on newer iPads
        https://bugs.webkit.org/show_bug.cgi?id=174182
        <rdar://problem/32868369>

        Reviewed by Tim Horton.

        In deviceNameForUserAgent() on iOS, we were forcefully returning "iPhone" if
        [UIApplication _isClassic] returns true. Update check to return "iPad" if
        [UIApplication _isClassic] returns true but [UIApplication _classMode] returns
        UIApplicationSceneClassicModeOriginalPad.

        * page/ios/UserAgentIOS.mm:
        (WebCore::isClassicPad):
        (WebCore::isClassicPhone):
        (WebCore::osNameForUserAgent):
        (WebCore::deviceNameForUserAgent):
        * platform/spi/ios/UIKitSPI.h:

2017-07-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF::Thread should have the threads stack bounds.
        https://bugs.webkit.org/show_bug.cgi?id=173975

        Reviewed by Keith Miller.

        When creating WebThread, we first allocate WebCore::ThreadGlobalData in UI thread
        and share it with WebThread.
        The problem is that WebCore::ThreadGlobalData has CachedResourceRequestInitiators.
        It allocates AtomicString, which requires WTFThreadData.

        Before this patch, it was OK because WTFThreadData does not touch threading related
        things except for ThreadSpecific<>. However, after this patch, it touches
        WTF::Thread::current() which requires WTF::initializeThreading().

        In this patch, we call WTF::initializeThreading() before allocating WebCore::ThreadGlobalData.
        And we also call AtomicString::init() before calling WebCore::ThreadGlobalData since
        WebCore::ThreadGlobalData allocates AtomicString.

        This fixes crashes in the iOS web threading environment (UIWebView).

        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread):

2017-07-05  Myles C. Maxfield  <mmaxfield@apple.com>

        CSSFontStyleValue::isItalic seems a bit bogus.
        https://bugs.webkit.org/show_bug.cgi?id=174149

        Reviewed by Tim Horton.

        Simple typo.

        Test: editing/execCommand/italicizeByCharacter-normal.html

        * css/CSSFontStyleValue.h:

2017-07-05  Brady Eidson  <beidson@apple.com>

        Allow navigations in subframes to get a ShouldOpenExternalURLsPolicy of "ShouldAllow".
        <rdar://problem/22485589> and https://bugs.webkit.org/show_bug.cgi?id=174178

        Reviewed by Alex Christensen.

        Test: loader/navigation-policy/should-open-external-urls/subframe-navigated-programatically-by-main-frame.html

        This patch introduces a new flag to FrameLoadRequest to track when it is known with certainty that a 
        FrameLoadRequest originates from the main frame.
        
        Later, when calculating the final ShouldOpenExternalURLsPolicy, main frames navigating iframes get to propagate
        their permissions to the iframe.
        
        * bindings/js/CommonVM.cpp:
        (WebCore::lexicalFrameFromCommonVM): Helper to grab the current frame associated with the current JS callstack.
        * bindings/js/CommonVM.h:

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):

        Add the new flag to FrameLoadRequest (and force almost everybody to explicitly include the flag):
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::navigationInitiatedByMainFrame):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::shouldOpenExternalURLsPolicyToApply): Helper that takes the new flag into account when deciding
          what the final ShouldOpenExternalURLsPolicy will be.
        (WebCore::applyShouldOpenExternalURLsPolicyToNewDocumentLoader):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::createWindow):
        (WebCore::FrameLoader::applyShouldOpenExternalURLsPolicyToNewDocumentLoader): Deleted.
        * loader/FrameLoader.h:

        * loader/FrameLoaderTypes.h:

        * loader/NavigationAction.h:
        (WebCore::NavigationAction::navigationInitiatedByMainFrame):
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::ScheduledNavigation): Grab the "initiating frame" at the time the 
          ScheduledNavigation is created, as it dictates the policy we decide later.
        (WebCore::ScheduledNavigation::navigationInitiatedByMainFrame):
        (WebCore::NavigationScheduler::scheduleLocationChange):

        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):

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

2017-07-05  Simon Fraser  <simon.fraser@apple.com>

        Another build fix, for Mac.

        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::surfaceID):

2017-07-05  Simon Fraser  <simon.fraser@apple.com>

        Further attempts to fix the iOS public SDK build.

        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::surfaceID):
        * platform/spi/cocoa/IOSurfaceSPI.h:

2017-07-05  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Consolidate CMake code related to CURL
        https://bugs.webkit.org/show_bug.cgi?id=170860

        Reviewed by Alex Christensen.

        No new tests. No change in functionality.

        * PlatformWinCairo.cmake:
        * platform/Curl.cmake: Added.

2017-07-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove copy of ICU headers from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116407

        Reviewed by Alex Christensen.

        Use WTF's copy of ICU headers.

        No new tests because there is no behavior change.

        * Configurations/WebCore.xcconfig:
        * icu/unicode/bytestream.h: Removed.
        * icu/unicode/localpointer.h: Removed.
        * icu/unicode/parseerr.h: Removed.
        * icu/unicode/platform.h: Removed.
        * icu/unicode/ptypes.h: Removed.
        * icu/unicode/putil.h: Removed.
        * icu/unicode/rep.h: Removed.
        * icu/unicode/std_string.h: Removed.
        * icu/unicode/strenum.h: Removed.
        * icu/unicode/stringpiece.h: Removed.
        * icu/unicode/ubrk.h: Removed.
        * icu/unicode/uchar.h: Removed.
        * icu/unicode/ucnv.h: Removed.
        * icu/unicode/ucnv_err.h: Removed.
        * icu/unicode/ucol.h: Removed.
        * icu/unicode/uconfig.h: Removed.
        * icu/unicode/ucurr.h: Removed.
        * icu/unicode/uenum.h: Removed.
        * icu/unicode/uiter.h: Removed.
        * icu/unicode/uloc.h: Removed.
        * icu/unicode/umachine.h: Removed.
        * icu/unicode/unistr.h: Removed.
        * icu/unicode/unorm.h: Removed.
        * icu/unicode/unorm2.h: Removed.
        * icu/unicode/uobject.h: Removed.
        * icu/unicode/urename.h: Removed.
        * icu/unicode/uscript.h: Removed.
        * icu/unicode/uset.h: Removed.
        * icu/unicode/ustring.h: Removed.
        * icu/unicode/utext.h: Removed.
        * icu/unicode/utf.h: Removed.
        * icu/unicode/utf16.h: Removed.
        * icu/unicode/utf8.h: Removed.
        * icu/unicode/utf_old.h: Removed.
        * icu/unicode/utypes.h: Removed.
        * icu/unicode/uvernum.h: Removed.
        * icu/unicode/uversion.h: Removed.
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagsKey):

2017-07-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        When dragging a selection, clearing the selection in dragstart should not crash the web process
        https://bugs.webkit.org/show_bug.cgi?id=174142
        <rdar://problem/33067501>

        Reviewed by Tim Horton.

        Currenly, if the page clears the current selection after dragging starts on selected content, the web process
        will crash while attempting to write pasteboard data for a nonexistent selection. This patch adds a trivial
        check for this case, bailing if no DHTML dragging data was specified by the page during a selection drag and the
        selection has been cleared.

        Also removes some unused code for estimating the bounds of the current selection. On iOS, dragging was actually
        crashing earlier, in this codepath. However, this information isn't even used anymore, since the drag anchor
        point is no longer necessary on iOS.

        Test: DataInteractionTests.DoNotCrashWhenSelectionIsClearedInDragStart

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2017-07-05  Simon Fraser  <simon.fraser@apple.com>

        Try to fix iOS 10.3 public SDK builds.

        * platform/spi/cocoa/IOSurfaceSPI.h:

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

        REGRESSION (r217522): "Show My Relationship" link in familysearch.org does not work.
        https://bugs.webkit.org/show_bug.cgi?id=174070
        <rdar://problem/32940653>

        Reviewed by Simon Fraser.

        Decouple in- and out-of-flow computed position values. Now we match blink's implementation on
        in-flow values.
        This also fixes the flickering content while scrolling on hbr.org.  

        Covered by existing test cases.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue):

2017-07-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: Allow users to log any tracked canvas context
        https://bugs.webkit.org/show_bug.cgi?id=173397
        <rdar://problem/33111581>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/resolveCanvasContext-2d.html
               inspector/canvas/resolveCanvasContext-webgl.html
               inspector/canvas/resolveCanvasContext-webgl2.html
               inspector/canvas/resolveCanvasContext-webgpu.html

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::contextAsScriptValue):
        (WebCore::InspectorCanvasAgent::resolveCanvasContext):

2017-07-05  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Style sharing check for fullscreen element seems bogus.
        https://bugs.webkit.org/show_bug.cgi?id=160196

        Reviewed by Antti Koivisto.

        No new tests (no easy way to test this reliably).

        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::canShareStyleWithElement):

2017-07-05  Simon Fraser  <simon.fraser@apple.com>

        Add a logging channel for IOSurface allocations
        https://bugs.webkit.org/show_bug.cgi?id=174167

        Reviewed by Tim Horton.

        Add an "IOSurface" log channel, make IOSurface TextStream-loggable, and log cached
        and new IOSurface allocations. Do some namespace-related cleanup.

        * platform/Logging.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::WebCore::IOSurface::create):
        (WebCore::WebCore::IOSurface::surfaceID):
        (WebCore::operator<<):

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

        Low memory notification shouldn't cause style recalc
        https://bugs.webkit.org/show_bug.cgi?id=173574
        <rdar://problem/32616997>

        Reviewed by Andreas Kling.

        Patch mostly by Myles.

        When we receive a low memory warning, we clear the style resolver. Previously, we were using
        this as an opportunity to also purge the CSSFontSelector. However, purging the font selector
        is wasteful, since the exact same set of CSSFontFace objects will be recreated as soon as the
        CSSFontSelector is recreated. It's also harmful because this purge operation causes fonts to
        be removed from the document's working set, and therefore triggers a relayout. Instead, this
        call should be softened to only delete any transitory caches the CSSFontSelector owns.

        We can simply delay the rebuild of the CSSFontSelector to
        StyleResolver::appendAuthorStyleSheets(), when it's really needed. This way, we can sidestep
        this whole problem.

        There's also an added benefit: Now, buildStarted() doesn't have to be idempotent, so we can
        enforce a stricter calling sequence with ASSERT()s.

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::emptyCaches):
        * css/CSSFontFaceSet.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::emptyCaches):

            Add a separate function to clear font selector caches.

        (WebCore::CSSFontSelector::buildStarted):
        (WebCore::CSSFontSelector::buildCompleted):
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::fontModified):

            No need to invalidate while building.

        (WebCore::CSSFontSelector::fontRangesForFamily):
        * css/CSSFontSelector.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::addCurrentSVGFontFaceRules):

            Factor into a function from the constructor.

        (WebCore::StyleResolver::appendAuthorStyleSheets):

            Font selector build is now started and finished by StyleScope.

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

            Call FrameView::styleDidChange() to update any custom scrollbars.
            This bug was hidden by spurious style recalcs, tested by fast/css/scrollbar-dynamic-style-change.html

        (WebCore::Document::userAgentShadowTreeStyleResolver):
        (WebCore::Document::didClearStyleResolver):

            Don't start the font selector rebuild after clearing the resolver. It would cause style recalc trashing.
            Instead the build starts when the new resolver is constructed.

        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):

            Release font selector caches.

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):

2017-07-05  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Prevent ResourceLoadStatistics from triggering a cascade of read/write events
        https://bugs.webkit.org/show_bug.cgi?id=174062\
        <rdar://problem/33086744>

        Reviewed by Chris Dumez.

        Treat DISPATCH_VNODE_DELETE, DISPATCH_VNODE_RENAME, and DISPATCH_VNODE_REVOKE as equivalent
        "file is unavailable" events, and act as though the file was deleted. Don't listen for
        DISPATCH_VNODE_EXTEND, since we always get a DISPATCH_VNODE_WRITE as well, and we only
        want to read once.

        Finally, add some logging to support future investigations.

        * platform/FileMonitor.h:
        (WebCore::FileMonitor::platformMonitor): Expose dispatch_source_t for logging purposes.
        * platform/cocoa/FileMonitorCocoa.mm:
        (WebCore::FileMonitor::startMonitoring): Add logging.
        (WebCore::FileMonitor::stopMonitoring): Ditto.

2017-07-05  Jonathan Bedard  <jbedard@apple.com>

        Add WebKitPrivateFrameworkStubs for iOS 11
        https://bugs.webkit.org/show_bug.cgi?id=173988

        Reviewed by David Kilzer.

        * Configurations/WebCore.xcconfig: iphoneos and iphonesimulator should use the
        same directory for private framework stubs.

2017-07-05  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Don't resolve an extra computed style for getComputedStyle in a display: none subtree.
        https://bugs.webkit.org/show_bug.cgi?id=174145

        Before this, we were also resolving the first ancestor's style as
        inheriting from itself, which felt pretty wrong (though I think it's
        not observable).

        Reviewed by Antti Koivisto.

        No new tests (non-observable behavior).

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

2017-07-05  Frederic Wang  <fwang@igalia.com>

        Move ScrolledContentsLayer property to ScrollingStateScrollingNode
        https://bugs.webkit.org/show_bug.cgi?id=174134

        Reviewed by Simon Fraser.

        ScrollingStateFrameScrollingNode and ScrollingStateOverflowScrollingNode both use a
        ScrolledContentsLayer property for the same purpose. This commit moves that property into
        their parent class ScrollingStateScrollingNode, so that more code is shared between the two
        classes. This will also help the refactoring in bug 174130.

        No new tests, only dumped tree may change a bit.

        * page/scrolling/ScrollingStateFrameScrollingNode.cpp: Remove scrolled contents layer.
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
        (WebCore::ScrollingStateFrameScrollingNode::setScrolledContentsLayer): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.h: Ditto.
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp: Ditto.
        (WebCore::ScrollingStateOverflowScrollingNode::ScrollingStateOverflowScrollingNode):
        (WebCore::ScrollingStateOverflowScrollingNode::dumpProperties):
        (WebCore::ScrollingStateOverflowScrollingNode::setScrolledContentsLayer): Deleted.
        * page/scrolling/ScrollingStateOverflowScrollingNode.h: Ditto.
        (): Deleted.
        (WebCore::ScrollingStateOverflowScrollingNode::scrolledContentsLayer): Deleted.
        * page/scrolling/ScrollingStateScrollingNode.cpp: Add scrolled contents layer.
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrolledContentsLayer):
        (WebCore::ScrollingStateScrollingNode::dumpProperties): Use the label from the overflow class
        which is different from the frame class. The dumping order may change a bit too.
        * page/scrolling/ScrollingStateScrollingNode.h: Add ScrolledContentsLayer to the enum and
        scrolled contents layer.
        (WebCore::ScrollingStateScrollingNode::scrolledContentsLayer):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren): Adjust enum value
        to use ScrollingStateScrollingNode::ScrolledContentsLayer.

2017-07-05  Emilio Cobos Álvarez  <ecobos@igalia.com>

        ProcessingInstruction::clearExistingCachedSheet doesn't really exist.
        https://bugs.webkit.org/show_bug.cgi?id=174146

        Reviewed by Chris Dumez.

        No new tests (no functionality change).

        * dom/ProcessingInstruction.h: Remove dead declaration.

2017-07-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219128.

        Spoke with engineer who originally submitted, Patch for APi
        test to follow.

        Reverted changeset:

        "Unreviewed, rolling out r219070."
        https://bugs.webkit.org/show_bug.cgi?id=174082
        http://trac.webkit.org/changeset/219128

2017-07-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219070.

        This revision caused consistent failures of the API test
        UIPasteboardTests.DoNotPastePlainTextAsURL on iOS.

        Reverted changeset:

        "Pasting single words copied to UIPasteboard inserts URLs in
        editable areas"
        https://bugs.webkit.org/show_bug.cgi?id=174082
        http://trac.webkit.org/changeset/219070

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

        Receiving tracks should be ended when peer connection is being closed
        https://bugs.webkit.org/show_bug.cgi?id=174109

        Reviewed by Eric Carlson.

        Test: webrtc/peer-connection-track-end.html

        As per https://www.w3.org/TR/webrtc/#dom-rtcpeerconnection-close, tracks should be ended when peer connection is closed.
        Also updating transceiver stopped state.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::doClose):
        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::stop):
        * Modules/mediastream/RTCRtpReceiver.h:

2017-07-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed, review follow-up after r218961

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateFromSettings):

2017-07-04  Antti Koivisto  <antti@apple.com>

        RenderThemeCocoa::mediaControlsFormattedStringForDuration is leaking NSDateComponentsFormatters
        https://bugs.webkit.org/show_bug.cgi?id=174138

        Reviewed by Ryosuke Niwa.

        Saw a random spin here during media playback. Looks like we are leaking.

        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::mediaControlsFormattedStringForDuration):

            Reuse NSDateComponentsFormatter.

2017-07-04  Antti Koivisto  <antti@apple.com>

        FrameView should not set RenderView::logicalWidth directly for printing
        https://bugs.webkit.org/show_bug.cgi?id=174135

        Reviewed by Zalan Bujtas.

        Renderer logicalWidth should be set by layout. Direct override by RenderView when printing means
        that we don't layout children in all cases when the width changes. This is currently mostly hidden
        by spurious layouts but causes problems when trying to fix other things that reduces those.

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):

            Instead of calling setLogicalWidth directly call the new setPageLogicalSize that sets both the width
            and the height uniformly.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateLogicalWidth):

            Use pageLogicalSize->width() in printing state instead of skipping the logical width update entirely.
            This ensures that the layout will progress to children when the page logical width changes.

        (WebCore::RenderView::initializeLayoutState):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::pageOrViewLogicalHeight):
        (WebCore::RenderView::setPageLogicalSize):
        * rendering/RenderView.h:

            Replace the existing m_pageLogicalHeight with std::optional m_pageLogicalSize.

2017-07-04  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] Solve a couple of compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=174020

        Reviewed by Michael Catanzaro.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::isPersistentType): Added default return and
        assertion.
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::updateKeyStatuses): This warning was
        already solved but I think adding an assertion for the default
        case can help catch errors in the future.

2017-07-04  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup some StringBuilder use
        https://bugs.webkit.org/show_bug.cgi?id=174118

        Reviewed by Andreas Kling.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::filterICECandidate):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::compileGlobalDisplayNoneStyleSheet):
        * css/CSSFontStyleRangeValue.cpp:
        (WebCore::CSSFontStyleRangeValue::customCSSText):
        * css/CSSFontStyleValue.cpp:
        (WebCore::CSSFontStyleValue::customCSSText):
        * css/CSSGridAutoRepeatValue.cpp:
        (WebCore::CSSGridAutoRepeatValue::customCSSText):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceDescriptor):
        * dom/Attr.cpp:
        * html/canvas/WebGPURenderingContext.cpp:
        * html/parser/HTMLParserIdioms.cpp:
        * platform/network/ParsedContentType.cpp:
        * platform/network/cocoa/CookieCocoa.mm:
        * platform/text/mac/LocaleMac.mm:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):

2017-07-03  Andreas Kling  <akling@apple.com>

        Null RenderLayer* deref in FrameView::adjustTiledBackingCoverage()
        https://bugs.webkit.org/show_bug.cgi?id=174106
        <rdar://problem/33085838>

        Reviewed by Tim Horton.

        I haven't been able to reproduce this crash locally, but I have seen
        video of someone who can, so here's a null check for the RenderView::layer()
        which could be null if we're called between RenderView construction
        and the first callback to RenderLayerModelObject::styleDidChange().

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustTiledBackingCoverage):

2017-07-03  Matt Rajca  <mrajca@apple.com>

        Add/remove appropriate media element behavior restrictions when updateWebsitePolicies is called
        https://bugs.webkit.org/show_bug.cgi?id=174103

        Reviewed by Alex Christensen.

        Test: Added API test.

        Added support for updating rate change behavior restrictions on media elements that have already
        been created.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateRateChangeRestrictions):
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::updateMediaElementRateChangeRestrictions):
        * page/Page.h:

2017-07-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219103.

        Caused multiple build failures.

        Reverted changeset:

        "Remove copy of ICU headers from WebKit"
        https://bugs.webkit.org/show_bug.cgi?id=116407
        http://trac.webkit.org/changeset/219103

2017-07-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove copy of ICU headers from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116407

        Reviewed by Alex Christensen.

        Use WTF's copy of ICU headers.

        No new tests because there is no behavior change.

        * Configurations/WebCore.xcconfig:
        * icu/unicode/bytestream.h: Removed.
        * icu/unicode/localpointer.h: Removed.
        * icu/unicode/parseerr.h: Removed.
        * icu/unicode/platform.h: Removed.
        * icu/unicode/ptypes.h: Removed.
        * icu/unicode/putil.h: Removed.
        * icu/unicode/rep.h: Removed.
        * icu/unicode/std_string.h: Removed.
        * icu/unicode/strenum.h: Removed.
        * icu/unicode/stringpiece.h: Removed.
        * icu/unicode/ubrk.h: Removed.
        * icu/unicode/uchar.h: Removed.
        * icu/unicode/ucnv.h: Removed.
        * icu/unicode/ucnv_err.h: Removed.
        * icu/unicode/ucol.h: Removed.
        * icu/unicode/uconfig.h: Removed.
        * icu/unicode/ucurr.h: Removed.
        * icu/unicode/uenum.h: Removed.
        * icu/unicode/uiter.h: Removed.
        * icu/unicode/uloc.h: Removed.
        * icu/unicode/umachine.h: Removed.
        * icu/unicode/unistr.h: Removed.
        * icu/unicode/unorm.h: Removed.
        * icu/unicode/unorm2.h: Removed.
        * icu/unicode/uobject.h: Removed.
        * icu/unicode/urename.h: Removed.
        * icu/unicode/uscript.h: Removed.
        * icu/unicode/uset.h: Removed.
        * icu/unicode/ustring.h: Removed.
        * icu/unicode/utext.h: Removed.
        * icu/unicode/utf.h: Removed.
        * icu/unicode/utf16.h: Removed.
        * icu/unicode/utf8.h: Removed.
        * icu/unicode/utf_old.h: Removed.
        * icu/unicode/utypes.h: Removed.
        * icu/unicode/uvernum.h: Removed.
        * icu/unicode/uversion.h: Removed.

2017-07-03  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(Variation Fonts): Specifying Skia by PostScript name does not yield the expected result
        https://bugs.webkit.org/show_bug.cgi?id=174079
        <rdar://problem/33040854>

        Reviewed by Alex Christensen.

        Because Skia is a variation font, its PostScript name contains values to apply to its variation
        axes. However, WebKit's variation code was overwriting these intrinsive values with ones specified
        by CSS. Therefore, the intrinsic ones were being ignored. The solution is just to pass a flag from
        the lookup code to the variations code describing if the font was created via a PostScript name,
        and to not apply the CSS properties to it if it was.

        Test: fast/text/variations/skia-postscript-name.html

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):

2017-07-03  Brady Eidson  <beidson@apple.com>

        Switch all WebKit API related to favicons from WebIconDatabase over to new WebCore::IconLoader mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=174073

        Reviewed by Andy Estes.

        Covered by existing API test.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading):
        * loader/EmptyClients.cpp:
        * loader/FrameLoaderClient.h:

2017-07-03  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove more unnecessary uses of the preprocessor in idl files
        https://bugs.webkit.org/show_bug.cgi?id=174083

        Reviewed by Alex Christensen.

        Purge as much preprocessor use as possible.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_NAVIGATOR_STANDALONE.

        * animation/Animatable.idl:
        Remove unnecessary check for LANGUAGE_OBJECTIVE_C. We no longer generate those bindings.

        * html/MediaError.idl:
        Use [Conditional] rather than the preprocessor.

        * page/Navigator.idl:
        Use [Conditional] rather than the preprocessor with the new ENABLE_NAVIGATOR_STANDALONE.

        * testing/Internals.cpp:
        * testing/Internals.h:
        Expose setQuickLookPassword on all platforms, as it doesn't hurt since it is only for testing,
        but make the implementation do nothing.

        * testing/Internals.idl:
        Use [Conditional] rather than the preprocessor.

2017-07-03  Daewoong Jang  <daewoong.jang@navercorp.com>

        [Curl] Fix compilation errors
        https://bugs.webkit.org/show_bug.cgi?id=174085

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::initCookieSession):
        * platform/network/curl/CurlContext.h:

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

        WebAudioSourceProviderAVFObjC should not reconfigure for each data call
        https://bugs.webkit.org/show_bug.cgi?id=174101

        Reviewed by Eric Carlson.

        Covered by manual testing, in particular
        https://webrtc.github.io/samples/src/content/peerconnection/webaudio-output/
        and https://webrtc.github.io/samples/src/content/getusermedia/volume/.
        Also improved LayoutTests web audio peer connection tests to make them more robust.

        Before the patch, reconfiguration of the web audio provider was happening for every audioSamplesAvailable call.
        It is now happening only when the format of the audio samples is changing.
        Changed some member fields from uinque_ptr to optional as a minor improvement.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):
        (WebCore::WebAudioSourceProviderAVFObjC::prepare):
        (WebCore::WebAudioSourceProviderAVFObjC::unprepare):
        (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable):

2017-06-30  Alex Christensen  <achristensen@webkit.org>

        Stop using dispatch_async in ResourceHandleCFURLConnectionDelegateWithOperationQueue
        https://bugs.webkit.org/show_bug.cgi?id=174059

        Reviewed by Andy Estes.

        Use dispatch_async_f and callOnMainThread instead.
        No change in behavior.
        This will allow me to use this code on Windows.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):

2017-07-03  Andy Estes  <aestes@apple.com>

        [Xcode] Add an experimental setting to build with ccache
        https://bugs.webkit.org/show_bug.cgi?id=173875

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig: Included ccache.xcconfig.

2017-07-02  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r218910): Crash inside textMarkerDataForFirstPositionInTextControl
        https://bugs.webkit.org/show_bug.cgi?id=174077
        <rdar://problem/33083972>

        Reviewed by Chris Fleizach.

        The bug was caused by textMarkerDataForFirstPositionInTextControl assuming that
        there is always a root editable element (a.k.a. editing host) in the text control.
        When the text control is readonly or disabled, this is not the case.

        Fixed the bug by adding an early exit when there is no editing host.

        Test: accessibility/mac/input-type-change-crash.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForFirstPositionInTextControl):

2017-07-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Support listing WebGL2 and WebGPU contexts
        https://bugs.webkit.org/show_bug.cgi?id=173396

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/create-context-2d.html
               inspector/canvas/create-context-webgl.html
               inspector/canvas/create-context-webgl2.html
               inspector/canvas/create-context-webgpu.html

        Split "inspector/canvas/create-canvas-contexts.html" into a test for each context type.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::buildObjectForCanvas):

2017-07-03  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r215096) Queries of URLs with non-special schemes should not percent-encode single quotes
        https://bugs.webkit.org/show_bug.cgi?id=174051

        Reviewed by Tim Horton.

        In r215096 I added ' to the set of characters to be percent-encoded in queries,
        but for interoperability and compatibility we need to do this only for special schemes, like http.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::isC0Control):
        (WebCore::shouldPercentEncodeQueryByte):
        (WebCore::URLParser::utf8QueryEncode):
        (WebCore::URLParser::encodeQuery):

2017-07-03  Chris Fleizach  <cfleizach@apple.com>

        AX: role="none" (or presentation) does not work on iframes
        https://bugs.webkit.org/show_bug.cgi?id=173930
        <rdar://problem/33034347>

        Reviewed by Ryosuke Niwa.

        Support setting a presentational role on an iframe so that the AXWebArea disappears from the hierarchy.
        Accomplish this by adding children for attachment and scroll view elements the way other children are added.
        That is, only add the non-ignored children directly (which means move the addChild logic into AccessibilityObject.)

        Test: accessibility/presentation-role-iframe.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::AccessibilityNodeObject):
        (WebCore::AccessibilityNodeObject::insertChild): Deleted.
        (WebCore::AccessibilityNodeObject::addChild): Deleted.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::insertChild):
        (WebCore::AccessibilityObject::addChild):
        (WebCore::nodeHasPresentationRole):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::addChild): Deleted.
        (WebCore::AccessibilityObject::insertChild): Deleted.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::webAreaIsPresentational):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::addAttachmentChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildren):

2017-07-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219024.

        This patch cause 3 didferent test to fail.

        Reverted changeset:

        "REGRESSION(r215096) Queries of URLs with non-special schemes
        should not percent-encode single quotes"
        https://bugs.webkit.org/show_bug.cgi?id=174051
        http://trac.webkit.org/changeset/219024

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

        Pasting single words copied to UIPasteboard inserts URLs in editable areas
        https://bugs.webkit.org/show_bug.cgi?id=174082
        <rdar://problem/33046992>

        Reviewed by Tim Horton.

        Currently, our heuristics for coercing plain text to URLs when reading URLs off of the UIPasteboard allows URLs
        to be created as long as -[UIPasteboard valuesForPasteboardType:inItemSet:] returns a non-null NSURL. However,
        UIPasteboard automatically coerces any NSString into an NSURL if it initializes an NSURL via +URLWithString:.
        Thus, single-word strings such as "hello" that are written to the pasteboard as "public.utf8-plain-text" can
        be read back as NSURLs for "public.url". This currently causes bugs in shipping software: e.g. copying and
        pasting a single word from an editable input or textarea and pasting into a rich contenteditable area using
        WebKit1 inserts a link. However, when combined with another change in WebKit that attempts to read "public.url"
        before "public.text" when reading plain text from the pasteboard, this now also affects pasting in plain text
        areas, where pasted plain-text strings that are not URLs will paste as URL-encoded strings anyways (for
        instance, replacing "[hello]" with "%5Bhello%5D").

        To fix this, and existing issues with pasting single words in contenteditables, we make
        PlatformPasteboard::readString and PlatformPasteboard::readURL only accept a coerced NSURL as an URL if it also
        parses as a valid URL in WebKit (otherwise, we return an empty string).

        Tests:
            UIPasteboardTests.DoNotPastePlainTextAsURL
            UIPasteboardTests.PastePlainTextAsURL
            UIPasteboardTests.PasteURLWithPlainTextAsURL

        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::allowReadingURLAtIndex):

        Allow an URL to be read if either (1) an URL was explicitly specified in the UIPasteboard, or (2) the "proposed"
        URL returned from -valuesForPasteboardType: is valid.

        (WebCore::PlatformPasteboard::readString):
        (WebCore::PlatformPasteboard::readURL):

        Consult allowReadingURLAtIndex here (in the case of ::readString, only if the given pasteboard type is
        "public.url").

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard itemProviders]):
        (-[WebItemProviderPasteboard setItemProviders:]):

2017-07-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyEC SPKI exports
        https://bugs.webkit.org/show_bug.cgi?id=173646

        Reviewed by Jiewen Tan.

        No new tests -- affected tests are now passing and are unskipped.

        Implement libgcrypt-based support for SPKI exports of EC keys.

        Initially, the ECParameters structure is created so that it will be later embedded
        into the SubjectPublicKeyInfo structure. First the root element of this structure
        is written into, specifying namedCurve as the chosen member (even if other choices
        are not really available). We then write out the object identifier into this
        namedCurve member that properly represents this key's curve type.

        The SubjectPublicKeyInfo structure is created next. We write out id-ecPublicKey
        identifier as the chosen algorithm identifier. Web Crypto specification demands
        that the id-ecDH identifier is used in case of ECDH keys, but no existing test in
        the W3C test suite expects this, so this should be revisited later. Data of the
        previously-constructed ECParameters structure is written out into the
        AlgorithmIdentifier's parameters member.

        The `q` MPI data is then retrieved. Its size is validated, as well as the first
        byte of data in order to ensure the MPI represents an uncompressed EC point.
        The data is then written into the subjectPublicKey member.

        Finally the encoded SubjectPublicKeyInfo structure data is extracted and returned
        from the platformExportSpki() function, completion the export operation.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::curveIdentifier):
        (WebCore::CryptoKeyEC::platformExportSpki):

2017-07-02  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove special casing for RegExp which is no longer required by the spec
        https://bugs.webkit.org/show_bug.cgi?id=174025

        Reviewed by Chris Dumez.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        (GenerateOverloadDispatcher):
        Remove special casing.

        * bindings/scripts/IDLParser.pm:
        (parseNonAnyType):
        Remove parsing of RegExp.

        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        Update test results.

2017-07-02  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingVideoSource should pass frame timestamp
        https://bugs.webkit.org/show_bug.cgi?id=174055

        Reviewed by Eric Carlson.

        Covered by manual testing since this only affects video encoding quality.

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):

2017-07-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/33096441> r219055 broke non-iOS builds.

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

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove code only needed when building for iOS 9.x
        https://bugs.webkit.org/show_bug.cgi?id=174068

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::isDataDetectorLink):
        (WebCore::DataDetection::shouldCancelDefaultAction):
        (WebCore::constructURLStringForResult):
        (WebCore::DataDetection::detectContentInRange):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::vmPageSize):
        * platform/cocoa/DataDetectorsCoreSoftLink.h:
        * platform/cocoa/DataDetectorsCoreSoftLink.mm:
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (layerContentsFormat):
        (PlatformCALayerCocoa::updateContentsFormat):
        (PlatformCALayerCocoa::backingStoreBytesPerPixel):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::extendedSRGBColorSpaceRef):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::lookupFallbackFont):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::variantCapsSupportsCharacterForSynthesis):
        (WebCore::Font::platformWidthForGlyph):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::ctFont):
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::sinkIntoImage):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::setTimebase):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::systemFontModificationAttributes):
        (WebCore::systemFontDescriptor):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat):
        * platform/ios/LegacyTileGridTile.mm:
        (WebCore::LegacyTileGridTile::LegacyTileGridTile):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenSupportsExtendedColor):
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListenerIOS::RemoteCommandListenerIOS):
        (WebCore::RemoteCommandListenerIOS::~RemoteCommandListenerIOS):
        (WebCore::RemoteCommandListenerIOS::updateSupportedCommands):
        * platform/spi/cf/CFNetworkSPI.h:
        * platform/spi/cg/CoreGraphicsSPI.h:
        * platform/spi/cocoa/DataDetectorsCoreSPI.h:
        * platform/spi/cocoa/QuartzCoreSPI.h:
        * platform/spi/mac/AVFoundationSPI.h:

2017-07-01  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r218371): Reeder's default font is Times instead of San Francisco
        https://bugs.webkit.org/show_bug.cgi?id=173617
        <rdar://problem/32969819>

        Reviewed by Simon Fraser.

        On systems where USE_PLATFORM_SYSTEM_FALLBACK_LIST is set to true, the code in
        platformFontWithFamilySpecialCase() is still used when @font-face blocks specify
        src:local(system-ui), which made the assertion erroneously fire.

        Unfortunately, our architecture is such that an @font-face block represents a
        single entry in the font-family fallback list, which means it would be quite
        difficult to make local(system-ui) in an @font-face block expand at the level
        of the font cascade. So, this patch simply reverts to the previous behavior for
        local(system-ui) (which doesn't include the entire Core Text cascade list).
        This means that "font-family: system-ui" and "src: local(system-ui)" have
        different behavior, which is undesirable, but architecturally difficult to
        solve. I've added some FIXMEs to the code in the relevant places and filed
        https://bugs.webkit.org/show_bug.cgi?id=174023.

        Test: fast/text/font-face-local-system.html

        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::systemFontDescriptor):
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):

2017-07-01  Ryosuke Niwa  <rniwa@webkit.org>

        Frame.h doesn't need to include FrameLoader.h, IntRect.h, and NavigationScheduler.h
        https://bugs.webkit.org/show_bug.cgi?id=174004

        Reviewed by Simon Fraser.

        Made FrameLoader and NavigationScheduler UniqueRef in Frame so that we can forward declare them,
        and forward declared IntPoint and IntRect to avoid including FrameLoader.h, IntRect.h,
        and NavigationScheduler.h in Frame.h

        * Modules/mediastream/MediaStream.cpp:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Avoid calling loader().mixedContentChecker().canRunInsecureContent(~)
        on a nullptr even though this used to work because we weren't de-referencing it.
        * bindings/js/ScriptController.cpp:
        * dom/Document.cpp:
        * dom/EventDispatcher.cpp:
        * editing/Editor.cpp:
        * editing/cocoa/EditorCocoa.mm:
        * editing/ios/EditorIOS.mm:
        * editing/mac/EditorMac.mm:
        * history/CachedPage.cpp:
        * html/HTMLObjectElement.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::DocumentLoader::~DocumentLoader): Check !isLoading() before accessing frameLoader to avoid
        accessing m_frame->loader() inside ~FrameLoader.
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/InspectorInstrumentation.h:
        * loader/CrossOriginPreflightChecker.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOpener): Avoid accessing this FrameLoader via m_opener->loader() when it's
        this FrameLoader inside ~FrameLoader since UniqueRef<FrameLoader> is clears itself before calling
        the destructor of FrameLoader.
        * loader/ImageLoader.cpp:
        * loader/LinkLoader.cpp:
        * loader/SubframeLoader.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/DOMApplicationCache.cpp:
        * mathml/MathMLElement.cpp:
        * page/DOMWindow.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::init): Moved here from Frame.h
        (WebCore::Frame::setDocument):
        * page/Frame.h:
        (WebCore::Frame::loader):
        (WebCore::Frame::navigationScheduler):
        * page/History.cpp:
        * page/Location.cpp:
        * page/PerformanceLogging.cpp:
        * page/PerformanceNavigation.cpp:
        * page/UserContentProvider.cpp:
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::initWithSimpleHTMLDocument):
        * plugins/PluginInfoProvider.cpp:
        * replay/ReplayInputCreationMethods.cpp:
        * replay/UserInputBridge.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2017-07-01  Dan Bernstein  <mitz@apple.com>

        [macOS] Remove code only needed when building for OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=174067

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):
        * html/HTMLCanvasElement.cpp:
        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::create):
        * page/mac/WheelEventDeltaFilterMac.h:
        * page/mac/WheelEventDeltaFilterMac.mm:
        * page/scrolling/ScrollingMomentumCalculator.cpp:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.h:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (replacementDataFromDecisionInfo):
        (WebCore::NetworkExtensionContentFilter::initialize):
        (WebCore::NetworkExtensionContentFilter::willSendRequest):
        (WebCore::NetworkExtensionContentFilter::responseReceived):
        (WebCore::NetworkExtensionContentFilter::addData):
        (WebCore::NetworkExtensionContentFilter::finishedAddingData):
        (WebCore::NetworkExtensionContentFilter::unblockHandler):
        * platform/graphics/ComplexTextController.h:
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (PlatformCAAnimationCocoa::setTimingFunction):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::sinkIntoImage):
        * platform/graphics/cocoa/WebGPULayer.mm:
        (-[WebGPULayer initWithGPUDevice:]):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]):
        * platform/mac/BlacklistUpdater.mm:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenSupportsExtendedColor):
        * platform/mac/ValidationBubbleMac.mm:
        (WebCore::ValidationBubble::ValidationBubble):
        * platform/mac/WebGLBlacklist.mm:
        (WebCore::WebGLBlacklist::create):
        * platform/network/cocoa/WebCoreNSURLSession.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::setCookiesFromDOM):
        * platform/spi/cf/CFNetworkSPI.h:
        * platform/spi/cg/CoreGraphicsSPI.h:
        * platform/spi/cocoa/NEFilterSourceSPI.h:
        * platform/spi/cocoa/NSURLConnectionSPI.h:
        * platform/spi/cocoa/QuartzCoreSPI.h:
        * platform/spi/mac/NSScrollingInputFilterSPI.h:
        * platform/spi/mac/NSScrollingMomentumCalculatorSPI.h:
        * platform/spi/mac/TUCallSPI.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::levelIndicatorFor):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendKERNTable):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

2017-06-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        If an image appears more than once on a page, decoding for painting one instance repaints them all
        https://bugs.webkit.org/show_bug.cgi?id=169944

        Reviewed by Simon Fraser.

        Make the Image::draw*() and GraphicsContext::draw*() functions return an
        ImageDrawResult which indicates whether the image is drawn or has requested
        an asynchronous image decoding.

        If the image requested an asynchronous image decoding, the issuer of the
        Image::draw(), which is of type CachedImageClient, will add itself to a
        set of m_pendingImageDrawingClients, which owned by CachedImage.

        When receiving the imageFrameAvailable() notification for a lrage image 
        from the decoding thread, CachedImage will loop through the clients that
        are only in m_pendingImageDrawingClients to ask them to repaint their
        rectangles.

        Test: fast/images/async-image-multiple-clients-repaint.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        (WebCore::CachedImage::addPendingImageDrawingClient):
        (WebCore::CachedImage::allClientsRemoved):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::imageFrameAvailable):
        * loader/cache/CachedImage.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/ImageTypes.h:
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        * svg/graphics/SVGImageForContainer.h:

2017-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r214194): Safari leaves a popup window open opened during before unload
        https://bugs.webkit.org/show_bug.cgi?id=174016

        Reviewed by Chris Dumez.

        Address Dan's review comments.

        * loader/NavigationDisabler.h:
        (WebCore::NavigationDisabler::NavigationDisabler):
        (WebCore::NavigationDisabler::~NavigationDisabler):

2017-06-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Text indicators for dragged links should always be legible if the link is legible
        https://bugs.webkit.org/show_bug.cgi?id=173860
        <rdar://problem/32974385>

        Reviewed by Tim Horton.

        Currently, TextIndicatorOptionUseBoundingRectAndPaintAllContentForComplexRanges ensures that links backed by a
        RenderReplaced element don't render blank text indicators by additionally forcing the
        TextIndicatorOptionPaintAllContent option in order to capture the RenderReplaced content. If estimated
        background color is requested, this patch adds an additional path for "upgrading" the text indicator to paint
        all content: if the text color is not legible against the estimated background color, then it is likely that the
        background color estimate failed or the link itself was not legible in the first place; in the former case, to
        ensure that the link is still legible, we upgrade the given TextIndicatorOptions to paint all contents in the
        range.

        There is currently no way to test this, and also no simple way to introduce infrastructure to test text
        indicators.

        * page/TextIndicator.cpp:
        (WebCore::estimatedTextColorsForRange):

        Estimates all text colors that appear in a range by iterating over the text node renderers and consulting their
        render styles.

        (WebCore::adjustTextIndicatorDataOptionsForEstimatedColorsIfNecessary):

        If foreground text color is deemed not legible, force TextIndicatorOptionPaintAllContent instead of
        TextIndicatorOptionUseBoundingRectAndPaintAllContentForComplexRanges.

        (WebCore::initializeIndicator):
        * rendering/TextPaintStyle.cpp:
        (WebCore::textColorIsLegibleAgainstBackgroundColor):
        (WebCore::adjustColorForVisibilityOnBackground):

        Allow other parts of WebCore to check the legibility of text against a background color.

        * rendering/TextPaintStyle.h:

2017-06-30  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r215096) Queries of URLs with non-special schemes should not percent-encode single quotes
        https://bugs.webkit.org/show_bug.cgi?id=174051
        <rdar://problem/33002846>

        Reviewed by Tim Horton.

        In r215096 I added ' to the set of characters to be percent-encoded in queries,
        but for interoperability and compatibility we need to do this only for special schemes, like http.

        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::isC0Control):
        (WebCore::shouldPercentEncodeQueryByte):
        (WebCore::URLParser::utf8QueryEncode):
        (WebCore::URLParser::encodeQuery):

2017-06-30  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build following <https://trac.webkit.org/changeset/219019>
        (https://bugs.webkit.org/show_bug.cgi?id=165160)

        Export the FrameLoadRequest move constructor and move operator so that they
        can be used from WebKit.

        * loader/FrameLoadRequest.h:

2017-06-30  Don Olmstead  <don.olmstead@sony.com>

        [WebCore] Update AXObjectCache for !HAVE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=174045

        Reviewed by Konstantin Tokarev.

        No new tests. No change in behavior.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::checkedStateChanged):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::deferRecomputeIsIgnored):
        (WebCore::AXObjectCache::deferTextChangedIfNeeded):
        (WebCore::AXObjectCache::focusAriaModalNodeTimerFired):
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::handleScrollbarUpdate):
        (WebCore::AXObjectCache::liveRegionChangedNotificationPostTimerFired):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::passwordNotificationPostTimerFired):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::postTextReplacementNotification):
        (WebCore::AXObjectCache::postTextReplacementNotificationForTextControl):
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::recomputeIsIgnored):
        (WebCore::AXObjectCache::textChanged):
        (WebCore::AXObjectCache::updateCacheAfterNodeIsAttached):
        (WebCore::AXObjectCache::focusAriaModalNode): Deleted.

2017-06-30  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Windows build following <https://trac.webkit.org/changeset/219013>
        (https://bugs.webkit.org/show_bug.cgi?id=165160)

        Make FrameLoadRequest move constructor and move operator out-of-line so that callers
        do not need to include header SecurityOrigin.h.

        * loader/FrameLoadRequest.cpp:
        * loader/FrameLoadRequest.h:

2017-06-30  Alex Christensen  <achristensen@webkit.org>

        Stop soft linking with CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=174029

        Reviewed by Jer Noble.

        We link directly with CFNetwork.  There's no reason to soft link, 
        and it is causing a problem with linking when doing interesting things with CFNetwork.

        * platform/spi/cf/CFNetworkSPI.h:

2017-06-30  Daniel Bates  <dabates@apple.com>

        API::FrameInfo should know the web page that contains the frame; add API property webView to WKFrameInfo
        https://bugs.webkit.org/show_bug.cgi?id=165160
        <rdar://problem/29451999>

        Reviewed by Brady Eidson.

        Pass the document that is requesting the load to the loader.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab): Pass the document when instantiating the FrameLoadRequest.
        Also use C++11 brace initialization to instantiate ResourceRequest.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate): Pass the document when instantiating the FrameLoadRequest.
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest): Moved from FrameLoadRequest.h.
        (WebCore::FrameLoadRequest::requester): Added.
        (WebCore::FrameLoadRequest::requesterSecurityOrigin): Added.
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest): Marked as WEBCORE_EXPORT and modified to take
        the document that requested the load.
        (WebCore::FrameLoadRequest::requester): Deleted; made out-of-line/moved to FrameLoadRequest.cpp.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Pass the document when instantiating the FrameLoadRequest. Also use C++11
        brace initialization to instantiate ResourceRequest.
        (WebCore::FrameLoader::loadURLIntoChildFrame): Pass the document when instantiating the FrameLoadRequest.
        (WebCore::FrameLoader::loadFrameRequest): Substitute FrameLoadRequest::requesterSecurityOrigin() for
        FrameLoadRequest::requester() as the former replaces the latter.
        (WebCore::FrameLoader::loadURL): Pass the document when instantiating the NavigationAction.
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::loadWithDocumentLoader): Pass the document when instantiating the NavigationAction.
        Also use C++11 brace initialization syntax to instantiate the NavigationAction.
        (WebCore::FrameLoader::reload): Ditto.
        (WebCore::FrameLoader::loadPostRequest): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Pass the document when instantiating the NavigationAction.
        (WebCore::FrameLoader::loadDifferentDocumentItem): Pass the document when instantiating the NavigationAction.
        Also use C++11 brace initialization syntax to instantiate the NavigationAction.
        (WebCore::createWindow): Pass the document when instantiating the NavigationAction.
        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction): Modified to take the source document.
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::isEmpty): Consider a NavigationAction empty if does not have a source document
        or the associated ResourceRequest has an empty URL.
        (WebCore::NavigationAction::sourceDocument): Added.
        (WebCore::NavigationAction::NavigationAction): Deleted; made out-of-line/moved to NavigationAction.cpp to
        avoid the need to include the header Document.h.
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation): Store the document that scheduled the navigation.
        Also use C++11 brace initialization to instantiate in the member initialization list.
        (WebCore::ScheduledURLNavigation::initiatingDocument): Added. Retrieves the document that scheduled the navigation.
        (WebCore::NavigationScheduler::scheduleLocationChange): Pass the document when instantiating the FrameLoadRequest.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Pass the document when instantiating the NavigationAction.
        Also use C++11 brace initialization syntax to instantiate the NavigationAction.
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected): Pass the document when instantiating the FrameLoadRequest.
        Also use C++11 brace initialization syntax to instantiate the FrameLoadRequest.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Pass the document when instantiating the FrameLoadRequest.

2017-06-29  Jer Noble  <jer.noble@apple.com>

        Make Legacy EME API controlled by RuntimeEnabled setting.
        https://bugs.webkit.org/show_bug.cgi?id=173994

        Reviewed by Sam Weinig.

        Add a new RuntimeEnabledFeatures setting to control the availability of the WebKit prefixed EME APIs.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.idl:
        * dom/Element.idl:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::webkitSetMediaKeys):
        (WebCore::HTMLMediaElement::keyAdded):
        * html/HTMLMediaElement.idl:
        * html/WebKitMediaKeyError.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setLegacyEncryptedMediaAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::legacyEncryptedMediaAPIEnabled):

2017-06-30  Chris Dumez  <cdumez@apple.com>

        Move ResourceLoadStatisticsStore to WebKit2/UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=174033

        Reviewed by Brent Fulgham.

        Move ResourceLoadStatisticsStore to WebKit2/UIProcess since it is only
        used in the WebKit2 UIProcess.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::primaryDomain):
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::primaryDomain):
        * loader/ResourceLoadStatistics.h:

2017-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        Ran sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2017-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r214194): Safari leaves a popup window open opened during before unload
        https://bugs.webkit.org/show_bug.cgi?id=174016

        Reviewed by Chris Dumez.

        The bug was caused by WebKit allowing the opening of a new window via window.open but disallowing
        the initial navigation within the newly opened window while a beforeunload event is being dispatched.

        Because some websites which opens a window during a beforeunload event relies on the opened page
        to communicate back in order to close it. This resulted in a newly opened popup window with about:blank
        being left out on those websites.

        Fixed the bug by allowing the navigation of a new window as well as an existing another window.
        More concretely, we disallow navigations within the same frame tree as the one in which a beforeunload
        event is being dispatched, and allow navigations elsewhere (i.e. different window / page).
        During the destruction of a frame-less document, disallow all the navigations.

        Tests: fast/events/before-unload-navigate-different-window.html
               fast/events/before-unload-open-window.html
               fast/events/before-unload-sibling-frame.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isNavigationAllowed):
        (WebCore::FrameLoader::shouldClose):
        * loader/NavigationDisabler.h: Added. Extracted from NavigationScheduler.h
        (WebCore::NavigationDisabler::NavigationDisabler): Increment the newly added counter on MainFrame unless
        the frame is null (during the destruction of a frameless document) in which case we increment the global
        disable count.
        (WebCore::NavigationDisabler::~NavigationDisabler): Ditto for decrementation.
        (WebCore::NavigationDisabler::isNavigationAllowed): Only allow the navigation when there is no frameless
        document in destruction, and none of the frame in the same frame tree as the one given is currently in
        the process of dispatching a beforeunload event.
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::shouldScheduleNavigation):
        * loader/NavigationScheduler.h:
        (WebCore::NavigationDisabler): Moved to NavigationDisabler.h.
        * page/MainFrame.h:
        (WebCore::MainFrame): Added s_globalNavigationDisableCount.

2017-06-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for conditionally read-write attributes
        https://bugs.webkit.org/show_bug.cgi?id=173993

        Reviewed by Alex Christensen.

        The MEDIA_SOURCE feature/conditional requires changing a few readonly
        attributes into read-write attributes. In the past we handled this with
        custom bindings. This patch adds a new extended attribute, ConditionallyReadWrite
        which achieves the same result.

        * WebCore.xcodeproj/project.pbxproj:
        Move a few custom binding to the "GC / Wrapping Only" group.

        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind): Deleted.
        (WebCore::JSAudioTrack::setLanguage): Deleted.
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setLanguage): Deleted.
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind): Deleted.
        (WebCore::JSVideoTrack::setLanguage): Deleted.
        Remove no longer needed custom bindings.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePropertiesHashTable):
        (GenerateImplementation):
        (GenerateAttributeSetterDefinition):
        (GenerateCallbackImplementationContent):
        (GenerateHashTableValueArray):
        (GenerateHashTable):
        Pipe ConditionallyReadWrite through the generator.

        * bindings/scripts/IDLAttributes.json:
        Add ConditionallyReadWrite.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:
        Add tests for ConditionallyReadWrite.

        * html/track/AudioTrack.idl:
        * html/track/TextTrack.idl:
        * html/track/VideoTrack.idl:
        Replace [Custom] with [ConditionallyReadWrite].

2017-06-30  Chris Dumez  <cdumez@apple.com>

        ResourceLoadObserver does not need a ResourceLoadStatisticsStore
        https://bugs.webkit.org/show_bug.cgi?id=174013

        Reviewed by Brent Fulgham.

        ResourceLoadObserver does not need a ResourceLoadStatisticsStore. ResourceLoadStatisticsStore is too complicated for its needs.
        ResourceLoadStatisticsStore can then be moved to WebKit2/UIProcess in a follow-up.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::shared):
        (WebCore::ResourceLoadObserver::setNotificationCallback):
        (WebCore::ResourceLoadObserver::shouldLog):
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::ensureResourceStatisticsForPrimaryDomain):
        (WebCore::ResourceLoadObserver::takeResourceStatisticsForPrimaryDomain):
        (WebCore::ResourceLoadObserver::isPrevalentResource):
        (WebCore::ResourceLoadObserver::statisticsForOrigin):
        (WebCore::ResourceLoadObserver::takeStatistics):
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        * loader/ResourceLoadStatisticsStore.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * testing/Internals.cpp:
        (WebCore::Internals::resourceLoadStatisticsForOrigin):

2017-06-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        ASSERTION FAILED: !canAnimate() && !m_currentFrame
        https://bugs.webkit.org/show_bug.cgi?id=173089

        Reviewed by Said Abou-Hallawa.

        WebCore::BitmapImage::draw() has an assertion which ensures
        m_currentFrame is zero in case of async decoding. But, this
        assertion failed if an GIF animation image which have finished its
        animation was repainted. In that time, m_currentFrame was the last
        frame index of the image.

        Test: fast/images/animated-gif-paint-after-animation.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw): Assert m_currentFrame is zero or the animation finished.
        Call requestFrameAsyncDecodingAtIndex with m_currentFrame instead of zero.

2017-06-30  Ross Kirsling  <ross.kirsling@sony.com>

        [PAL] Move Sound into PAL
        https://bugs.webkit.org/show_bug.cgi?id=173999

        Reviewed by Alex Christensen.

        * Configurations/WebCore.xcconfig:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::performDelete):
        * editing/EditorCommand.cpp:
        (WebCore::executeSelectToMark):
        (WebCore::executeSwapWithMark):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::takeFindStringFromSelection):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::beep):
        * platform/Sound.h: Removed.

2017-06-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Drag caret rect is incorrectly computed when dropping in editable content in iframes
        https://bugs.webkit.org/show_bug.cgi?id=174017
        <rdar://problem/32959782>

        Reviewed by Simon Fraser.

        We're currenly computing the drag caret rect (for the purposes of presentation at the client layers)
        incorrectly, in per-frame document coordinates instead of root view coordinates in the mainframe. This means
        drag caret geometry from embedded iframes in the document will show up in the content view with a rect in the
        coordinate space of the iframe.

        To fix this, we need to convert the drag caret rect to root view coordinates. This patch teaches
        DragCaretController to do this, and tweaks WebKit/WebKit2 to use caretRectInRootViewCoordinates.

        Test: DataInteractionTests.ExternalSourcePlainTextToIFrame

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::caretRectInRootViewCoordinates):
        * editing/FrameSelection.h:

2017-06-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Replace use of __is_polymorphic with standard std::is_polymorphic<>::value
        https://bugs.webkit.org/show_bug.cgi?id=174012

        Reviewed by Alex Christensen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Replace __is_polymorphic with standard std::is_polymorphic<>::value. Remove clang
        specific guard now that we are using something other compilers support.

        * 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/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.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:
        Update test results.

2017-06-30  Youenn Fablet  <youenn@apple.com>

       Support PeerConnectionStates::BundlePolicy::MaxBundle when setting rtc configuration
       https://bugs.webkit.org/show_bug.cgi?id=169389

       Reviewed by Alex Christensen.

       Covered by manual testing (appr.tc and https://youennf.github.io/webrtc-tests/src/content/peerconnection/trickle-ice/).
       Updated test is showing some more failing but this is due to the fact that we are no longer totally lying on the configuration of the
        underlying libwebrtc backend.

        Previously, we were creating a libwebrtc peer connection and then setting its configuration.
        libwebrtc does not like the configuration to be changed and may refuse to set the configuration.
        Instead of doing that, we are now creating the libwebrtc peer connection with the provided configuration.

        ICE candidate pool size is disabled as it is creating issues with running tests on bots.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setConfiguration):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::initializeWith):
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration):
        (WebCore::LibWebRTCPeerConnectionBackend::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::createActualPeerConnection):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:


2017-06-30  Antoine Quint  <graouts@apple.com>

        Top controls bars should invert with right-to-left user interface layout direction locale
        https://bugs.webkit.org/show_bug.cgi?id=173989
        <rdar://problem/32863552>

        Reviewed by Dean Jackson.

        When the user interface layout direction is set by the locale to be right-to-left, we now:

            - invert the two top controls bars
            - invert the layout order for the fullscreen / PiP controls bar
            - orient the volume button the opposite direction when presented in a top controls bar

        Test: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-rtl.html

        * Modules/modern-media-controls/controls/icon-service.js: Add new RTL variants for the mute and unmute icons.
        * Modules/modern-media-controls/controls/inline-media-controls.css: Invert the position of the two top controls
        bars when we switch user interface layout direction.
        (.media-controls.inline.uses-ltr-user-interface-layout-direction > .controls-bar.top-left,):
        (.media-controls.inline.uses-ltr-user-interface-layout-direction > .controls-bar.top-right,):
        (.media-controls.inline > .controls-bar.top-left): Deleted.
        (.media-controls.inline > .controls-bar.top-right): Deleted.
        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout): Default to using the LTR variant for the mute button icon since
        it should only use the RTL variant in case the locale requires it *and* we display the mute button in a
        top controls bar rather than the bottom controls bar (ie. when width becomes constrained).
        (InlineMediaControls.prototype._topLeftContainerButtons): Invert the order of the fullscreen and PiP
        buttons based on the user interface layout direction.
        (InlineMediaControls.prototype._addTopRightBarWithMuteButtonToChildren):
        (InlineMediaControls):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.set usesLTRUserInterfaceLayoutDirection): Schedule a layout when the user interface
        layout direction changes.
        * Modules/modern-media-controls/controls/mute-button.js: Add a new "usesRTLIconVariant" property, false by
        default, to indicate we want to use the RTL variant of the button's icon.
        (MuteButton):
        (MuteButton.prototype.get muted):
        (MuteButton.prototype.set muted):
        (MuteButton.prototype.set usesRTLIconVariant):
        (MuteButton.prototype.layout):
        * Modules/modern-media-controls/images/iOS/Mute-RTL.svg: Added.
        * Modules/modern-media-controls/images/iOS/VolumeHi-RTL.svg: Added.
        * Modules/modern-media-controls/images/macOS/Mute-RTL.svg: Added.
        * Modules/modern-media-controls/images/macOS/VolumeHi-RTL.svg: Added.
        * Modules/modern-media-controls/media/media-controller.js: Use an ivar to track when it's worth notifying the
        media controls that the user interface layout direction has changed. This means we won't need to schedule a
        layout in case it's set to the current value.
        (MediaController):
        (MediaController.prototype.set usesLTRUserInterfaceLayoutDirection):

2017-06-29  Zalan Bujtas  <zalan@apple.com>

        BreakingContext::handleReplaced() should use replacedBox instead of m_current.renderer().
        https://bugs.webkit.org/show_bug.cgi?id=174011

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleReplaced):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::applyOverhang):
        * rendering/line/LineWidth.h:

2017-06-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Web content process crashes when the selection is moved far offscreen in dragstart
        https://bugs.webkit.org/show_bug.cgi?id=174010
        <rdar://problem/32597802>

        Reviewed by Tim Horton.

        The TextIndicator snapshot generated in createDragImageForSelection is not guaranteed to succeed; this patch
        adds a null check following TextIndicator::createWithSelectionInFrame and bails early if the snapshot was not
        successful.

        Test: DataInteractionTests.DoNotCrashWhenSelectionMovesOffscreenAfterDragStart

        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForSelection):

2017-06-29  Chris Fleizach  <cfleizach@apple.com>

        AX: Cannot call setValue() on contenteditable or ARIA text controls
        https://bugs.webkit.org/show_bug.cgi?id=173520

        Reviewed by Ryosuke Niwa.

        Add support for changing the value of a contenteditable and any other aria text control in setValue().
 
        Test: accessibility/mac/set-value-editable-types.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):

2017-06-28  Simon Fraser  <simon.fraser@apple.com>

        getBoundingClientRect returns wrong value for combination of page zoom and scroll
        https://bugs.webkit.org/show_bug.cgi?id=173841
        rdar://problem/32983841

        Reviewed by Dean Jackson.

        The layout viewport returned by FrameView::layoutViewportRect() is affected by page (Command-+) zooming,
        since it's computed using scroll positions, so when we use its origin to convert into client coordinates
        (which are zoom-agnostic), we need to account for page zoom, so fix FrameView::documentToClientOffset()
        to do this.

        Callers of documentToClientOffset() were checked, revealing that event client coordinates were also
        wrong with page zoom and are fixed in the same way. It was found that SimulatedClick was using an
        entirely wrong rect to compute its location: Element::clientRect() is NOT in client coordinates,
        so change this code to use getBoundingClientRect() instead.

        Minor refactoring in MouseRelatedEvent to make getting to the FrameView cleaner.

        Some geometry types enhanced to have non-mutating scale functions.

        Tests: fast/events/simulated-click-zoomed.html
               fast/visual-viewport/client-rects-relative-to-layout-viewport-zoomed.html

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::init):
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::MouseRelatedEvent::frameView):
        (WebCore::MouseRelatedEvent::documentToAbsoluteScaleFactor):
        (WebCore::MouseRelatedEvent::computePageLocation):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        (WebCore::pageZoomFactor): Deleted.
        (WebCore::frameScaleFactor): Deleted.
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::absoluteLocation):
        (WebCore::MouseRelatedEvent::setAbsoluteLocation): Deleted.
        * dom/SimulatedClick.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::layoutViewportRect): baseLayoutViewportSize() is the same as the old code.
        (WebCore::FrameView::documentToAbsoluteScaleFactor):
        (WebCore::FrameView::absoluteToDocumentScaleFactor):
        (WebCore::FrameView::absoluteToDocumentPoint):
        (WebCore::FrameView::documentToClientOffset):
        * page/FrameView.h:
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::scale):
        (WebCore::FloatPoint::scaled):
        * platform/graphics/FloatSize.h:
        (WebCore::FloatSize::scaled):
        * platform/graphics/LayoutPoint.h:
        (WebCore::LayoutPoint::scaled):

2017-06-29  Megan Gardner  <megan_gardner@apple.com>

        Unreviewed, fixing Window's build after r218976

        * rendering/ScrollAlignment.cpp:
        (WebCore::operator<<):

2017-06-29  Megan Gardner  <megan_gardner@apple.com>

        Add TextStream operators for Range, VisiblePosition, VisibleSelection, and ScrollAlignment
        https://bugs.webkit.org/show_bug.cgi?id=173997

        Reviewed by Simon Fraser.

        Adding logging that can be used with TextStream-based LOG_WITH_STREAM.

        * dom/Range.cpp:
        (WebCore::operator<<):
        * dom/Range.h:
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        (WebCore::operator<<):
        * editing/VisibleSelection.h:
        * rendering/ScrollAlignment.cpp:
        (WebCore::operator<<):
        * rendering/ScrollAlignment.h:

2017-06-29  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218903.

        This patch and its fix cause immediate flakiness on all WK2
        testers

        Reverted changeset:

        "Support PeerConnectionStates::BundlePolicy::MaxBundle when
        setting rtc configuration"
        https://bugs.webkit.org/show_bug.cgi?id=169389
        http://trac.webkit.org/changeset/218903

2017-06-29  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218963.

        This patch and its fix cause immediate flakiness on all WK2
        testers

        Reverted changeset:

        "Support PeerConnectionStates::BundlePolicy::MaxBundle when
        setting rtc configuration"
        https://bugs.webkit.org/show_bug.cgi?id=169389
        http://trac.webkit.org/changeset/218963

2017-06-29  Chris Dumez  <cdumez@apple.com>

        Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=173990

        Reviewed by Brent Fulgham.

        Split ResourceLoadObserver into 2 classes: one for WebCore and one for the UIProcess.
        They really have different API and there is therefore close to no code duplication.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::primaryDomain):
        (WebCore::ResourceLoadObserver::setStatisticsQueue):
        (WebCore::ResourceLoadObserver::shouldLog):
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::primaryDomain):
        * loader/ResourceLoadStatisticsStore.h:
        * platform/URL.h:

2017-06-29  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom binding for UserMessageHandlersNamespace
        https://bugs.webkit.org/show_bug.cgi?id=173956

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSUserMessageHandlersNamespaceCustom.cpp: Removed.
        Remove JSUserMessageHandlersNamespaceCustom.cpp

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateNamedGetterLambda):
        Add support for calling named getters with additional arguments from [CallWith].

        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateCallWithUsingReferences):
        (GenerateCallWithUsingPointers):
        (GenerateConstructorCallWithUsingPointers):
        (GenerateCallWith):
        (GenerateParametersCheck):
        Update arguments to GenerateCallWith(Using...) to no longer pass an operation,
        which was only needed for the no longer used ScriptArguments, pass a thisObject
        reference, and optionally pass an indentation.

        * bindings/scripts/IDLAttributes.json:
        Remove no longer used ScriptArguments and CallStack, add World.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttributeGetter): Deleted.
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute): Deleted.
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttributeSetter): Deleted.
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStackBody): Deleted.
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack): Deleted.
        * bindings/scripts/test/TestObj.idl:
        Remove tests of ScriptArguments and CallStack.

        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.h: Added.
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h: Added.
        * bindings/scripts/test/TestNamedGetterCallWith.idl: Added.
        * bindings/scripts/test/TestNamedGetterNoIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedGetterWithIdentifier.idl: Added.
        Add basic named getter tests and a specific test of named getters using CallWith.

        * page/UserMessageHandlersNamespace.cpp:
        (WebCore::UserMessageHandlersNamespace::supportedPropertyNames):
        (WebCore::UserMessageHandlersNamespace::namedItem):
        (WebCore::UserMessageHandlersNamespace::handler): Deleted.
        * page/UserMessageHandlersNamespace.h:
        Rename handler to namedItem, matching convention and the expectations of the
        bindings generator and swap the order of the arguments for the same reason.

        * page/UserMessageHandlersNamespace.idl:
        Remove CustomGetOwnPropertySlotAndDescriptor, and add the anonymous named getter.

2017-06-29  Chris Dumez  <cdumez@apple.com>

        Avoid copying ResourceLoadStatistics objects
        https://bugs.webkit.org/show_bug.cgi?id=173972

        Reviewed by Brent Fulgham.

        Avoid copying ResourceLoadStatistics objects given that they are big. Make the type move-only
        to avoid such mistakes in the future.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        * loader/ResourceLoadStatistics.h:
        (WebCore::ResourceLoadStatistics::ResourceLoadStatistics):

2017-06-29  John Wilander  <wilander@apple.com>

        Fix for intermittent Layout Test fail http/tests/loading/resourceLoadStatistics/telemetry-generation.html
        https://bugs.webkit.org/show_bug.cgi?id=173940
        <rdar://problem/33018125>

        Reviewed by Brent Fulgham.

        No new tests. This change enables the exiting test to pass.

        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::sortedPrevalentResourceTelemetry):
            Added an assert.

2017-06-29  Youenn Fablet  <youenn@apple.com>

        Support PeerConnectionStates::BundlePolicy::MaxBundle when setting rtc configuration
        https://bugs.webkit.org/show_bug.cgi?id=169389

        Unreviewed.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration): Reactivating CPU overuse detection as it might be the cause of the bots regressions.

2017-06-29  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] ResourceHandleManager violate the class responsibility of ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=173630

        Reviewed by Alex Christensen.

        * platform/network/ResourceHandle.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::calculateWebTimingInformations):
        (WebCore::handleLocalReceiveResponse):
        (WebCore::writeCallback):
        (WebCore::isHttpInfo):
        (WebCore::isHttpRedirect):
        (WebCore::isHttpAuthentication):
        (WebCore::isHttpNotModified):
        (WebCore::isAppendableHeader):
        (WebCore::removeLeadingAndTrailingQuotes):
        (WebCore::getProtectionSpace):
        (WebCore::headerCallback):
        (WebCore::readCallback):
        (WebCore::getFormElementsCount):
        (WebCore::setupFormData):
        (WebCore::ResourceHandle::setupPUT):
        (WebCore::ResourceHandle::setupPOST):
        (WebCore::ResourceHandle::handleDataURL):
        (WebCore::ResourceHandle::dispatchSynchronousJob):
        (WebCore::ResourceHandle::applyAuthentication):
        (WebCore::ResourceHandle::initialize):
        (WebCore::ResourceHandle::handleCurlMsg):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::startJob):
        (WebCore::calculateWebTimingInformations): Deleted.
        (WebCore::isHttpInfo): Deleted.
        (WebCore::isHttpRedirect): Deleted.
        (WebCore::isHttpAuthentication): Deleted.
        (WebCore::isHttpNotModified): Deleted.
        (WebCore::handleLocalReceiveResponse): Deleted.
        (WebCore::writeCallback): Deleted.
        (WebCore::isAppendableHeader): Deleted.
        (WebCore::removeLeadingAndTrailingQuotes): Deleted.
        (WebCore::getProtectionSpace): Deleted.
        (WebCore::headerCallback): Deleted.
        (WebCore::readCallback): Deleted.
        (WebCore::getFormElementsCount): Deleted.
        (WebCore::setupFormData): Deleted.
        (WebCore::ResourceHandleManager::setupPUT): Deleted.
        (WebCore::ResourceHandleManager::setupPOST): Deleted.
        (WebCore::handleDataURL): Deleted.
        (WebCore::ResourceHandleManager::dispatchSynchronousJob): Deleted.
        (WebCore::ResourceHandleManager::applyAuthenticationToRequest): Deleted.
        (WebCore::ResourceHandleManager::initializeHandle): Deleted.
        * platform/network/curl/ResourceHandleManager.h:

2017-06-29  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Async image decoding should be disabled for iBooks on tvOS
        https://bugs.webkit.org/show_bug.cgi?id=173945

        Reviewed by Simon Fraser.

        The iBooks on tvOS is an AppStore application. We need to disable async
        image decoding for iBooks on tvOS permanently through WebKit.

        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isIBooks):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateFromSettings):

2017-06-29  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add a new extended attribute to model the forced return value optimization used on Node and Crypto
        https://bugs.webkit.org/show_bug.cgi?id=173961

        Reviewed by Darin Adler.

        Node and Crypto were both using custom bindings to implement an optimization
        for operations that always returned one one of the arguments passed in. The
        optimization directly returns the JSValue argument, avoiding wrapping and 
        unwrapping, and all the cache lookups that might entail. This allows that 
        optimization to work without custom bindings by adding a new extended attribute
        [ReturnValue] that can annotate an argument. When used, the implementation
        function is expected to return either void or ExceptionOr<void>.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCryptoCustom.cpp: Removed.
        Remove JSCryptoCustom.cpp.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore): Deleted.
        (WebCore::JSNode::replaceChild): Deleted.
        (WebCore::JSNode::removeChild): Deleted.
        (WebCore::JSNode::appendChild): Deleted.
        Remove custom functions.

        * bindings/scripts/CodeGeneratorJS.pm:
        (OperationHasForcedReturnValue):
        Add helper to determine if an operation has [ReturnValue] on any argument.

        (NeedsExplicitPropagateExceptionCall):
        We must treat operations with a [ReturnValue] argument like we do operations
        returning void, and explicitly check for exceptions.

        (GenerateParametersCheck):
        Pull out the argument in a variable called 'returnValue' if it is annotated
        with [ReturnValue].

        (GenerateImplementationFunctionCall):
        Special case operations with a [ReturnValue] argument to return the previously
        set aside 'returnValue' variable.

        * bindings/scripts/IDLAttributes.json:
        Add [ReturnValue].

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationBody):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimization):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationWithException):
        * bindings/scripts/test/TestObj.idl:
        Add tests for [ReturnValue].

        * dom/Node.idl:
        * page/Crypto.idl:
        Add [ReturnValue] annotations and remove [Custom] annotations.

2017-06-29  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r218944.

        Optimization is incorrect

        Reverted changeset:

        "Avoid copying ResourceLoadStatistics objects"
        https://bugs.webkit.org/show_bug.cgi?id=173972
        http://trac.webkit.org/changeset/218944

2017-06-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r218896): ASSERT in WebPageProxy::dataCallback
        https://bugs.webkit.org/show_bug.cgi?id=173968

        Reviewed by Michael Catanzaro.

        The problem is that WebPageProxy::getLoadDecisionForIcon() sends 0 as callback ID when the decision is to not
        load the icon. Since r218896 we always notify the client even when the decision is to not load the icon, in
        which case the UI doesn't really expect a callback. When WebPageProxy::dataCallback is called with a 0 callback ID,
        CallbackMap::take() crashes in RELEASE_ASSERT(callbackID).

        Fixes several GTK+ unit tests that are crashing.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::didGetLoadDecisionForIcon): Return earlier if decision is false or frame is nullptr.
        (WebCore::DocumentLoader::finishedLoadingIcon): Move RELEASE_ASSERT to notifyFinishedLoadingIcon().
        (WebCore::DocumentLoader::notifyFinishedLoadingIcon): Assert if callbackIdentifier is 0 or m_frame is nullptr,
        since it's no longer expected to happen.

2017-06-29  Chris Dumez  <cdumez@apple.com>

        statistics.mostRecentUserInteraction should be of type WallTime
        https://bugs.webkit.org/show_bug.cgi?id=173974

        Reviewed by Brent Fulgham.

        statistics.mostRecentUserInteraction should be of type WallTime for clarity.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::logUserInteraction):
        (WebCore::ResourceLoadObserver::clearUserInteraction):
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString):
        (WebCore::ResourceLoadStatistics::merge):
        * loader/ResourceLoadStatistics.h:
        (WebCore::ResourceLoadStatistics::mostRecentUserInteractionTime): Deleted.
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::shouldPartitionCookies):
        (WebCore::ResourceLoadStatisticsStore::hasHadRecentUserInteraction):
        (WebCore::ResourceLoadStatisticsStore::sortedPrevalentResourceTelemetry):

2017-06-29  JF Bastien  <jfbastien@apple.com>

        WebAssembly: disable some APIs under CSP
        https://bugs.webkit.org/show_bug.cgi?id=173892
        <rdar://problem/32914613>

        Reviewed by Daniel Bates.

        This does the basic separation of eval-blocked and
        WebAssembly-blocked, but currently only blocks neither or both. I
        think we'll eventually consider allowing one to be blocked but not
        the other, so this separation makes sense and means that when we
        want to do the change it'll be tiny. At a minimum we want a
        different error message, which this patch provides (a lot of the
        code ties blocking to the error message).

        Tests: http/tests/security/contentSecurityPolicy/WebAssembly-allowed.html
               http/tests/security/contentSecurityPolicy/WebAssembly-blocked-in-about-blank-iframe.html
               http/tests/security/contentSecurityPolicy/WebAssembly-blocked-in-external-script.html
               http/tests/security/contentSecurityPolicy/WebAssembly-blocked-in-subframe.html
               http/tests/security/contentSecurityPolicy/WebAssembly-blocked.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::enableWebAssembly):
        (WebCore::ScriptController::disableWebAssembly):
        * bindings/js/ScriptController.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::disableWebAssembly):
        * bindings/js/WorkerScriptController.h:
        * dom/Document.cpp:
        (WebCore::Document::disableWebAssembly):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didCreateWindowProxy):
        (WebCore::ContentSecurityPolicy::applyPolicyToScriptExecutionContext):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::create):
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        (WebCore::ContentSecurityPolicyDirectiveList::webAssemblyDisabledErrorMessage):
        (WebCore::ContentSecurityPolicyDirectiveList::setWebAssemblyDisabledErrorMessage):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::disableWebAssembly):
        * workers/WorkerGlobalScope.h:

2017-06-29  Zalan Bujtas  <zalan@apple.com>

        Make InlineBox::m_topLeft and m_logicalWidth protected.
        https://bugs.webkit.org/show_bug.cgi?id=173973

        Reviewed by Simon Fraser.

        I don't think this reasoning from 10 years ago is valid anymore -> 
          "FIXME: Would like to make this protected, but methods are accessing these members over in the part."
        (comment was conveniently removed in a later commit).

        No change in functionality.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):

2017-06-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Adopt +objectWithItemProviderData: for serializing NSItemProviderReading-conformant objects
        https://bugs.webkit.org/show_bug.cgi?id=173971
        <rdar://problem/33006605>

        Reviewed by Tim Horton.

        Moves off of a very-recently-deprecated API, in favor of its replacement. Guarded by a runtime check and staging
        declarations. No change in behavior.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):

2017-06-29  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Separate global curl settings from ResourceHandleManager as CurlContext class
        https://bugs.webkit.org/show_bug.cgi?id=173629

        Reviewed by Alex Christensen.

        * PlatformWinCairo.cmake:
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForSession):
        * platform/network/curl/CurlContext.cpp: Added.
        (WebCore::certificatePath):
        (WebCore::cookieJarPath):
        (WebCore::CurlContext::CurlContext):
        (WebCore::CurlContext::~CurlContext):
        (WebCore::CurlContext::initCookieSession):
        (WebCore::CurlContext::ProxyInfo::url):
        (WebCore::CurlContext::setProxyInfo):
        (WebCore::CurlContext::getEffectiveURL):
        (WebCore::CurlContext::createMultiHandle):
        (WebCore::CurlContext::mutexFor):
        (WebCore::CurlContext::lock):
        (WebCore::CurlContext::unlock):
        * platform/network/curl/CurlContext.h: Added.
        (WebCore::CurlContext::singleton):
        (WebCore::CurlContext::curlShareHandle):
        (WebCore::CurlContext::getCookieJarFileName):
        (WebCore::CurlContext::setCookieJarFileName):
        (WebCore::CurlContext::getCertificatePath):
        (WebCore::CurlContext::shouldIgnoreSSLErrors):
        (WebCore::CurlContext::proxyInfo):
        (WebCore::CurlContext::setProxyInfo):
        (WebCore::CurlContext::getLogFile):
        (WebCore::CurlContext::isVerbose):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::cancel):
        (WebCore::CurlDownload::didReceiveHeader):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlJobManager.cpp: Renamed from Source/WebCore/platform/network/curl/CurlManager.cpp.
        (WebCore::CurlJobManager::CurlJobManager):
        (WebCore::CurlJobManager::~CurlJobManager):
        (WebCore::CurlJobManager::add):
        (WebCore::CurlJobManager::remove):
        (WebCore::CurlJobManager::getActiveCount):
        (WebCore::CurlJobManager::getPendingCount):
        (WebCore::CurlJobManager::startThreadIfNeeded):
        (WebCore::CurlJobManager::stopThread):
        (WebCore::CurlJobManager::stopThreadIfIdle):
        (WebCore::CurlJobManager::updateHandleList):
        (WebCore::CurlJobManager::addToCurl):
        (WebCore::CurlJobManager::removeFromCurl):
        (WebCore::CurlJobManager::workerThread):
        * platform/network/curl/CurlJobManager.h: Renamed from Source/WebCore/platform/network/curl/CurlManager.h.
        (WebCore::CurlJobManager::singleton):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::handleLocalReceiveResponse):
        (WebCore::getProtectionSpace):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):
        (WebCore::certificatePath): Deleted.
        (WebCore::cookieJarPath): Deleted.
        (WebCore::ResourceHandleManager::setCookieJarFileName): Deleted.
        (WebCore::ResourceHandleManager::getCookieJarFileName): Deleted.
        (WebCore::ResourceHandleManager::setProxyInfo): Deleted.
        (WebCore::ResourceHandleManager::initCookieSession): Deleted.
        * platform/network/curl/ResourceHandleManager.h:
        (): Deleted.

2017-06-29  Chris Dumez  <cdumez@apple.com>

        Avoid copying ResourceLoadStatistics objects
        https://bugs.webkit.org/show_bug.cgi?id=173972

        Reviewed by Geoffrey Garen.

        Avoid copying ResourceLoadStatistics objects given that they are big. Make the type move-only
        to avoid such mistakes in the future.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        * loader/ResourceLoadStatistics.h:
        (WebCore::ResourceLoadStatistics::ResourceLoadStatistics):

2017-06-29  Antoine Quint  <graouts@apple.com>

        Full stop shows to the right of the picture-in-picture localised string in Hebrew
        https://bugs.webkit.org/show_bug.cgi?id=173966
        <rdar://problem/32847376>

        Reviewed by Dean Jackson.

        We manually set the CSS "direction" property to "rtl" when we're not using an LTR language for a placard.

        Test: media/modern-media-controls/placard/placard-ltr.html

        * Modules/modern-media-controls/controls/placard.css:
        (.media-controls:not(.uses-ltr-user-interface-layout-direction) .placard):

2017-06-29  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed Apple CMake build after r218901

        I did not add 'cocoa/FileMonitorCocoa.mm' to the PlatformMac.cmake file as part of r218901.):

        * PlatformMac.cmake:

2017-06-29  Frederic Wang  <fwang@igalia.com>

        Small improvement of calls to RenderLayerBacking members
        https://bugs.webkit.org/show_bug.cgi?id=173969

        Reviewed by Simon Fraser.

        No new tests, behavior unchanged.

        * page/FrameView.cpp:
        (WebCore::FrameView::tiledBacking): Access the member with RenderLayerBacking::tiledBacking.
        (WebCore::FrameView::updateTilesForExtendedBackgroundMode): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::usesCompositedScrolling): Use RenderLayerBacking::hasScrollingLayer as
        it better matches the intention of the check here.

2017-06-29  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Fix ReadableStream "strategy" argument handling
        https://bugs.webkit.org/show_bug.cgi?id=172716

        Reviewed by Xabier Rodriguez-Calvar.

        Aligned default strategy parameter with spec, as defined in [1].
        
        [1] https://streams.spec.whatwg.org/#rs-constructor

        Added new tests and updated some existing ones based on the newly
        expected behavior. Also updated expectations for WPT streams tests.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream): Fixed initialization of strategy.

2017-06-29  Antti Koivisto  <antti@apple.com>

        REGRESSION(r215347): NAS4Free Pop-down menus fail to appear
        https://bugs.webkit.org/show_bug.cgi?id=173967
        <rdar://problem/32690114>

        Reviewed by Andreas Kling.

        Menus on this configuration page operate by mutating visibility. We fail to trigger required
        compositing updates when visibility changes on non-composited layer. Visibility of a non-composited
        descendant may affect geometry of the composited ancestor layer.

        Test: compositing/backing/non-composited-visibility-change.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        (WebCore::RenderLayerCompositor::needsCompositingUpdateForStyleChangeOnNonCompositedLayer): Added.

            Trigger compositing update for non-composited layers on visibility change.
            Factor tests into function.

        * rendering/RenderLayerCompositor.h:

2017-06-28  Frederic Wang  <fwang@igalia.com>

        Align Document::canNavigate on the HTM5 specification
        https://bugs.webkit.org/show_bug.cgi?id=173162

        Reviewed by Chris Dumez.

        Currently when a frame A with a sandboxed navigation flag tries and navigates another frame B
        then Document::canNavigate verifies the cases where we try to navigate A's top frame (in
        that case the allow-top-navigation flag is needed) or not (in that case, B must be a
        descendant of A). This patch refines that a bit to check the case where B is a popup (in that
        case navigation is permitted if A is the opener of B). This change aligns on the HTML5
        specification and allows to pass more W3C Web Platform tests.
        See https://html.spec.whatwg.org/multipage/browsers.html#allowed-to-navigate

        Tests: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html

        * dom/Document.cpp:
        (WebCore::Document::canNavigate): This refines the case where the document's frame has the
        sandbox navigation flag set in order to handle popup navigation. New comments referring to
        the HTML5 specification are also added.

2017-06-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Only apply font features for the particular type of font they are being applied to
        https://bugs.webkit.org/show_bug.cgi?id=172661
        <rdar://problem/31534119>
        <rdar://problem/32799624>

        Reviewed by Simon Fraser.

        There are two types of font formats which support features: AAT and OTF. Each of them has
        a different idea about what the identity of a feature is. We were specifying both types
        of feature identities to Core Text; however, this is causing Core Text to get confused.
        Instead, we should only apply AAT features to AAT fonts and OTF features to OTF fonts.

        Test: Un-marking these tests as failure on High Sierra:
              css3/font-variant-petite-caps-synthesis-coverage.html
              css3/font-variant-small-caps-synthesis-coverage.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontType::FontType):
        (WebCore::preparePlatformFont):
        (WebCore::variationCapabilitiesForFontDescriptor):
        (WebCore::isGXVariableFont): Deleted.

2017-06-28  Chris Dumez  <cdumez@apple.com>

        [ResourceLoadStatistics] Simplify PrevalentResourceTelemetry struct
        https://bugs.webkit.org/show_bug.cgi?id=173953

        Reviewed by Sam Weinig.

        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::sortedPrevalentResourceTelemetry):
        * loader/ResourceLoadStatisticsStore.h:
        (WebCore::PrevalentResourceTelemetry::PrevalentResourceTelemetry): Deleted.

2017-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange
        https://bugs.webkit.org/show_bug.cgi?id=173958

        Reviewed by Simon Fraser.

        The crashed is most likely caused by updateLayersAfterAncestorChange calling [CALayer setPosition]
        with a CGPoint which contains the x coordinate or the y coordinate of NaN.

        Simon and I inpected the code but we couldn't figure out how we get there. Detect this case and bail out.
        Also log the relevant values and debug assert when this condition is hit to help identifying the root cause.

        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):

2017-06-28  Chris Dumez  <cdumez@apple.com>

        ResourceLoadObserver clean up
        https://bugs.webkit.org/show_bug.cgi?id=173955

        Reviewed by Sam Weinig and Brent Fulgham.

        ResourceLoadObserver clean up: Modernize code a bit and get rid of unused variables.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::clearInMemoryStore):
        (WebCore::ResourceLoadObserver::clearInMemoryAndPersistentStore):
        (WebCore::ResourceLoadObserver::shouldLog):
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::logUserInteraction):
        (WebCore::ResourceLoadObserver::setSubframeUnderTopFrameOrigin):
        (WebCore::ResourceLoadObserver::setSubresourceUnderTopFrameOrigin):
        (WebCore::ResourceLoadObserver::setSubresourceUniqueRedirectTo):
        (WebCore::ResourceLoadObserver::fireDataModificationHandler):
        (WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler):
        (WebCore::ResourceLoadObserver::primaryDomain):
        (WebCore::ResourceLoadObserver::statisticsForOrigin):

2017-06-28  Zalan Bujtas  <zalan@apple.com>

        Move RenderEmbeddedObject::isReplacementObscured to HTMLPlugInElement
        https://bugs.webkit.org/show_bug.cgi?id=173802
        <rdar://problem/32884389>

        Reviewed by Simon Fraser.

        Hittesting could potentially destroy "this" renderer so calling it inside RenderEmbeddedObject
        could leave the caller with a stale pointer.
        This patch protects the plugin element from getting destroyed and checks if the renderer got
        deleted during the hittest to avoid nullptr dereference.

        Speculative fix.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isReplacementObscured):
        * html/HTMLPlugInElement.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isReplacementObscured): Deleted.
        * rendering/RenderEmbeddedObject.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isPluginUnavailabilityIndicatorObscured):

2017-06-28  Chris Dumez  <cdumez@apple.com>

        Avoid copying statistics in ResourceLoadStatisticsStore::readDataFromDecoder()
        https://bugs.webkit.org/show_bug.cgi?id=173951

        Reviewed by Ryosuke Niwa.

        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):

2017-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        Safari's Speedometer score massively regresses when accessibility is enabled
        https://bugs.webkit.org/show_bug.cgi?id=173912

        Reviewed by Chris Fleizach.

        The bug was caused by HTMLTextFormControlElement::setInnerTextValue triggering a synchronous layout
        via constructing VisiblePosition when the accessibility tree is present.

        Added AXObjectCache::postTextReplacementNotificationForTextControl which avoids the construction of
        VisiblePosition and other means of triggering a synchronous layout. This patch also fixes a subtle bug
        that HTMLTextFormControlElement was creating TextMarkerData with axID set to that of the text control
        element instead of the root editable element inside its shadow tree even though the typing command uses
        axID of the root editable element. While I couldn't find any user-visible behavioral change from this
        code change, new code is more self-consistent.

        Also added LayoutDisallowedScope which asserts that no synchronous layout happens in setInnerTextValue
        so that we don't introduce a new performance regression like this in the future.

        No new tests. Existing tests in accessibility directory covers this.

        * CMakeLists.txt: Added LayoutDisallowedScope.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postTextReplacementNotificationForTextControl): Added.
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition): Modernized. Returns optional<TextMarkerData>
        instead of taking TextMarkerData as an out-argument, and returning with axID of 0.
        (WebCore::AXObjectCache::textMarkerDataForFirstPositionInTextControl): Added. This specialized version
        constructs TextMarkerData for the first position inside the editable region in a text control without
        triggering a synchronous layout.

        * accessibility/AXObjectCache.h:
        (WebCore::TextMarkerData): Initialize each member automatically.
        (WebCore::AXObjectCache::postTextReplacementNotificationForTextControl):

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl): Added.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (+[WebAccessibilityTextMarker textMarkerWithVisiblePosition:cache:]):

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::addTextMarkerFor): Extracted from textReplacementChangeDictionary. Added a new variant which
        takes a text form control instead.
        (WebCore::textReplacementChangeDictionary): Templatized this function to either take VisiblePosition
        and call textMarkerForVisiblePosition or take HTMLTextFormControlElement and call
        textMarkerForFirstPositionInTextControl.
        (WebCore::postUserInfoForChanges): Extracted from postTextReplacementPlatformNotification.
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification): 
        (WebCore::AXObjectCache::postTextReplacementPlatformNotificationForTextControl): Added.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (textMarkerForVisiblePosition):
        (-[WebAccessibilityObjectWrapper textMarkerForFirstPositionInTextControl:]): Added.

        * dom/Document.cpp:
        (WebCore::Document::updateLayout): Assert that LayoutDisallowedScope is not in the stack frame.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue): Call postTextReplacementNotificationForTextControl
        to avoid triggering a synchronous layout. Also create LayoutDisallowedScope to avoid a similar performance
        regression from being introduced in the future in this function. Finally, made innerText a RefPtr for extra
        safety since we're using it after updating the DOM tree.

        * rendering/LayoutDisallowedScope.cpp: Added.
        * rendering/LayoutDisallowedScope.h: Added.
        (WebCore::LayoutDisallowedScope::LayoutDisallowedScope):
        (WebCore::LayoutDisallowedScope::~LayoutDisallowedScope):
        (WebCore::LayoutDisallowedScope::isLayoutAllowed):

2017-06-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Cannot italicize or bold text rendered with text styles
        https://bugs.webkit.org/show_bug.cgi?id=173634

        Reviewed by Darin Adler.

        r218616 enabled the new cascade list codepath for "system-ui," but didn't do it for the named
        text styles (like "font: -apple-system-tall-body;"). This new codepath is better because it
        correctly specifies weights and italics (using kCTFontWeightTrait and kCTFontSlantTrait) instead
        of using symbolic traits, and because it correctly handles fonts in the Core Text fallback chain.
        This patch migrates the named text styles to this new codepath.

        Test: fast/text/ipad/bold-tall-body-text-style.html

        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParameters):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::isHashTableDeletedValue):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::operator==):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::hash):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParametersHash::hash):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParametersHash::equal):
        (WebCore::SystemFontDatabase::systemFontCascadeList):
        (WebCore::convertArray):
        (WebCore::convertArray):
        (WebCore::makeNeverDestroyed):
        (WebCore::isUIFontTextStyle):
        (WebCore::systemFontParameters):
        (WebCore::FontCascadeDescription::effectiveFamilyCount):
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::hash): Deleted.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::equal): Deleted.
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):

2017-06-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Instrument active pixel memory used by canvases
        https://bugs.webkit.org/show_bug.cgi?id=173087
        <rdar://problem/32719261>

        Reviewed by Joseph Pecoraro.

        Test: inspector/canvas/memory.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setImageBuffer):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::buildObjectForCanvas):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didChangeCanvasMemory):
        (WebCore::InspectorInstrumentation::didChangeCanvasMemoryImpl):

2017-06-28  Alex Christensen  <achristensen@webkit.org>

        Prevent displaying URLs with small capital letters
        https://bugs.webkit.org/show_bug.cgi?id=173949
        <rdar://problem/32952058>

        Reviewed by Brent Fulgham.

        Covered by new API tests.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):

2017-06-28  Youenn Fablet  <youenn@apple.com>

        Support PeerConnectionStates::BundlePolicy::MaxBundle when setting rtc configuration
        https://bugs.webkit.org/show_bug.cgi?id=169389

        Reviewed by Alex Christensen.

        Covered by manual testing (appr.tc and https://youennf.github.io/webrtc-tests/src/content/peerconnection/trickle-ice/).
        Previously, we were creating a libwebrtc peer connection and then setting its configuration.
        libwebrtc does not like the configuration to be changed and may refuse to set the configuration.
        Instead of doing that, we are now creating the libwebrtc peer connection with the provided configuration.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setConfiguration):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::initializeWith):
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration):
        (WebCore::LibWebRTCPeerConnectionBackend::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::createActualPeerConnection):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

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

        Teach ResourceLoadStatistics to recognize changes in the file system
        https://bugs.webkit.org/show_bug.cgi?id=173800
        <rdar://problem/32937842>

        Reviewed by Chris Dumez.

        We want to support the case where multiple UI processes choose to share the same
        statistics file. To support this, update the ResourceLoadStatistics logic to be aware
        that the statistics data file might change underneath it, and to take appropriate
        action when it does.

        * WebCore.xcodeproj/project.pbxproj: Update for new sources.
        * WebCore/CMakeLists.txt: Update for new FileMonitor source file.
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::clearInMemoryAndPersistent): Use the new deletion
        handler for the data file instead of writing out an empty file.
        (WebCore::ResourceLoadStatisticsStore::setDeletePersistentStoreCallback): Added.
        * loader/ResourceLoadStatisticsStore.h:
        * platform/FileMonitor.cpp: Added.
        (WebCore::FileMonitor::create):
        (WebCore::FileMonitor::FileMonitor): Register handlers and begin monitoring file.
        (WebCore::FileMonitor::~FileMonitor): Stop any active file monitoring.
        (WebCore::FileMonitor::startMonitoringPath): Stub implementation.
        (WebCore::FileMonitor::stopMonitoring): Ditto.
        * platform/FileMonitor.h: Added.
        * platform/FileSystem.h: Export files needed by WebKit2. Add support for O_EVTONLY
        Darwin file handles.
        * platform/Logging.h: Add 'ResourceLoadStatistics' category.
        * platform/cocoa/FileMonitorCocoa.mm: Added.
        (WebCore::FileMonitor::startMonitoringPath): Create a new VNODE type dispatch_source
        to receive notifications when the specified file changes.
        (WebCore::FileMonitor::stopMonitoring): Cancel the dispatch_source when we are done
        monitoring the file.
        * platform/posix/FileSystemPOSIX.cpp: Update 'openFile' to understand the O_EVTONLY
        mode of file handles (Darwin-only). 

2017-06-28  Brady Eidson  <beidson@apple.com>

        DocumentLoader should always notify the client if there are pending icon loads when the load is stopped.
        https://bugs.webkit.org/show_bug.cgi?id=173874

        Reviewed by Alex Christensen.

        Covered by API tests.

        Patch started by Carlos Garcia Campos, finished by me.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): Make all of the callbacks for cancelled IconLoaders.
        (WebCore::DocumentLoader::didGetLoadDecisionForIcon): Make the callback even if there's no IconLoader.
        (WebCore::DocumentLoader::finishedLoadingIcon):
        (WebCore::DocumentLoader::notifyFinishedLoadingIcon):
        * loader/DocumentLoader.h:

2017-06-28  Antoine Quint  <graouts@apple.com>

        Volume controls should be hidden when AirPlay is active
        https://bugs.webkit.org/show_bug.cgi?id=173933
        <rdar://problem/33011931>

        Reviewed by Dean Jackson.

        Ensure we don't show any volume controls during AirPlay. We set the mute button's enabled state to "false"
        when AirPlay is active and key off this enabled stated to control the display of all volume-related controls
        throughout the UI.

        Tests: media/modern-media-controls/macos-fullscreen-media-controls/macos-fullscreen-media-controls-volume-controls-hidden-when-mute-button-disabled.html
               media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-top-right-controls-bar-hidden-when-mute-button-disabled.html

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype._addTopRightBarWithMuteButtonToChildren):
        (InlineMediaControls):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.layout):
        * Modules/modern-media-controls/media/airplay-support.js:
        (AirplaySupport.prototype.syncControl):
        (AirplaySupport):

2017-06-28  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive includes from WebCore/css sources
        https://bugs.webkit.org/show_bug.cgi?id=173919

        Reviewed by Simon Fraser.

        No new tests needed.

        * css/CSSCanvasValue.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSContentDistributionValue.cpp:
        * css/CSSCrossfadeValue.cpp:
        * css/CSSCursorImageValue.cpp:
        * css/CSSCustomPropertyValue.cpp:
        * css/CSSDefaultStyleSheets.cpp:
        * css/CSSFilterImageValue.cpp:
        * css/CSSFontFace.cpp:
        * css/CSSFontFaceSet.cpp:
        * css/CSSFontFaceSource.cpp:
        * css/CSSFontFaceSrcValue.cpp:
        * css/CSSFontFeatureValue.cpp:
        * css/CSSFontSelector.cpp:
        * css/CSSFontValue.cpp:
        * css/CSSImageGeneratorValue.cpp:
        * css/CSSImageSetValue.cpp:
        * css/CSSImageValue.cpp:
        * css/CSSImportRule.cpp:
        * css/CSSKeyframesRule.cpp:
        * css/CSSMediaRule.cpp:
        * css/CSSNamedImageValue.cpp:
        * css/CSSPrimitiveValue.cpp:
        * css/CSSProperty.cpp:
        * css/CSSPropertySourceData.cpp:
        * css/CSSReflectValue.cpp:
        * css/CSSRuleList.cpp:
        * css/CSSSegmentedFontFace.cpp:
        * css/CSSSelector.cpp:
        * css/CSSStyleRule.cpp:
        * css/CSSStyleSheet.cpp:
        * css/CSSSupportsRule.cpp:
        * css/CSSToStyleMap.cpp:
        * css/CSSValueList.cpp:
        * css/CSSValuePool.cpp:
        * css/CSSVariableData.cpp:
        * css/ElementRuleCollector.cpp:
        * css/InspectorCSSOMWrappers.cpp:
        * css/MediaList.cpp:
        * css/MediaQueryEvaluator.cpp:
        * css/MediaQueryExpression.cpp:
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/RGBColor.cpp:
        * css/SelectorChecker.cpp:
        * css/StyleProperties.cpp:
        * css/StyleResolver.cpp:
        * css/StyleRule.cpp:
        * css/StyleSheetContents.cpp:
        * css/TransformFunctions.cpp:
        * css/ViewportStyleResolver.cpp:
        * css/WebKitCSSRegionRule.cpp:
        * css/parser/CSSParser.cpp:
        * css/parser/CSSParserFastPaths.cpp:
        * css/parser/CSSParserIdioms.cpp:
        * css/parser/CSSParserSelector.cpp:
        * css/parser/CSSParserToken.cpp:
        * css/parser/CSSPropertyParser.cpp:
        * css/parser/CSSSelectorParser.cpp:
        * css/parser/MediaQueryParser.cpp:

2017-06-28  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-06-28  Antoine Quint  <graouts@apple.com>

        Remove unnecessary `const double` method arguments
        https://bugs.webkit.org/show_bug.cgi?id=173925

        Reviewed by Dean Jackson.

        Addressing post-landing feedback from webkit.org/b/173858.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::formattedStringForDuration):
        * Modules/mediacontrols/MediaControlsHost.h:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsFormattedStringForDuration):
        * rendering/RenderThemeCocoa.h:

2017-06-28  Zalan Bujtas  <zalan@apple.com>

        Unreviewed, rolling out r218373.

        Output is not right

        Reverted changeset:

        "Use WTFLogAlways for debug logging so that it shows up in
        device system logs"
        https://bugs.webkit.org/show_bug.cgi?id=173450
        http://trac.webkit.org/changeset/218373

2017-06-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Some web pages disappear immediately after rendering
        https://bugs.webkit.org/show_bug.cgi?id=173768

        Reviewed by Xabier Rodriguez-Calvar.

        This is happening with websites having a "hidden" class in HTML tag when a media element is added. In the GTK+
        port the media controls CSS contains the following code:

        .hidden {
            display: none !important;
        }

        That causes the whole HTML document to become display: none. That's why we just render a white page, and also
        the reason why it only happens with the GTK+ port and only with some specific websites. We should limit the
        scope of the hidden class to the media control elements.

        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-panel.hidden,):
        (audio::-webkit-media-controls-panel div.mute-box.hidden,):
        (audio::-webkit-media-controls-current-time-display.hidden,):
        (audio::-webkit-media-controls-timeline.hidden,):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button.hidden,):
        (video::-webkit-media-controls-closed-captions-container.hidden):
        (audio::-webkit-media-controls-fullscreen-button.hidden,):
        (.hidden): Deleted.

2017-06-28  Antoine Quint  <graouts@apple.com>

        Media controls volume glyph does not have the correct material
        https://bugs.webkit.org/show_bug.cgi?id=173918
        <rdar://problem/33012697>

        Reviewed by Eric Carlson.

        Test: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-mute-button-in-bottom-or-top-right-controls-bar.html

        All buttons were hosted in a ControlsBar save for the MuteButton, so we now host it in a controls bar as well
        to ensure compositing is similar to all other buttons.

        * Modules/modern-media-controls/controls/inline-media-controls.css:
        (.media-controls.inline > .controls-bar.top-right):
        (.media-controls.inline > button.mute): Deleted.
        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls):
        (InlineMediaControls.prototype.layout):
        (InlineMediaControls.prototype._addTopRightBarWithMuteButtonToChildren):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.handleEvent):

2017-06-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r218799): [GTK][WPE] Critical warning at exit
        https://bugs.webkit.org/show_bug.cgi?id=173907

        Reviewed by Konstantin Tokarev.

        GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

        This is now always happening when closing the MeiniBrowser and it's causing a lot of unit tests to fail. In
        r218799, GRefPtrGtk.h include was removed from PasteboardHelper.h that contains a GRefPtr<GtkTargetList>. The
        targets are destroyed at exit, but now trying to use g_object_unref instead of gtk_target_list_unref(). I've
        found two more cases like this in r218799, that removes GUniquePtrSoup.h from ResourceHandleInternal.h and
        ResourceRequest.h that have GUniquePtr<SoupBuffer> and GUniquePtr<SoupURI>.

        Fixes several GTK+ and WPE unit tests.

        * platform/gtk/PasteboardHelper.h: Bring back GRefPtrGtk.h.
        * platform/network/ResourceHandleInternal.h: Bring back GUniquePtrSoup.h.
        * platform/network/soup/ResourceRequest.h: Ditto.

2017-06-27  Chris Dumez  <cdumez@apple.com>

        [ResourceLoadStatistics] Update minimumTimeBetweeenDataRecordsRemoval to 1 hour instead of 1 minute
        https://bugs.webkit.org/show_bug.cgi?id=173895
        <rdar://problem/32984366>

        Reviewed by Brent Fulgham.

        Update minimumTimeBetweeenDataRecordsRemoval to 1 hour instead of 1 minute to save battery.
        Also port code to modern time types.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::reduceTimeResolution):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::setTimeToLiveUserInteraction):
        (WebCore::ResourceLoadObserver::setTimeToLiveCookiePartitionFree):
        (WebCore::ResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval):
        (WebCore::ResourceLoadObserver::setReducedTimestampResolution):
        (WebCore::ResourceLoadObserver::setGrandfatheringTime):
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.h:
        (WebCore::ResourceLoadStatistics::mostRecentUserInteractionTime):
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::createEncoderFromData):
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):
        (WebCore::shouldPartitionCookies):
        (WebCore::ResourceLoadStatisticsStore::setTimeToLiveUserInteraction):
        (WebCore::ResourceLoadStatisticsStore::setTimeToLiveCookiePartitionFree):
        (WebCore::ResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval):
        (WebCore::ResourceLoadStatisticsStore::setGrandfatheringTime):
        (WebCore::ResourceLoadStatisticsStore::hasHadRecentUserInteraction):
        (WebCore::ResourceLoadStatisticsStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor):
        (WebCore::ResourceLoadStatisticsStore::handleFreshStartWithEmptyOrNoStore):
        (WebCore::ResourceLoadStatisticsStore::shouldRemoveDataRecords):
        (WebCore::ResourceLoadStatisticsStore::dataRecordsBeingRemoved):
        * loader/ResourceLoadStatisticsStore.h:

2017-06-27  Chris Dumez  <cdumez@apple.com>

        Port HysteresisActivity to Seconds type
        https://bugs.webkit.org/show_bug.cgi?id=173902

        Reviewed by Simon Fraser.

        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::HysteresisActivity):
        (WebCore::HysteresisActivity::stop):
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:

2017-06-27  Jeremy Jones  <jeremyj@apple.com>

        MediaPlayerPrivate m_private may not yet be created when setPrivateBrowsingMode is called.
        https://bugs.webkit.org/show_bug.cgi?id=173893
        rdar://problem/32986872
        
        Reviewed by Ryosuke Niwa.

        No new tests because no reproducable case.

        setPrivateBrowsingMode can be called on MediaPlayer before the MediaPlayerPrivate is created.
        The value should only be pushed down the m_private if it has been created.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setPrivateBrowsingMode):

2017-06-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Support dragging out of contenteditable areas without a prior selection
        https://bugs.webkit.org/show_bug.cgi?id=173854
        <rdar://problem/32236827>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Allows elements to be dragged from contenteditable areas for both WebKit1 and WebKit2 iOS. There are two main
        changes in WebCore: move the touch point adjustment code into EventHandler::tryToBeginDataInteractionAtPoint, so
        that the clientPosition specified will be adjusted to an appropriate clickable node if needed. This is necessary
        because UIWebDocumentView and WKContentView no longer send adjusted points to WebCore when requesting drag
        start. See <https://bugs.webkit.org/show_bug.cgi?id=173855> for a followup regarding the globalPosition and
        clientPositions passed in to the MouseEvents when performing a drag or synthetic click.

        Secondly, image elements in Mail's contenteditable area are not draggable unless the heuristic in
        DragController::draggableElement is tweaked to not reject image dragging across the board if the
        loadsImagesAutomatically setting is turned off. Instead, even if images are not automatically loaded, allow the
        image drag to commence if the image renderer already has a cached image.

        Test: DataInteractionTests.DragImageFromContentEditable

        * page/DragController.cpp:
        (WebCore::imageElementIsDraggable):
        (WebCore::DragController::draggableElement):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tryToBeginDataInteractionAtPoint):

2017-06-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Accessibility labels should be formatted using NSDateComponentsFormatter
        https://bugs.webkit.org/show_bug.cgi?id=173858
        <rdar://problem/32643171>

        Reviewed by Dean Jackson.

        We shouldn't be manually trying to create a formatted string for media controls and instead rely
        on NSDateComponentsFormatter to perform this task for us. So we remove the ad-hoc code in the JS
        media controls code and instead add a new MediaControlsHost method to format durations which calls
        into RenderTheme to provide a formatted duration string relevant to the current platform and locale.

        * English.lproj/modern-media-controls-localized-strings.js:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::formattedStringForDuration):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.set inputAccessibleLabel):
        * Modules/modern-media-controls/controls/time-label.js:
        (TimeLabel.prototype.commitProperty):
        * Modules/modern-media-controls/main.js:
        (createControls):
        (formattedStringForDuration):
        (formatTimeToString): Deleted.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsFormattedStringForDuration):
        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::mediaControlsFormattedStringForDuration):

2017-06-27  Eric Carlson  <eric.carlson@apple.com>

        r218647 causes getUserMedia to fail on some machines
        https://bugs.webkit.org/show_bug.cgi?id=173894

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::isFrameRateSupported): Change frame rate epsilon from 0.00001
        to 0.001.

2017-06-27  Antoine Quint  <graouts@apple.com>

        Placard icons act like buttons (can get keyboard focus and shows up in VoiceOver)
        https://bugs.webkit.org/show_bug.cgi?id=173891
        <rdar://problem/33011855>

        Reviewed by Dean Jackson.

        Ensure that we disable buttons inside placards as they're only decorative and should
        not be interactive.

        * Modules/modern-media-controls/controls/placard.js:
        (Placard.):

2017-06-27  Jeremy Jones  <jeremyj@apple.com>

        Disable m_temporarilyAllowingInlinePlaybackAfterFullscreen on pause
        https://bugs.webkit.org/show_bug.cgi?id=173843
        rdar://problem/32982431

        Reviewed by Eric Carlson.

        Test: media/media-fullscreen-pause-inline.html

        Some pages may not have a fullscreen button, so disabled m_temporarilyAllowingInlinePlaybackAfterFullscreen on pause.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pause):

2017-06-27  Chris Dumez  <cdumez@apple.com>

        [iOS] Avoid taking / releasing process assertions too quickly due to database activity
        https://bugs.webkit.org/show_bug.cgi?id=173879
        <rdar://problem/32412701>

        Reviewed by Antti Koivisto.

        Add HysteresisActivity to WebSQLiteDatabaseTrackerClient to avoid taking / releasing
        process assertion too quickly due to database activity.

        * platform/ios/WebSQLiteDatabaseTrackerClient.h:
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        (WebCore::WebSQLiteDatabaseTrackerClient::WebSQLiteDatabaseTrackerClient):
        (WebCore::WebSQLiteDatabaseTrackerClient::willBeginFirstTransaction):
        (WebCore::WebSQLiteDatabaseTrackerClient::didFinishLastTransaction):
        (WebCore::WebSQLiteDatabaseTrackerClient::hysteresisUpdated):

2017-06-27  Youenn Fablet  <youenn@apple.com>

        Using public logging for WebRTC release logging
        https://bugs.webkit.org/show_bug.cgi?id=173881

        Reviewed by Eric Carlson.

        No change of behavior.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        (WebCore::PeerConnectionBackend::newICECandidate):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):

2017-06-27  Don Olmstead  <don.olmstead@sony.com>

        [PAL] Add symbol export macros for PAL
        https://bugs.webkit.org/show_bug.cgi?id=171519

        Reviewed by Konstantin Tokarev.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * config.h:
        * platform/PlatformExportMacros.h:

2017-06-27  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add telemetry
        https://bugs.webkit.org/show_bug.cgi?id=173499
        <rdar://problem/32826094>

        Reviewed by Brent Fulgham.

        Test: http/tests/loading/resourceLoadStatistics/telemetry-generation.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::fireTelemetryHandler):
            Test infrastructure.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::setFireTelemetryCallback):
        (WebCore::ResourceLoadStatisticsStore::fireTelemetryHandler):
            Test infrastructure.
        (WebCore::ResourceLoadStatisticsStore::sortedPrevalentResourceTelemetry):
            Convenience function for telemetry.
        * loader/ResourceLoadStatisticsStore.h:
            Added struct WebCore::PrevalentResourceTelemetry.
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::resourceLoadStatisticsTelemetryKey):
            Added.
        * page/DiagnosticLoggingKeys.h:

2017-06-27  Ting-Wei Lan  <lantw44@gmail.com>

        Add missing includes to fix compilation error on FreeBSD
        https://bugs.webkit.org/show_bug.cgi?id=172919

        Reviewed by Mark Lam.

        No new tests needed.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        * platform/audio/ReverbAccumulationBuffer.cpp:

2017-06-27  Zalan Bujtas  <zalan@apple.com>

        Add RenderEmbeddedObject::getReplacementTextGeometry helper.
        https://bugs.webkit.org/show_bug.cgi?id=173847

        Reviewed by Simon Fraser.

        ...and remove getReplacementTextGeometry's redundant return value. 

        No change in functionality.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        (WebCore::RenderEmbeddedObject::unavailablePluginIndicatorBounds):
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        * rendering/RenderEmbeddedObject.h:

2017-06-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor drag start codepaths to plumb a DragItem to client layers
        https://bugs.webkit.org/show_bug.cgi?id=173832
        Work towards <rdar://problem/32236827>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Refactor drag start logic in WebCore to set up a DragItem and propagate it to WebDragClient. No change in behavior.

        * loader/EmptyClients.cpp:
        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):

        Refactor to pass along a DragItem. Also, remove unused drag image anchor computation.

        * page/DragController.h:
        * platform/DragImage.h:
        * platform/DragItem.h:

        Add additional information needed to begin a drag on iOS.

        (WebCore::DragItem::encode):
        (WebCore::DragItem::decode):

        Add IPC serialization/deserialization support for DragItem.

        * platform/PasteboardWriterData.cpp:
        (WebCore::PasteboardWriterData::isEmpty):
        * platform/PasteboardWriterData.h:

2017-06-27  Frederic Wang  <fwang@igalia.com>

        Some tests to verify forbidden frame navigation time out
        https://bugs.webkit.org/show_bug.cgi?id=173657

        Reviewed by Chris Dumez.

        Currently some tests try and perform a forbidden frame navigation and verify the
        corresponding console error. However, WebKit does not raise any exception for such error so
        the tests have to wait until the timeout limit to complete, which makes execution slow.
        This patch modifies the setters of window.location for which such error may happen in order
        to raise an exception so the tests behave as expected.

        No new tests, already covered by existing tests.

        * page/Location.cpp: Adjust Location::setLocation to return a security exception and pass it
        to the callers.
        (WebCore::Location::setHref): Adjust function to possibly return an exception.
        (WebCore::Location::setProtocol): Ditto.
        (WebCore::Location::setHost): Ditto.
        (WebCore::Location::setHostname): Ditto.
        (WebCore::Location::setPort): Ditto.
        (WebCore::Location::setPathname): Ditto.
        (WebCore::Location::setSearch): Ditto.
        (WebCore::Location::setHash): Ditto.
        (WebCore::Location::assign): Ditto.
        (WebCore::Location::setLocation): FrameLoader::findFrameForNavigation is really only used
        to verify whether navigating m_frame is permitted so it is more simple and clearer to do it
        directly. When navigation is not permitted, this function now raises a security exception.
        * page/Location.h: Modify some setters to return an ExceptionOr<void>.
        * page/Location.idl: Allow some setters to raise an exception.

2017-06-26  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] Layout Test webrtc/video.html issues "stack smashing detected"
        https://bugs.webkit.org/show_bug.cgi?id=173862

        Reviewed by Carlos Garcia Campos.

        Tests: webrtc/video.html

        Passing a bool variable to g_object_get causes out-of-bound write.
        gboolean should be used, which is 4 bytes while bool is one byte.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::muted): Use gboolean instead of bool.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp:
        (WebCore::MediaPlayerPrivateGStreamerOwr::trackEnded): Ditto.

2017-06-26  Chris Dumez  <cdumez@apple.com>

        WebsiteDataStore::fetchDataForTopPrivatelyControlledDomains() is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=173850

        Reviewed by Ryosuke Niwa.

        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::updateStatisticsForRemovedDataRecords):
        * loader/ResourceLoadStatisticsStore.h:

2017-06-26  Antti Koivisto  <antti@apple.com>

        REGRESSION (AsyncImageDecoding): A tab with the WWDC keynote paused is killed for using excessive power (Image thrashing)
        https://bugs.webkit.org/show_bug.cgi?id=173804
        <rdar://problem/32623745>

        Reviewed by Simon Fraser.

        When under memory pressure MemoryCache::singleton().pruneLiveResources(true) is called inFrameView::didPaintContents()
        after top level paint. We end up decoding and pruning bitmaps repeatedly for each tile, which is not great.

        Situation gets worse with async decoding. Painting now doesn’t actually decode the image, it just starts the decoding.
        When it completes we trigger another paint to get the bits to the tiles. The paint for the first tile then calls
        pruneLiveResources and loses the bitmap and the second tile triggers another round of async decoding. We have code
        that prevents pruning of visible images but non-visible images in tiling area can hit this bug easily.

        Test: fast/images/low-memory-decode.html

        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):

            Eliminate synchronous pruning during painting. This is an obsolete mechanism from early iOS times.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):
        (WebCore::BitmapImage::decodeCountForTesting):

            Testing support.

        * platform/graphics/BitmapImage.h:
        * testing/Internals.cpp:
        (WebCore::Internals::imageDecodeCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-26  Chris Dumez  <cdumez@apple.com>

        ImageFrameCache::startAsyncDecodingQueue() unsafely passes Strings across threads
        https://bugs.webkit.org/show_bug.cgi?id=173842

        Reviewed by Simon Fraser.

        The URL string was passed across thread without isolated copy.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::startAsyncDecodingQueue):

2017-06-26  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r218783.

        Causing accessibility/mac/setting-attributes-is-
        asynchronous.html to crash consistently on mac-wk2 Debug

        Reverted changeset:

        "AX: Cannot call setValue() on contenteditable or ARIA text
        controls"
        https://bugs.webkit.org/show_bug.cgi?id=173520
        http://trac.webkit.org/changeset/218783

2017-06-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Drop Thread::create(obsolete things) API since we can use lambda
        https://bugs.webkit.org/show_bug.cgi?id=173825

        Reviewed by Saam Barati.

        No behavior change.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::IDBServer):
        (WebCore::IDBServer::IDBServer::databaseThreadEntry): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::threadEntry): Deleted.
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::startRendering):
        (WebCore::OfflineAudioDestinationNode::offlineRenderEntry): Deleted.
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThreadStart): Deleted.
        * Modules/webdatabase/DatabaseThread.h:
        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::iconDatabaseSyncThreadStart): Deleted.
        * loader/icon/IconDatabase.h:
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::createThreadIfNeeded):
        (WebCore::ResourceUsageThread::threadCallback): Deleted.
        * page/ResourceUsageThread.h:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::threadCallback): Deleted.
        (WebCore::ScrollingThread::threadBody): Deleted.
        * page/scrolling/ScrollingThread.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::loadAsynchronously):
        (WebCore::databaseLoaderEntry): Deleted.
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::backgroundThreadEntry): Deleted.
        * platform/audio/ReverbConvolver.h:
        (WebCore::ReverbConvolver::useBackgroundThreads):
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoop):
        (WebCore::runLoaderThread): Deleted.
        * platform/network/curl/CurlManager.cpp:
        (WebCore::CurlManager::startThreadIfNeeded):
        (WebCore::CurlManager::workerThread):
        * platform/network/curl/CurlManager.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThreadStart): Deleted.
        * workers/WorkerThread.h:

2017-06-26  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Add support for aria-details and aria-errormessage
        https://bugs.webkit.org/show_bug.cgi?id=172588

        Reviewed by Chris Fleizach.

        Add methods to retrieve elements referenced by or referencing the new
        aria-details and aria-errormessage attributes. Include aria-details and
        aria-errormessage in AccessibilityObject::supportsARIAAttributes() to ensure
        elements with these attributes will be included in the accessibility tree.

        New test cases added to accessibility/gtk/relation-types.html.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAAttributes):
        (WebCore::AccessibilityObject::ariaDetailsElements):
        (WebCore::AccessibilityObject::ariaDetailsReferencingElements):
        (WebCore::AccessibilityObject::ariaErrorMessageElements):
        (WebCore::AccessibilityObject::ariaErrorMessageReferencingElements):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):
        * html/HTMLAttributeNames.in:

2017-06-26  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive headers from WebCore/{Modules,animation,crypto,domjit}
        https://bugs.webkit.org/show_bug.cgi?id=173824

        Reviewed by Darin Adler.

        No new tests needed.

        * Modules/credentials/CredentialCreationOptions.h:
        * Modules/credentials/PasswordCredential.h:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/gamepad/GamepadManager.h:
        * Modules/geolocation/Coordinates.h:
        * Modules/geolocation/Geoposition.h:
        * Modules/indexeddb/IDBActiveDOMObject.h:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Modules/indexeddb/shared/InProcessIDBServer.h:
        * Modules/indexeddb/shared/IndexKey.h:
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediasession/WebMediaSessionManager.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediasource/VideoPlaybackQuality.h:
        * Modules/notifications/Notification.h:
        * Modules/quota/WorkerNavigatorStorageQuota.h:
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/ConvolverNode.cpp:
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionStateMachine.h:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocketDeflater.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * animation/AnimationEffect.h:
        * crypto/CryptoKeyPair.h:
        * crypto/parameters/CryptoAlgorithmEcdhKeyDeriveParams.h:
        * dom/ScriptExecutionContext.h:
        * domjit/DOMJITHelpers.h:
        * domjit/DOMJITIDLConvert.h:
        * domjit/DOMJITIDLType.h:

2017-06-26  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK] Unreviewed, added missing includes to fix debug build

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

2017-06-25  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive headers from WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=173822

        Reviewed by Tim Horton.

        No new tests needed.

        * html/ColorInputType.h:
        * html/MediaElementSession.h:
        * page/SecurityOriginData.cpp:
        * platform/CalculationValue.cpp:
        * platform/CalculationValue.h:
        * platform/ColorChooserClient.h:
        * platform/ContentType.h:
        * platform/LogMacros.h:
        * platform/PODRedBlackTree.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/PopupMenuStyle.h:
        * platform/ScrollAnimator.h:
        * platform/Theme.h:
        * platform/ThreadGlobalData.h:
        * platform/animation/AnimationList.h:
        * platform/audio/AudioArray.h:
        * platform/audio/AudioChannel.h:
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/HRTFElevation.h:
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/PlatformMediaSession.h:
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.cpp:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/FloatSizeHash.h:
        * platform/graphics/Font.h:
        * platform/graphics/FontMetrics.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/FontRanges.h:
        * platform/graphics/FontTaggedSettings.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/ImageFrame.h:
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntRectHash.h:
        * platform/graphics/IntSizeHash.h:
        * platform/graphics/MediaPlaybackTargetClient.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/PlatformTimeRanges.h:
        * platform/graphics/TextRun.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/harfbuzz/HarfBuzzShaper.h:
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        * platform/graphics/texmap/TextureMapperTile.h:
        * platform/graphics/texmap/coordinated/Tile.h:
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:
        * platform/graphics/transforms/TransformState.h:
        * platform/gtk/PasteboardHelper.h:
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/image-decoders/ImageDecoder.h:
        * platform/network/BlobData.h:
        * platform/network/BlobDataFileReference.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/SocketStreamHandleClient.h:
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SoupNetworkSession.h:
        * platform/sql/SQLiteFileSystem.h:
        * platform/text/LocaleICU.h:

2017-06-25  Youenn Fablet  <youenn@apple.com>

        Remove use of mock webrtc backend factory at injected bundle reset time
        https://bugs.webkit.org/show_bug.cgi?id=173817

        Reviewed by Darin Adler.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Resetting the peer connection backend.
        * testing/MockLibWebRTCPeerConnection.cpp: Doing some clean-up
        (WebCore::useRealRTCPeerConnectionFactory):
        (WebCore::MockLibWebRTCPeerConnectionFactory::MockLibWebRTCPeerConnectionFactory):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreatePeerConnection):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreateVideoTrack):
        (WebCore::MockLibWebRTCPeerConnectionFactory::CreateAudioTrack):
        * testing/MockLibWebRTCPeerConnection.h:

2017-06-25  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive headers from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=173812

        Reviewed by Darin Adler.

        No new tests needed.

        * Modules/indexeddb/IDBObjectStore.cpp:
        * bindings/js/JSDOMPromiseDeferred.h:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/ReadableStreamDefaultController.cpp:
        * bindings/js/ScriptGlobalObject.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * bridge/NP_jsobject.cpp:
        * dom/ScriptExecutionContext.cpp:
        * html/HTMLPlugInImageElement.cpp:

2017-06-25  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive headers from WebCore/{rendering,style,svg}
        https://bugs.webkit.org/show_bug.cgi?id=173773

        Reviewed by Darin Adler.

        No new tests needed.

        * css/StyleBuilderConverter.h:
        * editing/TextIterator.cpp:
        * rendering/CounterNode.h:
        * rendering/FlexibleBoxAlgorithm.h:
        * rendering/HitTestLocation.h:
        * rendering/HitTestResult.h:
        * rendering/HitTestingTransformState.h:
        * rendering/OrderIterator.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGeometryMap.h:
        * rendering/RenderListItem.h:
        * rendering/RenderMediaControlElements.cpp:
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMediaControls.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnSet.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.cpp:
        * rendering/RenderRegionSet.h:
        * rendering/RenderTheme.h:
        * rendering/RenderVTTCue.cpp:
        * rendering/RenderVTTCue.h:
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.h:
        * rendering/line/BreakingContext.h:
        * rendering/line/LineBreaker.h:
        * rendering/mathml/MathMLStyle.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/shapes/RectangleShape.h:
        * rendering/style/BasicShapes.h:
        * rendering/style/BorderData.h:
        * rendering/style/CounterDirectives.h:
        * rendering/style/GridArea.h:
        * rendering/style/KeyframeList.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/ShapeValue.h:
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleMultiColData.h:
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/style/WillChangeData.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextChunk.cpp:
        * rendering/svg/SVGTextChunk.h:
        * rendering/svg/SVGTextChunkBuilder.cpp:
        * rendering/svg/SVGTextLayoutEngine.cpp:
        * rendering/svg/SVGTextLayoutEngineSpacing.h:
        * style/RenderTreePosition.cpp:
        * style/RenderTreePosition.h:
        * style/RenderTreeUpdater.h:
        * style/StyleFontSizeFunctions.h:
        * style/StyleInvalidator.h:
        * style/StyleResolveForDocument.h:
        * style/StyleScope.h:
        * style/StyleTreeResolver.cpp:
        * style/StyleTreeResolver.h:
        * style/StyleUpdate.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGParserUtilities.h:
        * svg/SVGPathByteStream.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPolyElement.cpp:
        * svg/SVGSVGElement.cpp:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGUseElement.cpp:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/filters/SVGFilter.h:

2017-06-25  Antoine Quint  <graouts@apple.com>

        Remove rAf suspension logging
        https://bugs.webkit.org/show_bug.cgi?id=173821

        Reviewed by Tim Horton.

        Now that webkit.org/b/173628 is fixed, we can remove the logging code we added.

        * dom/Document.cpp:
        (WebCore::Document::requestAnimationFrame):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::suspend):
        (WebCore::ScriptedAnimationController::resume):
        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):
        (WebCore::Page::resumeScriptedAnimations):
        (WebCore::Page::setIsVisibleInternal):
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::MacApplication::isDumpRenderTree): Deleted.

2017-06-24  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add complete support for stringifier
        https://bugs.webkit.org/show_bug.cgi?id=173724

        Reviewed by Darin Adler.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddStringifierOperationIfNeeded):
        Update AddStringifierOperationIfNeeded to support stringifier on operations and be more
        strict about the allowed types. Also copies over all extended attributes to the synthetic
        operation.

        * bindings/scripts/IDLParser.pm:
        (parseInterfaceMember):
        (parseOperationOrReadWriteAttributeOrMaplike):
        (parseReadOnlyMember):
        (parseStringifier):
        (parseStaticMember):
        (parseAttributeOrOperationForStringifierOrStatic):
        (parseReadWriteAttribute):
        (parseAttributeRest):
        (parseOperation):
        (parseSpecialOperation):
        (parseMapLikeProperties):
        (parseOperationRest):
        (parseAttributeOrOperationOrIterator): Deleted.
        (parseQualifier): Deleted.
        (parseAttributeOrOperationRest): Deleted.
        (parseAttribute): Deleted.
        (parseOperationOrIterator): Deleted.
        - Update parser to more closely resemble the WebIDL grammar, splitting out parseStringifier and
          parseStaticMember into their own subroutines. 
        - Move those and parseSerializer, parseStringifier, parseStaticMember, parseIterableRest and a split out
          parseReadOnlyMembers up into parseInterfaceMember to make it clearer that they are top level members
          and match the grammar.
        - Rename parseAttributeOrOperationOrIterator to parseOperationOrReadWriteAttributeOrMaplike to match the
          grammar language and make it clear what it does.
        - Add parseAttributeOrOperationForStringifierOrStatic which contains most of the logic for parsing stringifiers
          and static members, which have almost identical grammars.
        - Remove creator special which no longer exists in the spec.

        * css/DOMMatrixReadOnly.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/Range.idl:
        * html/URLSearchParams.idl:
        Fix FIXMEs by switching to use stringifier.

        * bindings/scripts/test/JS/JSTestStringifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestStringifier.h: Added.
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp: Added.
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h: Added.
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp: Added.
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.h: Added.
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp: Added.
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h: Added.
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp: Added.
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h: Added.
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp: Added.
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h: Added.
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp: Added.
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h: Added.
        * bindings/scripts/test/TestStringifier.idl: Added.
        * bindings/scripts/test/TestStringifierAnonymousOperation.idl: Added.
        * bindings/scripts/test/TestStringifierNamedOperation.idl: Added.
        * bindings/scripts/test/TestStringifierOperationImplementedAs.idl: Added.
        * bindings/scripts/test/TestStringifierOperationNamedToString.idl: Added.
        * bindings/scripts/test/TestStringifierReadOnlyAttribute.idl: Added.
        * bindings/scripts/test/TestStringifierReadWriteAttribute.idl: Added.
        Add new tests.

2017-06-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Cannot call setValue() on contenteditable or ARIA text controls
        https://bugs.webkit.org/show_bug.cgi?id=173520

        Reviewed by Ryosuke Niwa.

        Add support for changing the value of a contenteditable and any other aria text control in setValue().
 
        Test: accessibility/mac/set-value-editable-types.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):

2017-06-23  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix an internal build after r218755.

        * bindings/js/JSMainThreadExecStateInstrumentation.h:

2017-06-23  Chris Dumez  <cdumez@apple.com>

        Add release assertion to make sure callbackIdentifier is not 0 in DocumentLoader::finishedLoadingIcon()
        https://bugs.webkit.org/show_bug.cgi?id=173792

        Reviewed by Ryosuke Niwa.

        Add release assertion to make sure callbackIdentifier is not 0 in DocumentLoader::finishedLoadingIcon()
        as this could cause HashTable corruption on WebPageProxy side.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoadingIcon):

2017-06-23  Youenn Fablet  <youenn@apple.com>

        webrtc::WebRtcSession is not handling correctly its state when setLocalDescription fails and is called again
        https://bugs.webkit.org/show_bug.cgi?id=173783

        Reviewed by Alex Christensen.

        Test: webrtc/libwebrtc/setLocalDescriptionCrash.html

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doSetLocalDescription): Fail early if there is no pending remote description and description is for an answer.

2017-06-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream macOS] enumerateDevices should only return valid audio capture devices
        https://bugs.webkit.org/show_bug.cgi?id=173790
        <rdar://problem/32260334>

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::isValidCaptureDevice): A valid device has a name and is not an aggregate device
        created by VPIO.
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):

2017-06-23  Jer Noble  <jer.noble@apple.com>

        [WK2] Support -[WebAVPlayerController setMuted:]
        https://bugs.webkit.org/show_bug.cgi?id=173777

        Reviewed by Eric Carlson.

        Have -[WebAVPlayerController setMuted:] pass the request to its delegate (the model)
        rather than just storing the value.

        * platform/cocoa/WebPlaybackSessionModel.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::toggleMuted):
        (WebCore::WebPlaybackSessionModelMediaElement::setMuted):
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController isMuted]):
        (-[WebAVPlayerController setMuted:]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::setMuted):

2017-06-23  Frederic Wang  <fwang@igalia.com>

        Make RenderLayer::handleTouchEvent use usesAcceleratedScrolling()
        https://bugs.webkit.org/show_bug.cgi?id=173763

        Reviewed by Simon Fraser.

        No new tests, behavior is unchanged.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::handleTouchEvent): Call usesAcceleratedScrolling() instead of
        hasTouchScrollableOverflow() for clarity.

2017-06-23  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive headers from WebCore/{bindings,css,dom}
        https://bugs.webkit.org/show_bug.cgi?id=173766

        Reviewed by Simon Fraser.

        No new tests needed.

        * ForwardingHeaders/runtime/ThrowScope.h: Added.
        * Modules/plugins/QuickTimePluginReplacement.mm:
        * bindings/js/CachedScriptSourceProvider.h:
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMConstructorNotConstructable.h:
        * bindings/js/JSDOMConvertBase.h:
        * bindings/js/JSDOMConvertBufferSource.h:
        * bindings/js/JSDOMConvertInterface.h:
        * bindings/js/JSDOMConvertStrings.h:
        * bindings/js/JSDOMConvertUnion.h:
        * bindings/js/JSDOMConvertVariadic.h:
        * bindings/js/JSDOMConvertWebGL.h:
        * bindings/js/JSDOMExceptionHandling.h:
        * bindings/js/JSDOMIterator.h:
        * bindings/js/JSDOMMapLike.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSDOMWindowProperties.h:
        * bindings/js/JSDOMWrapperCache.h:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSMainThreadExecStateInstrumentation.h:
        * bindings/js/JSMediaListCustom.h:
        * bindings/js/JSNodeCustom.h:
        * bindings/js/JSNodeListCustom.h:
        * bindings/js/JSVideoTrackListCustom.cpp:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptSourceCode.h:
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WebCoreJSClientData.h:
        * css/CSSFontFeatureValue.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSStyleSheet.h:
        * css/CSSValue.h:
        * css/StyleBuilderCustom.h:
        * dom/ContainerNodeAlgorithms.h:
        * dom/DataTransfer.h:
        * dom/Node.h:
        * dom/NodeRareData.h:
        * dom/Position.h:
        * dom/RenderedDocumentMarker.h:

2017-06-23  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        Fix broken WinCairo build

        [Curl] Extract CurlDownloadManager as shared background task handler
        https://bugs.webkit.org/show_bug.cgi?id=173557

        Reviewed by Joseph Pecoraro.

        * platform/network/curl/CurlManager.h:

2017-06-23  Chris Dumez  <cdumez@apple.com>

        [iOS] Potential crash under WebCore::notifyLowPowerModeChanged(WebCore::LowPowerModeNotifier*, bool)
        https://bugs.webkit.org/show_bug.cgi?id=173755
        <rdar://problem/32940942>

        Reviewed by Mark Lam.

        The crash was happening because the WebLowPowerModeObserver would dispatch
        a lambda to the main thread but the LowPowerModeNotifier object could be
        dead by the time we get to the main thread.

        To address the issue, keep a strong ref to the WebLowPowerModeObserver in
        the lambda we dispatch to the main thread to make sure it stays alive until
        we execute the lambda. In the LowPowerModeNotifier destructor, we now reset
        the WebLowPowerModeObserver's notifier pointer to nil and I added a null
        check for this notifier in the lambda.

        * platform/LowPowerModeNotifier.cpp:
        (WebCore::LowPowerModeNotifier::~LowPowerModeNotifier):
        * platform/LowPowerModeNotifier.h:
        * platform/ios/LowPowerModeNotifierIOS.mm:
        (-[WebLowPowerModeObserver initWithNotifier:]):
        (-[WebLowPowerModeObserver _didReceiveLowPowerModeChange]):
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::~LowPowerModeNotifier):
        (WebCore::notifyLowPowerModeChanged):

2017-06-23  Alex Christensen  <achristensen@webkit.org>

        Add SPI to WKURLSchemeTask for redirection
        https://bugs.webkit.org/show_bug.cgi?id=173730

        Reviewed by Brady Eidson.

        * platform/network/CacheValidation.cpp:
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        Asserting that redirects are always http/https URLs is no longer valid.
        If there's a custom scheme redirect, give it no freshness lifetime in the cache.

2017-06-23  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive headers from WebCore/{editing,fileapi,history,html,loader,page}
        https://bugs.webkit.org/show_bug.cgi?id=173769

        Reviewed by Simon Fraser.

        No new tests needed.

        * css/CSSFontFaceSource.cpp:
        * editing/DictationCommand.cpp:
        * editing/Editor.h:
        * editing/VisiblePosition.h:
        * editing/VisibleUnits.h:
        * fileapi/BlobBuilder.h:
        * history/PageCache.h:
        * html/DOMURL.h:
        * html/HTMLCollection.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInImageElement.cpp:
        * html/StepRange.h:
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLElementStack.h:
        * html/parser/HTMLInputStream.h:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControls.cpp:
        * html/shadow/MediaControls.h:
        * html/track/TrackListBase.h:
        * html/track/VTTCue.h:
        * html/track/WebVTTParser.cpp:
        * html/track/WebVTTParser.h:
        * loader/CrossOriginPreflightChecker.cpp:
        * loader/DocumentThreadableLoader.cpp:
        * loader/FrameLoaderClient.h:
        * loader/LinkPreloadResourceClients.h:
        * loader/LoadTiming.h:
        * loader/ThreadableLoaderClientWrapper.h:
        * loader/WorkerThreadableLoader.h:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedTextTrack.h:
        * loader/icon/IconLoader.cpp:
        * page/AlternativeTextClient.h:
        * page/CaptionUserPreferences.cpp:
        * page/CaptionUserPreferences.h:
        * page/ContextMenuClient.h:
        * page/MainFrame.h:
        * page/Page.h:
        * page/PageGroup.h:
        * page/PerformanceEntry.h:
        * page/PerformanceResourceTiming.h:
        * page/ResourceUsageOverlay.cpp:
        * page/ResourceUsageOverlay.h:
        * page/UserContentController.h:
        * page/UserContentProvider.h:
        * page/animation/AnimationBase.h:
        * page/animation/CSSPropertyAnimation.h:
        * page/animation/CompositeAnimation.h:
        * page/scrolling/ScrollingCoordinator.h:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2017-06-23  Chris Dumez  <cdumez@apple.com>

        [mac-wk1] requestAnimationFrame callbacks may not get serviced
        https://bugs.webkit.org/show_bug.cgi?id=173628

        Reviewed by Simon Fraser.

        Page::setIsVisibleInternal() was firing the 'visibilitychange' event
        synchronously while in the middle of updating its visibility/activity
        state. This allowed the JavaScript to re-enter the method by calling
        testRunner.setPageVisibility() / resetPageVisiblity() and we would
        end up in an inconsistent state.

        No new tests, extended existing test.

        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        Do no fire the visibilitychange event synchronously as we are in the
        middle of updating the page's activity state. Instead fire the
        event asynchronously.

        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):
        Move the calling of Document::visibilityStateChanged() until after we're
        done updating the page's visibility state.

        * testing/Internals.cpp:
        (WebCore::Internals::scriptedAnimationsAreSuspended):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add test infrastructure to check if scripted animations are suspended.

2017-06-23  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Respond to AudioSession interruption and resume
        https://bugs.webkit.org/show_bug.cgi?id=173718
        <rdar://problem/32925263>

        Reviewed by Youenn Fablet.

        Tested manually.

        * WebCore.xcodeproj/project.pbxproj: Add CoreAudioCaptureSourceIOS.mm/.h

        * platform/mediastream/RealtimeMediaSource.h: Make createWeakPtr protected so derived classes
        can use it.

        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.h: Added.
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm: Added.
        (-[WebCoreAudioCaptureSourceIOSListener initWithCallback:]):
        (-[WebCoreAudioCaptureSourceIOSListener invalidate]):
        (-[WebCoreAudioCaptureSourceIOSListener handleInterruption:]):
        (-[WebCoreAudioCaptureSourceIOSListener sessionMediaServicesWereReset:]):
        (WebCore::CoreAudioCaptureSourceIOS::CoreAudioCaptureSourceIOS):
        (WebCore::CoreAudioCaptureSourceIOS::~CoreAudioCaptureSourceIOS):

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::suspended): 
        (WebCore::CoreAudioSharedUnit::setupAudioUnit): Clear m_suspended.
        (WebCore::CoreAudioSharedUnit::suspend): Don't clear sources or uninitialize the audio unit,
        suspend is temporary. Set m_suspended.
        (WebCore::CoreAudioSharedUnit::resume): New, restart the audio unit.
        (WebCore::CoreAudioCaptureSource::create): Create the correct object.
        (WebCore::CoreAudioCaptureSource::scheduleReconfiguration): Dispatch to main thread if necessary.
        (WebCore::CoreAudioCaptureSource::beginInterruption): New, suspend from main thread.
        (WebCore::CoreAudioCaptureSource::endInterruption): New, resume/reconfigure from main thread.
        (WebCore::CoreAudioCaptureSource::interrupted):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2017-06-23  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Drop the AES-CFB support
        https://bugs.webkit.org/show_bug.cgi?id=173547

        Reviewed by Jiewen Tan.

        No new tests -- relevant test baselines are updated.

        Stop registering the AES-CFB algorithm as something that's supported by
        the libgcrypt implementation. This algorithm was previously included in
        the Web Crypto API specification, but has since been dropped from it.

        Conveniently, libgcrypt only recently gained support for the CFB8 AES
        cipher mode that's required by the specification, meaning we could only
        support this algorithm with future releases of the libgcrypt library.

        * crypto/gcrypt/CryptoAlgorithmRegistryGCrypt.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):

2017-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Enable PUBLIC_SUFFIX_LIST
        https://bugs.webkit.org/show_bug.cgi?id=173758

        Reviewed by Žan Doberšek.

        * PlatformWPE.cmake: Add PublicSuffixSoup.cpp to the build.

2017-06-22  Antti Koivisto  <antti@apple.com>

        REGRESSION(r217695): Offscreen/overflowed items not being rendered while translating in-frame
        https://bugs.webkit.org/show_bug.cgi?id=173732

        Reviewed by Simon Fraser.

        If an accelerated animation starts completely outside the view we fail to create backing for it
        when it moves into view.

        Fix by computing the full extent rect of the animation when it starts and doing the viewport overlap
        testing with that.

        Test: compositing/backing/transform-transition-from-outside-view.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::animationExtent):
        (WebCore::GraphicsLayer::setAnimationExtent):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect):

            Return the current animation transformation matrix so we can use it elsewhere without recomputing.

        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):

            If we have animation extent use it instead of bounds for visibility testing.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):

            Track if theres is a visible ancestor layer with a transition animation.

        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateCoverage):

            For simplicity create backing for all sublayers of a visible transform animated layer.

        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::VisibleAndCoverageRects::VisibleAndCoverageRects): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

            Pass the animation extent (including descendants) to GraphicsLayer.

2017-06-22  Chris Dumez  <cdumez@apple.com>

        ResourceLoadStatisticsStore should be ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=173753
        <rdar://problem/32939326>

        Reviewed by Andreas Kling.

        ResourceLoadStatisticsStore should be ThreadSafeRefCounted as it is ref'd/deref'd
        from different threads.

        * loader/ResourceLoadStatisticsStore.h:

2017-06-22  Myles C. Maxfield  <mmaxfield@apple.com>

        @font-face rules with invalid primary fonts never download their secondary fonts
        https://bugs.webkit.org/show_bug.cgi?id=173138
        <rdar://problem/32554450>

        Reviewed by Simon Fraser.

        We have logic in CSSFontAccessor::font() which disallows downloading a CSSFontFace if that CSSFontFace
        is already in the Succeeded state. However, it was possible for a succeeded CSSFontFace to still fail
        to create a font. In this situation, we wouldn't be able to use the downloaded font, and we wouldn't
        try to download the next item in the src: list because the CSSFontFace is succeeded.

        This patch strengthens the meaning of the Succeeded state. Previously, it just meant that the bytes
        in the file were downloaded successfully. This patch extends this to also mean that the bytes in the
        file can be successfully interpreted as a font. This way, the CSSFontFace in the example above won't be
        set to the Succeeded state, so we will continue follow the src: list and download the secondary fonts.

        This has an added benefit that the CSS Font Loading API's promises will be called more appropriately.
        The transition to the Succeeded state will trigger a resolve of the promise. Now, these promises will
        only be resolved if the fonts are actually parsed and understood by our text system.

        Test: fast/text/font-fallback-invalid-load.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::fontLoaded): Move to the failed state if we can't understand the font
        data. This is the crux of this patch.
        (WebCore::CSSFontFaceSource::font): This function should only be called if we are in the Succeeded
        state, which means now we know we should always be able to understand the bytes of the file. Therefore,
        we can change some if statements into ASSERT()s.
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::createFont): Ditto.
        (WebCore::CachedSVGFont::ensureCustomFontData): Similarly to CSSFontFaceSource::fontLoaded(), this
        adds another check to our criteria for transitioning into the Succeeded state, which will guarantee that
        later we will always be able to create the font object.

2017-06-22  Andreas Kling  <akling@apple.com>

        Rename MemoryPressureHandler::setTabCount to setPageCount
        https://bugs.webkit.org/show_bug.cgi?id=173750

        Reviewed by Daniel Bates.

        * page/Page.cpp:
        (WebCore::Page::~Page):

2017-06-22  Antoine Quint  <graouts@apple.com>

        Modern media controls localised strings are out of sync with used strings in code
        https://bugs.webkit.org/show_bug.cgi?id=173752

        Reviewed by Dean Jackson.

        Remove strings we no longer use and add strings we use but failed to add previously.

        * English.lproj/modern-media-controls-localized-strings.js:

2017-06-22  Antoine Quint  <graouts@apple.com>

        Log when scripted animations get suspended and resumed
        https://bugs.webkit.org/show_bug.cgi?id=173751

        Reviewed by Dean Jackson.

        More work toward understanding why rAF callbacks are not serviced on bots (webkit.org/b/173628).

        * dom/Document.cpp:
        (WebCore::Document::requestAnimationFrame):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::suspend):
        (WebCore::ScriptedAnimationController::resume):
        (WebCore::ScriptedAnimationController::logSuspendCount): Deleted.
        * dom/ScriptedAnimationController.h:
        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):
        (WebCore::Page::resumeScriptedAnimations):
        (WebCore::Page::setIsVisibleInternal):

2017-06-22  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r214712): Infinite recursion in RenderTable::layout in paginated mode
        https://bugs.webkit.org/show_bug.cgi?id=173731
        <rdar://problem/32237775>

        Reviewed by Antti Koivisto.

        We should just skip bottom captions to check if section is moved, since they don't affect
        the section position (bottom <caption> is preceded by <tfoot>).

        Test: fast/table/caption-bottom-with-pagination.html

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

2017-06-22  Dean Jackson  <dino@apple.com>

        REGRESSION (r215809): 50% regression 14E305 -> 15A293a in MotionMark Suits test
        https://bugs.webkit.org/show_bug.cgi?id=173728
        <rdar://problem/32526744>

        Reviewed by Tim Horton.

        It turns out that CGGradientCreateWithColors is much slower than
        CGGradientCreateWithColorComponents, even without colorspace variations.
        Update the gradient creation code to only use this slower path
        when it has extended colors.

        * platform/graphics/Color.h: Add a FIXME about renaming some methods.
        * platform/graphics/cg/GradientCG.cpp: Use CGGradientCreateWithColorComponents
        if we have stops that are not extended colors.
        (WebCore::Gradient::platformGradient):

2017-06-22  Youenn Fablet  <youenn@apple.com>

        Fix memory leak in LibWebRTCMediaEndpoint
        https://bugs.webkit.org/show_bug.cgi?id=173717

        Reviewed by Eric Carlson.

        No chnage of behavior.
        Making sure SessionDescription pointer get properly released.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionSucceeded):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * testing/MockLibWebRTCPeerConnection.cpp: Allocating description.

2017-06-22  Daniel Bates  <dabates@apple.com>

        Make FrameLoadRequest a move-only type
        https://bugs.webkit.org/show_bug.cgi?id=173682

        Reviewed by Alex Christensen and Darin Adler.

        A FrameLoadRequest groups together the information to perform a load into a single object
        that is more manageable to pass around than its constituent parts. Code that receives a
        FrameLoadRequest is expected to extract out the information it needs to complete its task.
        And it does not make sense to re-use the same FrameLoadRequest object for more than one
        load. Therefore, it is sufficient to make FrameLoadRequest a move-only type.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        * loader/FrameLoadRequest.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::loadRequest):
        * replay/UserInputBridge.h:

2017-06-22  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r217223): [iOS] Video keeps playing after application is backgrounded
        https://bugs.webkit.org/show_bug.cgi?id=173727

        Reviewed by Eric Carlson.

        Only override media element visibility if it is in picture-in-picture mode (not fullscreen generally).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::visibilityStateChanged):

2017-06-22  Joseph Pecoraro  <pecoraro@apple.com>

        Follow-up to r218662. Only log backtraces for DumpRenderTree.

        Rubber-stamped by Antoine Quint.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::logSuspendCount):

2017-06-22  Charlie Turner  <cturner@igalia.com>

        [GTK] Spreaker live shows won't play
        https://bugs.webkit.org/show_bug.cgi?id=173306

        Reviewed by Xabier Rodriguez-Calvar.

        This was due to removing the code that negotiated caps for Icecast
        streams based on the response headers in r191947. The problem is that
        the typefind element can sometimes squint hard enough and see an MP3
        stream and attempt to play it, resulting in garbled audio playback. More
        commonly typefind fails to recognize the Icecast stream and bails,
        resulting in no playback at all.

        r191947 also removed the emission of metadata into the pipeline. This
        patch also leaves that out since we have no use for it within WebKit.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived):

2017-06-22  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218633.

        The test is failing frequently on Sierra Debug and Windows

        Reverted changeset:

        "AX: Cannot call setValue() on contenteditable or ARIA text
        controls"
        https://bugs.webkit.org/show_bug.cgi?id=173520
        http://trac.webkit.org/changeset/218633

2017-06-22  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableStreamBYOBReader read()
        https://bugs.webkit.org/show_bug.cgi?id=172714

        Reviewed by Youenn Fablet.

        Implemented read() method of ReadableStreamBYOBReader [1]. Also added code related 
        to BYOB features that were previously described as FIXMEs and that now become reachable.

        In addition, WPT tests that involve read() have allowed to identify 2 bugs not directly 
        related to read() (172716 and 172717). They will be fixed distinctly. Once done, all WPT
        tests should pass.

        [1] https://streams.spec.whatwg.org/#byob-reader-read

        WPT tests (web-platform-tests/streams/readable-byte-streams/general.js) already cover
        most cases for read() usage. Corresponding expectations have been updated. In addition,
        1 test has been added to WebKit tests (in streams/readable-stream-byob-reader.js) to 
        check that read() can only be applied to a ReadableStreamBYOBReader.

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerClearPendingPullIntos): Implemented.
        (readableByteStreamControllerEnqueue): Updated with support for BYOBReader.
        (readableByteStreamControllerPullInto): Added.
        (readableStreamAddReadIntoRequest): Added.
        * Modules/streams/ReadableStreamBYOBReader.js:
        (read): Added.

2017-06-22  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Prevent capturing at unconventional resolutions when using the SW encoder on Mac
        https://bugs.webkit.org/show_bug.cgi?id=172602
        <rdar://problem/32407693>

        Reviewed by Eric Carlson.

        Test: platform/mac/webrtc/captureCanvas-webrtc-software-encoder.html

        Add internal API to switch on/off hardware H264 encoder.
        Add checks for standard size. If using a software encoder and frame size is not standard,
        the session is destroyed and no frame is sent at all.

        Added tests based on captureStream.
        Fixed the case of capturing a canvas which size is changing.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasResized):
        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.h:
        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.mm:
        (WebCore::H264VideoToolboxEncoder::setHardwareEncoderForWebRTCAllowed):
        (WebCore::H264VideoToolboxEncoder::hardwareEncoderForWebRTCAllowed):
        (WebCore::isUsingSoftwareEncoder):
        (WebCore::H264VideoToolboxEncoder::CreateCompressionSession):
        (isStandardFrameSize): Added.
        (isUsingSoftwareEncoder): Added.
        * testing/Internals.cpp:
        (WebCore::Internals::setH264HardwareEncoderAllowed):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-21  Youenn Fablet  <youenn@apple.com>

        [Fetch API] TypeError when called with body === {}
        https://bugs.webkit.org/show_bug.cgi?id=173295
        <rdar://problem/32746733>

        Reviewed by Sam Weinig.

        Test: fetch/body-init.html

        Handling body of Request and Response using binding generator to correctly handle unions.
        The biggest change is that any value that is not a specific type in the union will match a String.
        This is matching WebIDL spec and Firefox behavior.

        Handling of ReadableStream bodies remains in JS builtin for Response.
        This allows easier handling cloning and consumption of body.
        Adding setBodyAsReadableStream since this is no longer handled by extractBody.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract): Using Variant instead of JSC::JSValue.
        (WebCore::FetchBody::readableStreamBody): Introduced to handle the
        case of readable stream bodies.
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::extractBody):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::setBody):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::setBody): Splitting setBody for ease of readability.
        (WebCore::FetchRequest::setBodyFromInputRequest):
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchRequest.js:
        (initializeFetchRequest):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::initializeWith):
        (WebCore::FetchResponse::setBodyAsReadableStream):
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/FetchResponse.js:
        (initializeFetchResponse):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2017-06-21  Simon Fraser  <simon.fraser@apple.com>

        Add z-index to compositing logging output
        https://bugs.webkit.org/show_bug.cgi?id=173684

        Reviewed by Zalan Bujtas.

        Show z-index, which is often useful to find negative z-index items.

        Log "+foreground" rather than "foreground" to indicate that this layer has an
        additional foreground/background layer, and fix spacing.

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

2017-06-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix Window Debug build after r218660.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):

2017-06-21  Andreas Kling  <akling@apple.com>

        Increase memory kill limits for WebContent processes that manage multiple tabs.
        https://bugs.webkit.org/show_bug.cgi?id=173674

        Reviewed by Geoffrey Garen.

        Plumb the non-utility Page count down to WTF::MemoryPressureHandler.

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):

2017-06-21  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Restore ordering of CryptoAlgorithmIdentifier in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=173678
        <rdar://problem/32879314>

        Reviewed by Sam Weinig.

        r218030 reorders the ordering of CryptoAlgorithmIdentifier in SerializedScriptValue,
        which introduces backward compatibility issues with CryptoKey objects stored in the
        IndexedDB. Hence, we should restore it back.

        No tests.

        * bindings/js/SerializedScriptValue.cpp:

2017-06-21  Daniel Bates  <dabates@apple.com>

        Change FrameLoadRequest from a struct to a class

        FrameLoadRequest is underutilizing the purpose of a struct - default visibility of
        members is public, as FrameLoadRequest explicitly groups its members under public:
        or private: sections. Maybe in the future we can make FrameLoadRequest a struct
        with only public members. For now, we should consider FrameLoadRequest a class.

        * loader/FormSubmission.h:
        * loader/FrameLoadRequest.h:
        * loader/FrameLoader.h:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * replay/UserInputBridge.h:

2017-06-21  Daewoong Jang  <daewoong.jang@navercorp.com>

        Compiler error while building with !HAVE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=173670

        Reviewed by Chris Fleizach.

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

2017-06-21  Antoine Quint  <graouts@apple.com>

        Build fix.

        Reviewed by Tim "Mr. T" Horton.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::logSuspendCount):
        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):
        (WebCore::Page::resumeScriptedAnimations):

2017-06-21  Antoine Quint  <graouts@apple.com>

        Ensure DRT always logs rAF suspension debugging code
        https://bugs.webkit.org/show_bug.cgi?id=173681

        Reviewed by Tim "Mr. T" Horton.

        Instead of using a setting to check whether we should log information related to rAF
        callbacks being suspended with WK1, we now check whether we're using in DRT to avoid
        any potential issue with settings being in the incorrect state when a test is run.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::logSuspendCount):
        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):
        (WebCore::Page::resumeScriptedAnimations):
        * page/Settings.in:
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::MacApplication::isDumpRenderTree):

2017-06-21  Chris Dumez  <cdumez@apple.com>

        Allow constructing a WTF:Function from a function pointer
        https://bugs.webkit.org/show_bug.cgi?id=173660

        Reviewed by Alex Christensen.

        Construct WTF:Function directly from a function pointer when possible
        instead of constructing a lambda to do so.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::InitDataRegistry::InitDataRegistry):
        * page/Page.cpp:
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        * platform/cf/MainThreadSharedTimerCF.cpp:
        (WebCore::setupPowerObserver):
        * platform/mac/WebCoreNSURLExtras.mm:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):

2017-06-21  Antoine Quint  <graouts@apple.com>

        CSS text properties affect <video> shadow root
        https://bugs.webkit.org/show_bug.cgi?id=173664
        <rdar://problem/32904328>

        Reviewed by Dean Jackson.

        Ensure that we reset all inheritable styles back to their initial value for media shadow roots.

        Test: media/modern-media-controls/time-label/time-label-inherited-text-indent.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container):

2017-06-20  Simon Fraser  <simon.fraser@apple.com>

        Remove WILL_REVEAL_EDGE_EVENTS code
        https://bugs.webkit.org/show_bug.cgi?id=173632

        Reviewed by Sam Weinig, Beth Dakin.

        Remove will-reveal-edge events, which never took off.

        * dom/Document.cpp:
        (WebCore::Document::clearScriptedAnimationController):
        (WebCore::Document::sendWillRevealEdgeEventsIfNeeded): Deleted.
        * dom/Document.h:
        * dom/GlobalEventHandlers.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLFrameSetElement.idl:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):

2017-06-21  Daniel Bates  <dabates@apple.com>

        Cleanup FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=173564
        <rdar://problem/32903570>

        Reviewed by Brent Fulgham.

        FrameLoadRequest has too many constructors. Use default values to reduce the number of
        constructors. Have FrameLoadRequest hold a Ref<SecurityOrigin> instead of a RefPtr<SecurityOrigin>
        as FrameLoadRequest must always hold a valid SecurityOrigin, the security origin of the
        document that initiated the request.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab): Explicitly pass the null-string for
        the target frame name as we do not have one. Use C++11 brace initialization syntax and ASCIILiteral().
        Rename local variable from request to frameLoadRequest to better describe its purpose. Fix up
        FIXME comment added in r105600 to better describe the issue we should fix as the code as
        changed since the FIXME was added.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate): No need to pass ShouldReplaceDocumentIfJavaScriptURL::ReplaceDocumentIfJavaScriptURL
        now that the FrameLoadRequests constructor uses this policy by default. Use C++11 brace
        initialization syntax and ASCIILiteral(). Rename local variable from frameRequest to frameLoadRequest
        to better describe its purpose.
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest): Use C++11 brace initialization syntax.
        * loader/FrameLoadRequest.h: Remove many constructor overloads. Changed m_requester from
        RefPtr<SecurityOrigin> to Ref<SecurityOrigin> as we can never be instantiated with a null
        SecurityOrigin. Moved m_shouldCheckNewWindowPolicy to be under ShouldOpenExternalURLsPolicy
        to reduce the size of the class by 8 bytes.
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest): Added copy constructor as we must use Ref::copyRef()
        to copy the Ref<SecurityOrigin>.
        (WebCore::FrameLoadRequest::requester): Return a const SecurityOrigin& instead of a const SecurityOrigin*.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Update now that the order of the ShouldReplaceDocumentIfJavaScriptURL
        and ShouldOpenExternalURLsPolicy arguments in the FrameLoadRequest constructor has changed.
        (WebCore::FrameLoader::loadURLIntoChildFrame): Ditto. Also use C++11 brace initialization syntax
        and ASCIILiteral().
        (WebCore::FrameLoader::loadFrameRequest): Update code now that FrameLoadRequest::requester() returns a
        SecurityOrigin& instead of a SecurityOrigin*. Use C++11 brace initialization syntax.
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange): Use C++11 brace initialization syntax.
        Rename local variable from frameRequest to frameLoadRequest to better describe its purpose.
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected): ove FrameLoadRequest instantiation
        into a local variable and use C++11 brace initialization syntax to make it easier to identify
        the arguments passed to FrameLoader::loadFrameRequest().
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Update now that the order of the ShouldReplaceDocumentIfJavaScriptURL
        and ShouldOpenExternalURLsPolicy arguments in the FrameLoadRequest constructor has changed.
        Use C++11 brace initialization syntax and ASCIILiteral(). Rename some local variables to better
        describe their purpose.

2017-06-20  Simon Fraser  <simon.fraser@apple.com>

        svgPath.getTotalLength() freezes webkit
        https://bugs.webkit.org/show_bug.cgi?id=173566
        <rdar://problem/32866731>

        Reviewed by Dean Jackson.

        Ensure that curveLength() progresses by making split() return a bool indicating
        whether either of the resulting curves are the same as the original. This can happen
        when midPoint() on two close points returns a point that is the same as one of the
        arguments because of floating-point precision limitations.

        Test: svg/custom/path-getTotalLength-hang.html

        * platform/graphics/PathTraversalState.cpp:
        (WebCore::QuadraticBezier::operator ==):
        (WebCore::QuadraticBezier::split):
        (WebCore::CubicBezier::operator ==):
        (WebCore::CubicBezier::split):
        (WebCore::curveLength):

2017-06-21  Youenn Fablet  <youenn@apple.com>

        Fix AVVideoCaptureSource frameRate setter and getter
        https://bugs.webkit.org/show_bug.cgi?id=173637

        Reviewed by Eric Carlson.

        Covered by manual testing.

        Using activeVideoMaxFrameDuration to get the frame rate.
        Setting the frame rate according the given vale if in the allowed range.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::updateSettings):
        (WebCore::AVVideoCaptureSource::applyFrameRate):
        (WebCore::AVVideoCaptureSource::applySizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::shutdownCaptureSession):
        (WebCore::AVVideoCaptureSource::processNewFrame):
        (WebCore::AVVideoCaptureSource::updateFramerate): Deleted.

2017-06-21  Youenn Fablet  <youenn@apple.com>

        Refresh libwebrtc code up to a87675d4a160e2c49c3e754cd9ca291d6c8f36ae
        https://bugs.webkit.org/show_bug.cgi?id=173602

        Reviewed by Eric Carlson.

        No feature change.

        Updated according small libwebrtc API changes.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFramesIfNeeded):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):

2017-06-21  Sam Weinig  <sam@webkit.org>

        Add support for structured serialization of CSS Geometry types
        https://bugs.webkit.org/show_bug.cgi?id=173631

        Reviewed by Simon Fraser.

        Tests: imported/w3c/web-platform-tests/css/geometry-1/structured-serialization.html

        Adds support for serializing the new geometry types as specified by:
        https://drafts.fxtf.org/geometry-1/#structured-serialization

        * WebCore.xcodeproj/project.pbxproj:
        Move a few custom bindings into the "GC / Wrapping Only" since they have no more custom operations or attributes.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpDOMPoint):
        (WebCore::CloneSerializer::dumpDOMRect):
        (WebCore::CloneSerializer::dumpDOMMatrix):
        (WebCore::CloneSerializer::dumpDOMQuad):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::getJSValue):
        (WebCore::CloneDeserializer::readDOMPoint):
        (WebCore::CloneDeserializer::readDOMMatrix):
        (WebCore::CloneDeserializer::readDOMRect):
        (WebCore::CloneDeserializer::readDOMPointInit):
        (WebCore::CloneDeserializer::readDOMQuad):
        (WebCore::CloneDeserializer::readTerminal):
        Add serialization/deserialization of the geometry types.

        * css/DOMMatrix.cpp:
        (WebCore::DOMMatrix::DOMMatrix):
        * css/DOMMatrix.h:
        (WebCore::DOMMatrix::create):
        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::DOMMatrixReadOnly):
        * css/DOMMatrixReadOnly.h:
        (WebCore::DOMMatrixReadOnly::create):
        Add create functions and constructors that take a TransformationMatrix by r-value reference
        so they can be moved into the DOM type.

2017-06-21  Andreas Kling  <akling@apple.com>

        [iOS] Ensure that GraphicsServices is initialized before calling GSFontPurgeFontCache().
        https://bugs.webkit.org/show_bug.cgi?id=173616
        <rdar://problem/30780050>

        Reviewed by Chris Dumez.

        Fix for crash in GSFontPurgeFontCache() seen in apps embedding WebKit.
        Ensure GSFontInitialize() has been called first, since the former depends on state
        set up by this function.

        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        * platform/spi/ios/GraphicsServicesSPI.h:

2017-06-21  Antoine Quint  <graouts@apple.com>

        Add logging to identify when the Page suspends scripted animations
        https://bugs.webkit.org/show_bug.cgi?id=173626

        Reviewed by Tim Horton.

        We have a longstanding issue that some media/modern-media-controls tests time out due to
        requestAnimationFrame callbacks not being serviced, which is tracked by webkit.org/b/173628.
        We added some logging to identify when ScriptedAnimationController would get suspended in
        webkit.org/b/173326. This logging points to the fact that the reason rAF callbacks aren't
        serviced is because Document::requestAnimationFrame() suspends rAF when the page reports
        that scripted animations ought to be suspended, which is true when m_scriptedAnimationsSuspended
        is true. This patch adds logging that tracks when this flag is set, provided a new setting
        shouldLogScriptedAnimationControllerSuspensionChange is true.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::logSuspendCount):
        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):
        (WebCore::Page::resumeScriptedAnimations):
        * page/Settings.in:

2017-06-21  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Extract CurlDownloadManager as shared background task handler
        https://bugs.webkit.org/show_bug.cgi?id=173557

        Curl resource handling should be shared by other part of Curl
        network stack. CurlDownloadManager is extracted as stand alone
        CurlManager singleton class to be ready for others
        (i.e. ResourceHandle).

        Reviewed by Alex Christensen.

        * PlatformWinCairo.cmake:
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForSession):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::cancel):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::handleCurlMsg):
        (WebCore::CurlDownloadManager::CurlDownloadManager): Deleted.
        (WebCore::CurlDownloadManager::~CurlDownloadManager): Deleted.
        (WebCore::CurlDownloadManager::add): Deleted.
        (WebCore::CurlDownloadManager::remove): Deleted.
        (WebCore::CurlDownloadManager::getActiveDownloadCount): Deleted.
        (WebCore::CurlDownloadManager::getPendingDownloadCount): Deleted.
        (WebCore::CurlDownloadManager::startThreadIfNeeded): Deleted.
        (WebCore::CurlDownloadManager::stopThread): Deleted.
        (WebCore::CurlDownloadManager::stopThreadIfIdle): Deleted.
        (WebCore::CurlDownloadManager::updateHandleList): Deleted.
        (WebCore::CurlDownloadManager::addToCurl): Deleted.
        (WebCore::CurlDownloadManager::removeFromCurl): Deleted.
        (WebCore::CurlDownloadManager::downloadThread): Deleted.
        * platform/network/curl/CurlDownload.h:
        (WebCore::CurlDownloadManager::getMultiHandle): Deleted.
        (WebCore::CurlDownloadManager::runThread): Deleted.
        (WebCore::CurlDownloadManager::setRunThread): Deleted.
        * platform/network/curl/CurlManager.cpp: Added.
        (WebCore::CurlManager::CurlManager):
        (WebCore::CurlManager::~CurlManager):
        (WebCore::CurlManager::add):
        (WebCore::CurlManager::remove):
        (WebCore::CurlManager::getActiveCount):
        (WebCore::CurlManager::getPendingCount):
        (WebCore::CurlManager::startThreadIfNeeded):
        (WebCore::CurlManager::stopThread):
        (WebCore::CurlManager::stopThreadIfIdle):
        (WebCore::CurlManager::updateHandleList):
        (WebCore::CurlManager::addToCurl):
        (WebCore::CurlManager::removeFromCurl):
        (WebCore::CurlManager::workerThread):
        (WebCore::CurlUtils::getEffectiveURL):
        (WebCore::CurlSharedResources::mutexFor):
        (WebCore::CurlSharedResources::lock):
        (WebCore::CurlSharedResources::unlock):
        * platform/network/curl/CurlManager.h: Added.
        (WebCore::CurlManager::singleton):
        (WebCore::CurlManager::getCurlShareHandle):
        (WebCore::CurlManager::getMultiHandle):
        (WebCore::CurlManager::runThread):
        (WebCore::CurlManager::setRunThread):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::handleLocalReceiveResponse):
        (WebCore::getProtectionSpace):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::getCurlEffectiveURL): Deleted.
        (WebCore::sharedResourceMutex): Deleted.
        (WebCore::curl_lock_callback): Deleted.
        (WebCore::curl_unlock_callback): Deleted.
        (WebCore::ResourceHandleManager::getCurlShareHandle): Deleted.
        * platform/network/curl/ResourceHandleManager.h:

2017-06-21  Jeremy Jones  <jeremyj@apple.com>

        Include audio/vnd.wave as a valid mime-type for wav files.
        https://bugs.webkit.org/show_bug.cgi?id=173635
        rdar://problem/32656568

        Reviewed by Eric Carlson.

        audio/vnd.wave is a valid mime-type for wav files per https://tools.ietf.org/html/rfc2361

        Updated test and test results:
        LayoutTests/media/media-can-play-wav-audio.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::mimeTypeAssociationMap):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::staticMIMETypeList):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeSet):

2017-06-21  Chris Fleizach  <cfleizach@apple.com>

        AX: Cannot call setValue() on contenteditable or ARIA text controls
        https://bugs.webkit.org/show_bug.cgi?id=173520

        Reviewed by Ryosuke Niwa.

        Add support for changing the value of a contenteditable and any other aria text control in setValue().
 
        Test: accessibility/set-value-editable-types.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):

2017-06-20  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyEC SPKI imports
        https://bugs.webkit.org/show_bug.cgi?id=172927

        Reviewed by Jiewen Tan, Michael Catanzaro and Carlos Garcia Campos.

        No new tests -- affected tests are now passing and are unskipped.

        Implement libgcrypt-based support for SPKI imports of EC keys.

        Using libtasn1 through the utility functions and wrappers, the given key data
        is decoded against the SubjectPublicKeyInfo ASN.1 definition. The algorithm
        member is then properly validated, making sure that the key algorithm idenfitier
        is supported and that the algorithm parameters specify the correct EC curve.

        The public key bit string is then retrieved and validated, ensuring it represents
        an uncompressed EC point that is of valid size for the specified EC curve. The
        point is then tested through an EC context to make sure it's positioned on the
        specified EC curve.

        Finally, the curve name and uncompressed point data are embedded into a
        `public-key` s-expression that will be used through the libgcrypt API. This is
        then used, along with other information, to create a valid CryptoKeyEC object.

        * PlatformGTK.cmake: Use LIBTASN1_INCLUDE_DIRECTORIES and LIBTASN1_LIBRARIES.
        * PlatformWPE.cmake: Ditto.
        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::supportedAlgorithmIdentifier):
        (WebCore::curveForIdentifier):
        (WebCore::CryptoKeyEC::platformImportSpki):

2017-06-20  Devin Rousso  <drousso@apple.com>

        WebGPU contexts should have a back reference to the canvas element
        https://bugs.webkit.org/show_bug.cgi?id=173633

        Reviewed by Jon Lee.

        No tests added, as this is already implemented within other canvas types.

        * html/canvas/WebGPURenderingContext.idl:

2017-06-20  Youenn Fablet  <youenn@apple.com>

        WebAudioSourceProvider should be thread safe ref counted
        https://bugs.webkit.org/show_bug.cgi?id=173623

        Reviewed by Eric Carlson.

        No observable change of behavior.

        * platform/mediastream/WebAudioSourceProvider.h:

2017-06-20  Yoav Weiss  <yoav@yoav.ws>

        [preload] Turn on preload's feature flag by default.
        https://bugs.webkit.org/show_bug.cgi?id=173139

        Reviewed by Youenn Fablet.

        Turn on the runtime enabled feature flag for link preload by default.

        No new tests as this just turns on a feature that was already on-by-default for tests.

        * page/RuntimeEnabledFeatures.h:

2017-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Disable font variations on macOS Sierra and iOS 10
        https://bugs.webkit.org/show_bug.cgi?id=173618
        <rdar://problem/32879164>

        Reviewed by Jon Lee.

        On macOS Sierra and iOS 10, there are some platform problems involved with font variations. They
        were previously enabled on those OSes just as a preview development tool. These platform bugs have
        been fixed in macOS High Sierra and iOS 11, so we should align our feature flags with the eventual
        configurations.

        * Configurations/FeatureDefines.xcconfig:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::defaultVariationValues):
        (WebCore::preparePlatformFont):

2017-06-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Send context attributes for tracked canvases
        https://bugs.webkit.org/show_bug.cgi?id=173327

        Reviewed by Joseph Pecoraro.

        Test: inspector/canvas/context-attributes.html

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::buildObjectForCanvas):

2017-06-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] The system Japanese font cannot be italicized
        https://bugs.webkit.org/show_bug.cgi?id=173300
        <rdar://problem/31805407>

        Reviewed by Ryosuke Niwa.

        Items in the system font cascade list may lie about whether or not they support italics.
        In order to get the truth, we need to use the physical font underlying the font in question,
        because this one won't lie. Then, we can interrogate this physical font about its traits
        in order to synthesize italics correctly.

        Test: fast/text/system-font-japanese-synthetic-italic.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::lookupFallbackFont):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges):

2017-06-20  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in more places in WebCore/
        https://bugs.webkit.org/show_bug.cgi?id=173583

        Reviewed by Darin Adler.

        Use WTF::Function instead of std::function in more places in WebCore/ to
        reduce copying.

        * page/Page.cpp:
        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::HysteresisActivity):
        * platform/Logging.cpp:
        (WebCore::registerNotifyCallback):
        * platform/Logging.h:
        * platform/MainThreadSharedTimer.cpp:
        (WebCore::MainThreadSharedTimer::setFiredFunction):
        * platform/MainThreadSharedTimer.h:
        * platform/PlatformPasteboard.h:
        * platform/ScopeGuard.h:
        (WebCore::ScopeGuard::ScopeGuard):
        (WebCore::ScopeGuard::enable):
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::ScrollAnimationSmooth):
        * platform/ScrollAnimationSmooth.h:
        * platform/SharedTimer.h:
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::currentSessionsMatching):
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/cf/MainThreadSharedTimerCF.cpp:
        (WebCore::setupPowerObserver):
        * platform/cf/RunLoopObserver.h:
        (WebCore::RunLoopObserver::RunLoopObserver):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::traverse):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::addMediaEngine):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/Path.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::function):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::runWithoutAnimations):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::convertToFormat):
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/graphics/gstreamer/MediaPlayerRequestInstallMissingPluginsCallback.h:
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::create):
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::MediaPlayerRequestInstallMissingPluginsCallback):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::drawWithoutShadow):
        (WebCore::GraphicsContext::drawWithShadow):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::ClipboardSetData::ClipboardSetData):
        (WebCore::PasteboardHelper::writeClipboardContents):
        * platform/gtk/PasteboardHelper.h:
        * platform/gtk/PlatformPasteboardGtk.cpp:
        (WebCore::PlatformPasteboard::writeToClipboard):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline):
        (WebVideoFullscreenInterfaceAVKit::fullscreenMayReturnToInline):
        * platform/mac/PowerObserverMac.cpp:
        (WebCore::PowerObserver::PowerObserver):
        * platform/mac/PowerObserverMac.h:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isSecondLevelDomainNameAllowedByTLDRules):
        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::addCaptureDeviceChangedObserver):
        * platform/mediastream/CaptureDeviceManager.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::scheduleDeferredTask):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (-[WebAVAudioSessionAvailableInputsListener initWithCallback:]):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mock/ScrollAnimatorMock.cpp:
        (WebCore::ScrollAnimatorMock::ScrollAnimatorMock):
        * platform/mock/ScrollAnimatorMock.h:
        * platform/network/CookieStorage.h:
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::addNetworkStateChangeListener):
        * platform/network/NetworkStateNotifier.h:
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::forEach):
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::cookieChangeCallbackMap):
        (WebCore::startObservingCookieChanges):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::callOnMainThreadAndWait):
        * platform/network/mac/CookieStorageMac.mm:
        (-[WebCookieStorageObjCAdapter startListeningForCookieChangeNotificationsWithCallback:]):
        (WebCore::startObservingCookieChanges):
        * platform/network/soup/CookieStorageSoup.cpp:
        (WebCore::startObservingCookieChanges):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::checkTLSErrors):
        * platform/network/soup/SoupNetworkSession.h:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::destroyCollationFunction):
        (WebCore::callCollationFunction):
        (WebCore::SQLiteDatabase::setCollationFunction):
        * platform/sql/SQLiteDatabase.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::traverseVisibleNonCompositedDescendantLayers):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItem):
        * rendering/RenderListBox.h:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::InlineIteratorHistory::push):
        (WebCore::BreakingContext::InlineIteratorHistory::update):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        * workers/WorkerRunLoop.cpp:

2017-06-20  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r218524.

        This change broke internal builds.

        Reverted changeset:

        "[Cocoa] The system Japanese font cannot be italicized"
        https://bugs.webkit.org/show_bug.cgi?id=173300
        http://trac.webkit.org/changeset/218524

2017-06-20  Daniel Bates  <dabates@apple.com>

        Have FrameLoadRequest takes a Frame& instead of a Frame*
        https://bugs.webkit.org/show_bug.cgi?id=173614
        <rdar://problem/32884890>

        Reviewed by Brent Fulgham.

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::handleProvisionalLoadFailure):
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):

2017-06-20  Daniel Bates  <dabates@apple.com>

        Skip Content Security Policy check for a media request using standard schemes initiated from
        an element in user agent shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=155505
        <rdar://problem/25169452>

        Reviewed by Brent Fulgham.

        This change makes the following tests pass on iOS 11:
            http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-video.html
            http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-audio.html

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):

2017-06-20  Andreas Kling  <akling@apple.com>

        Remove no-op calls to purge SQLite caches on memory pressure.
        <https://webkit.org/b/173604>

        Reviewed by Chris Dumez.

        The implementation of _sqlite3_purgeEligiblePagerCacheMemory() is empty
        since a few releases ago, so there's no point in calling it.

        * page/MemoryRelease.cpp:
        (WebCore::registerMemoryReleaseNotifyCallbacks):
        (WebCore::registerSQLiteMemoryPressureHandler): Deleted.
        * page/MemoryRelease.h:
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        (WebCore::registerSQLiteMemoryPressureHandler): Deleted.
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::initializeSQLiteIfNecessary):

2017-06-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: add console messages for WebGL shader compile and program link errors/warnings
        https://bugs.webkit.org/show_bug.cgi?id=143236
        <rdar://problem/20352149>

        Reviewed by Dean Jackson.

        Test: fast/canvas/webgl/shader-compile-logging.html

        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::checkFramebufferStatus):
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::recycleContext):
        (WebCore::WebGLRenderingContextBase::checkTextureCompleteness):
        (WebCore::WebGLRenderingContextBase::printToConsole):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::synthesizeGLError):
        (WebCore::WebGLRenderingContextBase::printGLErrorToConsole): Deleted.
        (WebCore::WebGLRenderingContextBase::printWarningToConsole): Deleted.
        (WebCore::WebGLRenderingContextBase::printGLWarningToConsole): Deleted.
        Unify console logging helper functions to all follow the same path. Additionally, errors
        now generate stack traces. Shader compilation errors are now logged as well.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::addConsoleMessage):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
        * page/PageConsoleClient.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        * workers/WorkerGlobalScope.h:
        Add new path for logging to the console that accepts a ConsoleMessage.

2017-06-20  Saam Barati  <sbarati@apple.com>

        Unreviewed. Try to fix the build after r218594.

        * dom/Document.h:

2017-06-20  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218530.

        This revision caused multiple media stream test crashes on
        Debug builds.

        Reverted changeset:

        "Merge MediaDevicesRequest and MediaDevicesEnumerationRequest
        to tighten up code and object lifetime"
        https://bugs.webkit.org/show_bug.cgi?id=173527
        http://trac.webkit.org/changeset/218530

2017-06-19  Antoine Quint  <graouts@apple.com>

        Media document experience with long-loading files is poor
        https://bugs.webkit.org/show_bug.cgi?id=173575
        <rdar://problem/32178119>

        Reviewed by Dean Jackson.

        In order to avoid showing media controls at a different size than that of the video when we've
        received enough information to determine whether it's audio or video and what the video frame size
        is, we do not show any UI until we have enough information to show the controls in their correct
        initial state. This works well with local files and fast-loading files, but does not work well with
        invalid files, which never load and fail to ever show any UI, and files that load slowly where there
        is no visible feedback that content will be visible.

        Instead, we now default to showing audio controls in their loading state, which provides a seamless
        transition if we will be loading an audio file since the controls are initially in the correct state,
        and at least provide feedback that data is loading even if we eventually transition to a video layout.

        Additionally, we remove the invalid placard background in case the media is invalid, showing only the
        crossed-out play icon in the center of the page in that state.

        Tests: media/modern-media-controls/media-documents/media-document-invalid.html
               media/modern-media-controls/media-documents/media-document-video-with-initial-audio-layout.html

        * Modules/modern-media-controls/controls/media-document.css:
        (:host(.media-document)): Remove "visibility: hidden" since we want the media controls to be visible
        at all times.
        (:host(.media-document.audio)): Add a little padding on the x-axis to ensure audio controls never snap
        directly to the edges of the window.
        (:host(.media-document.audio.iphone)): Remove the iPhone-specific styling since we moved it to the
        general case.
        (:host(.media-document.video.invalid) .placard): Remove the background from the invalid placard when
        showing invalid media.
        (:host(.media-document.ready)): Deleted.
        * Modules/modern-media-controls/media/audio-support.js:
        (AudioSupport.prototype.syncControl): Make sure we invalidate the media document layout when a media
        document's media type changes.
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController): Instantiate the controls prior to creating the MediaDocumentController since the
        MediaDocumentController will need to access the controls.
        * Modules/modern-media-controls/media/media-document-controller.js:
        (MediaDocumentController): Set the default layout for media controls for a media document to be audio
        and in the waiting state.
        (MediaDocumentController.prototype.layout): Toggle the "invalid", "audio" and "video" CSS classes for
        the next possible commit to the DOM, provided we have established the media document's media type.
        (MediaDocumentController.prototype.handleEvent): Deal with the "play" and "error" events to trigger
        a layout.
        (MediaDocumentController.prototype._mediaDocumentHasMetadata): Deleted.
        (MediaDocumentController.prototype._mediaDocumentHasSize): Deleted.

2017-06-20  Daniel Bates  <dabates@apple.com>

        NavigationAction has too many constructors
        https://bugs.webkit.org/show_bug.cgi?id=173484

        Reviewed by Brady Eidson.

        A NavigationAction object is an immutable object that represents the details of a
        navigation, including the type of a navigation (e.g. link click), what triggered
        the navigation, and the external URL policy to use for the navigation. Over time
        the number of NavigationAction constructor overloads (not including copy/move
        constructors) has grown to 12 to support different combinations of details.
        We can use default values to reduce the number of constructors to 2 (not including
        copy/move constructors).

        No behavior changed. So, no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Pass NavigationType::Other when
        instantiating NavigationAction.
        (WebCore::FrameLoader::loadDifferentDocumentItem): Fix order of arguments now that
        the constructor overload that takes a NavigationType takes the Event* as the fourth argument,
        not the third. Also, use C++11 brace initialization syntax when instantiating a NavigationAction.
        (WebCore::createWindow):
        * loader/NavigationAction.cpp: Remove unnecessary #include of header ScriptController.h.
        Include header Event.h.
        (WebCore::NavigationAction::NavigationAction):
        * loader/NavigationAction.h: Forward declare class Event and remove #include of header Event.h.
        Make copy constructor, copy assignment operator, move constructor, and move assignment operator
        out-of-line to avoid the need to include header Event.h. Export the copy constructor so that it
        can be used from WebKit on the Apple Windows port. Move ShouldOpenExternalURLsPolicy to be after
        NavigationType to reduce the size of the class by 8 bytes.
        (WebCore::NavigationAction::NavigationAction):
        * loader/PolicyChecker.cpp: Include header Event.h.
        * page/Performance.cpp: Ditto.
        * replay/ReplayController.cpp: Ditto.

2017-06-20  Konstantin Tokarev  <annulen@yandex.ru>

        Rename OrientationNotifer.h to OrientationNotifier.h
        https://bugs.webkit.org/show_bug.cgi?id=173600

        Reviewed by Youenn Fablet.

        No new tests needed.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:
        * platform/OrientationNotifier.h: Renamed from Source/WebCore/platform/OrientationNotifer.h.
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * testing/Internals.h:

2017-06-20  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive include directives from WTF
        https://bugs.webkit.org/show_bug.cgi?id=173553

        Reviewed by Saam Barati.

        No new tests needed.

        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.h:
        Added missing include directive.

2017-06-20  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive include directives from WebCore/dom
        https://bugs.webkit.org/show_bug.cgi?id=173591

        Reviewed by Darin Adler.

        No new tests needed.

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        * dom/Attr.h:
        * dom/ChildListMutationScope.h:
        * dom/ContainerNodeAlgorithms.cpp:
        * dom/ContainerNodeAlgorithms.h:
        * dom/CustomElementRegistry.h:
        * dom/DOMRect.h:
        * dom/DocumentMarkerController.h:
        * dom/ElementIteratorAssertions.h:
        * dom/ElementRareData.h:
        * dom/EventContext.h:
        * dom/EventDispatcher.h:
        * dom/ExtensionStyleSheets.h:
        * dom/GenericEventQueue.h:
        * dom/LiveNodeList.h:
        * dom/LoadableClassicScript.h:
        * dom/LoadableScript.h:
        * dom/MutationCallback.h:
        * dom/NativeNodeFilter.h:
        * dom/NodeRareData.h:
        * dom/PromiseRejectionEvent.h:
        * dom/PseudoElement.h:
        * dom/Range.h:
        * dom/RegisteredEventListener.h:
        * dom/RejectedPromiseTracker.cpp:
        * dom/ScopedEventQueue.h:
        * dom/ScriptElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/ScriptedAnimationController.cpp:
        * dom/ScriptedAnimationController.h:
        * dom/SelectorQuery.h:
        * dom/StaticNodeList.h:
        * dom/StaticRange.h:
        * dom/default/PlatformMessagePortChannel.h:
        * testing/Internals.cpp:
        * workers/WorkerGlobalScope.h:

2017-06-20  Konstantin Tokarev  <annulen@yandex.ru>

        Remove excessive include directives from WebCore/css
        https://bugs.webkit.org/show_bug.cgi?id=173554

        Reviewed by Alex Christensen.

        No new tests needed.

        * css/CSSComputedStyleDeclaration.h:
        * css/CSSContentDistributionValue.h:
        * css/CSSCursorImageValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFace.h:
        * css/CSSFontFeatureValue.h:
        * css/CSSFontStyleRangeValue.h:
        * css/CSSFontVariationValue.h:
        * css/CSSImageGeneratorValue.h:
        * css/CSSImageSetValue.h:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.h:
        * css/CSSKeyframeRule.cpp:
        * css/CSSKeyframeRule.h:
        * css/CSSLineBoxContainValue.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSPropertySourceData.h:
        * css/CSSReflectValue.h:
        * css/CSSRevertValue.h:
        * css/CSSSelector.h:
        * css/CSSStyleSheet.h:
        * css/CSSToLengthConversionData.h:
        * css/CSSUnsetValue.h:
        * css/CSSValue.h:
        * css/CSSValuePool.h:
        * css/CSSVariableData.h:
        * css/DeprecatedCSSOMCounter.h:
        * css/DeprecatedCSSOMRGBColor.h:
        * css/DeprecatedCSSOMRect.h:
        * css/DeprecatedCSSOMValue.h:
        * css/RuleSet.h:
        * css/SelectorChecker.h:
        * css/StyleBuilderConverter.h:
        * css/StyleBuilderCustom.h:
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        * css/StyleResolver.h:
        * css/StyleSheet.h:
        * css/StyleSheetContents.h:
        * css/ViewportStyleResolver.h:
        * css/parser/CSSDeferredParser.h:
        * css/parser/CSSParserIdioms.h:
        * css/parser/CSSParserImpl.cpp:
        * css/parser/CSSParserImpl.h:
        * css/parser/CSSParserObserver.h:
        * css/parser/CSSParserSelector.h:
        * css/parser/CSSPropertyParserHelpers.h:
        * css/parser/MediaQueryParser.cpp:
        * css/parser/MediaQueryParser.h:
        * css/parser/SizesAttributeParser.cpp:
        * css/parser/SizesAttributeParser.h:
        * html/BaseCheckableInputType.cpp:
        * html/MediaController.cpp:
        * html/track/TextTrack.cpp:
        * html/track/TextTrackCue.cpp:
        * html/track/VideoTrack.cpp:
        * loader/TextTrackLoader.cpp:

2017-06-20  Miguel Gomez  <magomez@igalia.com>

        [GTK] Layout Test fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html makes the subsequent test case flaky crash.
        https://bugs.webkit.org/show_bug.cgi?id=173459

        Reviewed by Carlos Garcia Campos.

        When destructing the VideoTextureCopierGStreamer, ensure that there's a previous gl context before trying
        to make it current again. There are situations where no previous context may exist, which can trigger a crash.
        Also, add DefaultImageOrientation to the switch that handles the video frame possible orientations, as it's the
        value used when no rotation needs to be performed, and it's currently triggering an assertion.

        Covered by existent tests.

        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::~VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::updateTextureSpaceMatrix):

2017-06-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: create canvas content view and details sidebar panel
        https://bugs.webkit.org/show_bug.cgi?id=138941
        <rdar://problem/19051672>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/requestContent.html
               inspector/canvas/requestNode.html

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestNode):
        Gets the node id of the backing canvas element.

        (WebCore::InspectorCanvasAgent::requestContent):
        Gets the current image content of the canvas.

        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        Minor fixes from r218376 <https://webkit.org/b/172623>.

        (WebCore::InspectorCanvasAgent::buildObjectForCanvas):
        Optionally send the `nodeId` of the backing canvas element if it is available.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):

2017-06-19  Frederic Wang  <fwang@igalia.com>

        [iOS] Always include frames in the scrolling tree when async frame scrolling is enabled
        https://bugs.webkit.org/show_bug.cgi?id=173405

        Reviewed by Simon Fraser.

        Currently "async frame scrolling" is ignored on iOS. This commit changes that behavior to
        align on macOS and is a preliminary step to implement iframe scrolling on iOS (bug 149264).

        Test: compositing/iframes/compositing-for-scrollable-iframe.html
              fast/scrolling/scrolling-tree-includes-frame.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame): Do not require
        compositing when "async frame scrolling" is enabled on iOS.

2017-06-19  Frederic Wang  <fwang@igalia.com>

        [Mac] Add an experimental feature setting for async frame scrolling
        https://bugs.webkit.org/show_bug.cgi?id=173359

        Reviewed by Simon Fraser.

        The necessary work to use compositing for frames and include them in the scrolling tree on
        macOS was performed in r217726 and r217730. ScrollingTreeIncludesFrames was used to
        determine when this behavior should be enabled. However, this does not work well on iOS where
        ScrollingTreeIncludesFrames defaults to true and really means "include the frames in the
        scrolling tree when necessary". Hence we instead introduce a new "async frame scrolling"
        switch to enable the behavior on macOS, which will also be used in a follow-up commit on iOS.
        This new setting is also made an "experimental feature", so that it will be more convenient
        for developer to try it.

        Test: compositing/iframes/compositing-for-scrollable-iframe.html
              fast/scrolling/scrolling-tree-includes-frame.html

        * page/Settings.in: Declare new setting for async frame scrolling.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView): Also include frames in
        scrolling tree when async frame scrolling is enabled.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame): Rely on async frame
        scrolling to decide when compositing is needed.

2017-06-19  Zalan Bujtas  <zalan@apple.com>

        AX: Remove redundant AXObjectCache::textChanged(RenderObject*).
        https://bugs.webkit.org/show_bug.cgi?id=173579
        <rdar://problem/32865367>

        Reviewed by Antti Koivisto.

        All calls go through textChanged(Node*) method.

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

2017-06-19  Darin Adler  <darin@apple.com>

        Merge MediaDevicesRequest and MediaDevicesEnumerationRequest to tighten up code and object lifetime
        https://bugs.webkit.org/show_bug.cgi?id=173527

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Removed MediaDevicesRequest.cpp.

        * Modules/mediastream/MediaDeviceInfo.cpp:
        (WebCore::MediaDeviceInfo::MediaDeviceInfo): Removed unneeded ScriptExecutionContext.
        (WebCore::MediaDeviceInfo::create): Ditto.
        * Modules/mediastream/MediaDeviceInfo.h: Removed unnecessary derivation from
        ContextDestructionObserver and ScriptExecutionContext arguments. Also removed
        unused MediaDeviceInfoVector typedef.
        * Modules/mediastream/MediaDeviceInfo.idl: Added ImplementationLacksVTable.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::enumerateDevices): Call MediaDevicesEnumerationRequest
        directly here instead of going through MediaDevicesRequest.

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: Moved code from
        MediaDevicesRequest in here. Put the typical counts at the top of the file.
        (WebCore::MediaDevicesEnumerationRequest::MediaDevicesEnumerationRequest):
        Marked inline and changed to take a DOM promise directly rather than having
        a separate class do the mapping to DOM promises.
        (WebCore::MediaDevicesEnumerationRequest::start): Replaced the create function
        with this. The caller doesn't actually keep a reference to the object.
        Added a FIXME about the behavior, not new, where we neither resolve nor reject
        the promise if there is no page object present. Updated to use the new version
        of UserMediaController::from.
        (WebCore::MediaDevicesEnumerationRequest::~MediaDevicesEnumerationRequest):
        Added a FIXME about the issue that we don't resolve or reject the promise if
        the client drops the last reference to the request without calling setDeviceInfo.
        (WebCore::MediaDevicesEnumerationRequest::document): Added. Private helper.
        Returns nullptr if the request is no longer active.
        (WebCore::MediaDevicesEnumerationRequest::frame): Added. For use by a caller
        that was getting to the frame. Uses the document function so it will return
        nullptr if the request is no longer active.
        (WebCore::MediaDevicesEnumerationRequest::userMediaDocumentOrigin): Changed
        to do the work using the document function.
        (WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin): Ditto.
        (WebCore::MediaDevicesEnumerationRequest::contextDestroyed): Simplified. We
        now can simply set a boolean when the context is destroyed, so there are no
        side effects and the code is simpler.
        (WebCore::removeAtypicalDevices): Renamed and tightened up the code a bit.
        (WebCore::MediaDevicesEnumerationRequest::setDeviceInfo): Moved the code
        here from MediaDevicesEnumerationRequest to pass the devices along.

        * Modules/mediastream/MediaDevicesEnumerationRequest.h: Made the
        ContextDestructionObserver use private inheritance. Cut down the includes
        and removed various unneeded functions.

        * Modules/mediastream/MediaDevicesRequest.cpp: Removed.
        * Modules/mediastream/MediaDevicesRequest.h: Removed.

        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::UserMediaController::UserMediaController): Use reference rather
        than pointer for the client.
        (WebCore::UserMediaController::~UserMediaController): Ditto.
        (WebCore::provideUserMediaTo): Ditto.

        * Modules/mediastream/UserMediaController.h:
        Changed constructor to take a refeference, removed client function, and
        changed data member to be a reference rather than a pointer.
        (WebCore::UserMediaController::from): Take and return a reference rather
        than taking a pointer that is checked for null.
        (WebCore::UserMediaController::requestUserMediaAccess): Use reference.
        (WebCore::UserMediaController::cancelUserMediaAccessRequest): Ditto.
        (WebCore::UserMediaController::enumerateMediaDevices): Ditto.
        (WebCore::UserMediaController::cancelMediaDevicesEnumerationRequest): Ditto.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start): Updated to use the new version
        of UserMediaController::from.

        * WebCore.xcodeproj/project.pbxproj: Updated for file removals.

        * testing/Internals.cpp: Removed unneeded include of UserMediaController.h.

2017-06-19  Sam Weinig  <sam@webkit.org>

        [WebIDL] Move Touch related bindings in Document to their own IDL file
        https://bugs.webkit.org/show_bug.cgi?id=173521

        Reviewed by Alex Christensen.

        Rather than #including in the middle of an IDL file, this moves the touch related
        bindings in Document.idl to a new partial interface for Document in DocumentTouch.idl.
        While here, remove the custom binding for createTouchList.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::createTouchList): Deleted.
        Remove createTouchList. It can be generated now.

        * dom/Document.cpp:
        (WebCore::Document::createTouch): Deleted.
        * dom/Document.h:
        Move touch related bindings code to DocumentTouch.h/cpp.
        Remove DocumentIOSForward as it is no longer needed.

        * dom/Document.idl:
        Move touch related bindings to DocumentTouch.idl
        
        * dom/DocumentTouch.h: Added.
        * dom/DocumentTouch.cpp: Added.
        (WebCore::DocumentTouch::createTouch):
        Moved from Document.

        (WebCore::DocumentTouch::createTouchList):
        Added to aid generated binding.

        * dom/DocumentTouch.idl: Added.
        Moved operations from Document.h

        * dom/TouchList.h:
        (WebCore::TouchList::create):
        (WebCore::TouchList::TouchList):
        Added create that works with the bindings.

        * dom/ios/TouchEvents.cpp:
        Add DocumentTouchIOS.h and sort.

2017-06-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] The system Japanese font cannot be italicized
        https://bugs.webkit.org/show_bug.cgi?id=173300
        <rdar://problem/31805407>

        Reviewed by Ryosuke Niwa.

        Items in the system font cascade list may lie about whether or not they support italics.
        In order to get the truth, we need to use the physical font underlying the font in question,
        because this one won't lie. Then, we can interrogate this physical font about its traits
        in order to synthesize italics correctly.

        Test: fast/text/system-font-japanese-synthetic-italic.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::lookupFallbackFont):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges):

2017-06-19  Daewoong Jang  <daewoong.jang@navercorp.com>

        [cURL] Move file scope static variables into function scopes
        https://bugs.webkit.org/show_bug.cgi?id=173567

        Reviewed by Alex Christensen.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowedHosts):
        (WebCore::allowedClientHosts):
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::addAllowedClientCertificate):
        (WebCore::setSSLClientCertificate):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::certVerifyCallback):

2017-06-19  Darin Adler  <darin@apple.com>

        [Cocoa] implement URLSession:task:needNewBodyStream: delegate method
        https://bugs.webkit.org/show_bug.cgi?id=173551
        rdar://problem/32250512

        Reviewed by Alex Christensen.

        Covered by http/tests/misc/form-blob-challenge.html

        * WebCore.xcodeproj/project.pbxproj: Removed NSURLRequestSPI.h.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::createHTTPBodyCFReadStream): Factored this out from setHTTPBody.
        (WebCore::setHTTPBody): Factored out the function above.
        * platform/network/cf/FormDataStreamCFNet.h: Added createHTTPBodyCFReadStream.

        * platform/network/cocoa/ResourceRequestCocoa.mm: Use CFNetworkSPI.h.
        * platform/network/ios/ResourceRequestIOS.mm: Ditto.

        * platform/network/mac/FormDataStreamMac.h: Added createHTTPBodyNSInputStream.
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::createHTTPBodyNSInputStream): Added/

        * platform/network/mac/ResourceHandleMac.mm: Use CFNetworkSPI.h.
        * platform/network/mac/ResourceRequestMac.mm: Ditto.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm: Ditto.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm: Ditto.

        * platform/network/mac/WebCoreURLResponse.h: Moved SPI declarations from
        here into CFNetworkSPI.h.

        * platform/spi/cf/CFNetworkSPI.h: Use #pragma once, consolidated SPI that was
        defined in scattered locations.

        * platform/spi/cocoa/NSURLRequestSPI.h: Removed. Superceded by CFNetworkSPI.h.

2017-06-19  Brady Eidson  <beidson@apple.com>

        Various IndexedDB crashes as an after effect of previous test.
        <rdar://problem/31418761> and https://bugs.webkit.org/show_bug.cgi?id=170436

        Reviewed by Chris Dumez.

        No new test (No consistent test possible, in practice covered by all existing IDB tests)

        This is timing related, where a UniqueIDBDatabase can be destroyed on the main thread while
        it still has one task left to try to execute on the IDBServer thread.
        
        The background thread tasks don't Ref<> the UniqueIDBDatabase, so even though task execution
        took a Ref<> protector, there was still a small window for a race.
        
        Should be closed up by making the background thread tasks themselves protect this.
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply):
        (WebCore::IDBServer::UniqueIDBDatabase::executeNextDatabaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::executeNextDatabaseTaskReply):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2017-06-19  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for serializers that have members that are themselves serializers (or inherit being a serializer from a parent)
        https://bugs.webkit.org/show_bug.cgi?id=173395

        Reviewed by Simon Fraser.

        Test: fast/css/DOMQuad-serialization.html

        * bindings/scripts/CodeGenerator.pm:
        (InheritsSerializable):
        Helper to determine if an interface inherits from any interfaces
        that are serializable. This is necessary because an attribute is
        serializable even if its interface is not marked as serializable. 

        (IsSerializableAttribute):
        Check ancestor interfaces as well to determine serializability.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerDefinition):
        Specialize attributes that are serializable interfaces to call its interfaces
        serialize function, thus allowing nested objects to be serialized.

        * dom/DOMQuad.idl:
        Add serializer.

        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp: Added.
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.h: Added.
        * bindings/scripts/test/TestSerialization.idl:
        * bindings/scripts/test/TestSerializationIndirectInheritance.idl: Added.
        Add and update tests.

2017-06-19  Commit Queue  <commit-queue@webkit.org>

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

        "It would break internal builds" (Requested by youenn on
        #webkit).

        Reverted changeset:

        "[WebRTC] Prevent capturing at unconventional resolutions when
        using the SW encoder on Mac"
        https://bugs.webkit.org/show_bug.cgi?id=172602
        http://trac.webkit.org/changeset/218505

2017-06-19  Zalan Bujtas  <zalan@apple.com>

        Opening certain mails brings up a mail that grows indefinitely.
        https://bugs.webkit.org/show_bug.cgi?id=173562
        <rdar://problem/32766579>

        Reviewed by Tim Horton.

        This reverts the logic where m_autoSizeContentSize always reflects the final layout's.
        When the ICB's height is 100%, it causes infinite recursion.
        See also webkit.org/b/173561.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2017-06-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Support .zip archives for file uploads via drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=173511
        <rdar://problem/32521025>

        Reviewed by Tim Horton.

        Allows dropped .zip archives to be uploaded as files by accepting types conforming to either
        "public.zip-archive" or "public.content" as potential file types. Initially, I opted to accept the more general
        "public.data" type; however, this includes UTIs such as "public.url" that should not be represented as files, so
        this is a more targeted fix that allows us to very easily add additional content types in the future by adding
        more types to supportedFileUploadPasteboardTypes.

        Tests:
        DataInteractionTests.ExternalSourceZIPArchiveToUploadArea
        DataInteractionTests.ExternalSourceZIPArchiveAndURLToSingleFileInput

        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::updateSupportedTypeIdentifiersForDragHandlingMethod):
        * platform/Pasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::supportedWebContentPasteboardTypes):
        (WebCore::Pasteboard::supportedFileUploadPasteboardTypes):

        Rename supportedPasteboardTypes to supportedWebContentPasteboardTypes, and also introduce
        supportedFileUploadPasteboardTypes which returns an list of types, such that if a type conforms to any type in
        this array, that type may be represented as a file. So far, this list contains "public.content" and
        "public.zip-archive".

        (WebCore::Pasteboard::types):
        (WebCore::Pasteboard::supportedPasteboardTypes): Deleted.
        * platform/ios/WebItemProviderPasteboard.mm:
        (typeConformsToTypes):

        Remove -typeIsAppropriateForSupportedTypes: and replace it with typeConformsToTypes. Use this both when
        determining the number of files on the pasteboard, and when determining preferred UTIs to load when dropping.

        (-[WebItemProviderPasteboard numberOfFiles]):
        (-[WebItemProviderPasteboard typeIdentifierToLoadForRegisteredTypeIdentfiers:]):
        (-[WebItemProviderPasteboard typeIsAppropriateForSupportedTypes:]): Deleted.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsFiles):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::supportedFileUploadPasteboardTypes):

2017-06-19  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom binding for Document.getCSSCanvasContext()
        https://bugs.webkit.org/show_bug.cgi?id=173516

        Reviewed by Chris Dumez.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::visitAdditionalChildren):
        (WebCore::JSDocument::getCSSCanvasContext): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * dom/Document.idl:
        Use a Variant to pass the context and type to the bindings.

2017-06-19  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Prevent capturing at unconventional resolutions when using the SW encoder on Mac
        https://bugs.webkit.org/show_bug.cgi?id=172602
        <rdar://problem/32407693>

        Reviewed by Eric Carlson.

        Test: platform/mac/webrtc/captureCanvas-webrtc-software-encoder.html

        Add internal API to switch on/off hardware H264 encoder.
        Add checks for standard size. If using a software encoder and frame size is not standard,
        the session is destroyed and no frame is sent at all.

        Added tests based on captureStream.
        Fixed the case of capturing a canvas which size is changing.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasResized):
        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.h:
        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.mm:
        (WebCore::H264VideoToolboxEncoder::setHardwareEncoderForWebRTCAllowed):
        (WebCore::H264VideoToolboxEncoder::hardwareEncoderForWebRTCAllowed):
        (WebCore::isUsingSoftwareEncoder):
        (WebCore::H264VideoToolboxEncoder::CreateCompressionSession):
        (isStandardFrameSize): Added.
        (isUsingSoftwareEncoder): Added.
        * testing/Internals.cpp:
        (WebCore::Internals::setH264HardwareEncoderAllowed):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-19  Brady Eidson  <beidson@apple.com>

        Cleanup IconLoader stuff when a DocumentLoader detaches from its frame.
        <rdar://problem/31418761> and https://bugs.webkit.org/show_bug.cgi?id=173473

        Reviewed by Alex Christensen.

        No new tests (No known change in behavior)

        I discovered the need to make these changes here due to a transient bug
        introduced in r218015 but already explicitly fixed in r218409.
        
        This change adds an assert to guard against a detached DocumentLoader having active IconLoaders.

        It also clears out all pending IconLoader and icon load decisions when stopLoading() is called, 
        as even attempting to start an icon load after detachment is a waste of cycles.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): Also explicitly clear all IconLoaders and icons pending
          load decision.
        (WebCore::DocumentLoader::finishedLoadingIcon): Assert that this DocumentLoader is not detached.

2017-06-19  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in more places in WebCore/
        https://bugs.webkit.org/show_bug.cgi?id=173535

        Reviewed by Antti Koivisto.

        Use WTF::Function instead of std::function in more places in WebCore/ to avoid copying.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::matchedParent):
        * accessibility/AccessibilityObject.h:
        * animation/DocumentAnimation.cpp:
        (WebCore::DocumentAnimation::getAnimations):
        * animation/DocumentAnimation.h:
        (WebCore::DocumentAnimation::getAnimations):
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/DFACombiner.cpp:
        (WebCore::ContentExtensions::DFACombiner::combineDFAs):
        * contentextensions/DFACombiner.h:
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::traverseSubresources):
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::traverseSubresources):
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::traverseSubresources):
        * css/CSSFontFaceSrcValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::traverseSubresources):
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::traverseSubresources):
        * css/CSSImageValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::traverseSubresources):
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::traverseSubresources):
        * css/CSSValueList.h:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::traverseSubresources):
        * css/StyleProperties.h:
        * css/StyleSheetContents.cpp:
        (WebCore::traverseSubresourcesInRules):
        (WebCore::StyleSheetContents::traverseSubresources):
        * css/StyleSheetContents.h:
        * dom/Element.cpp:
        (WebCore::Element::getAnimations):
        * editing/TextIterator.cpp:
        (WebCore::findPlainTextMatches):
        (WebCore::findClosestPlainText):
        (WebCore::findPlainText):
        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::showPopup):
        (WebCore::DictionaryLookup::animationControllerForPopup):
        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::perform):
        (WebCore::AsyncFileStream::getSize):
        (WebCore::AsyncFileStream::openForRead):
        (WebCore::AsyncFileStream::read):
        * fileapi/AsyncFileStream.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::waitForPreparedForInlineThen):
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::waitForPreparedForInlineThen):
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebCore::EmptyFrameLoaderClient::dispatchWillSubmitForm):
        * loader/FrameLoaderClient.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::forEachResource):
        (WebCore::MemoryCache::forEachSessionResource):
        * loader/cache/MemoryCache.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::applyRecursivelyWithVisibleRect):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::forEachPage):
        (WebCore::Page::decrementNestedRunLoopCount):
        (WebCore::Page::whenUnnested):
        * page/Page.h:
        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::clearAllTestDeferrals):
        (WebCore::WheelEventTestTrigger::setTestCallbackAndStartNotificationTimer):
        (WebCore::WheelEventTestTrigger::triggerTestTimerFired):
        * page/WheelEventTestTrigger.h:
        * page/WindowFeatures.cpp:
        (WebCore::processFeaturesString):
        * page/WindowFeatures.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::RingBuffer::forEach):
        * platform/cocoa/WebVideoFullscreenModelVideoElement.h:
        (WebCore::WebVideoFullscreenModelVideoElement::setVideoFullscreenLayer):
        (WebCore::WebVideoFullscreenModelVideoElement::waitForPreparedForInlineThen):
        * platform/cocoa/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setVideoFullscreenLayer):
        (WebVideoFullscreenModelVideoElement::waitForPreparedForInlineThen):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVideoFullscreenLayer):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::setVideoFullscreenLayer):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setVideoFullscreenLayer):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVideoFullscreenLayer):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVideoFullscreenLayer):
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.h:
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        (WebCore::VideoFullscreenLayerManager::setVideoFullscreenLayer):

2017-06-19  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=173534

        Reviewed by Alex Christensen.

        Use WTF::Function instead of std::function in WebCore/Modules to avoid
        copying.

        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        (WebCore::CDMFactory::CDMFactory):
        (WebCore::CDM::registerCDMFactory):
        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::changeActiveMediaElements):
        (WebCore::MediaSession::safelyIterateActiveMediaElements):
        * Modules/mediasession/MediaSession.h:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::matchTransceiver):
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::forEach):
        * Modules/mediastream/MediaStreamRegistry.h:

2017-06-19  Youenn Fablet  <youenn@apple.com>

        A cloned MediaStreamTrack should mute independently other tracks using the same source
        https://bugs.webkit.org/show_bug.cgi?id=172831
        <rdar://problem/32518527>

        Reviewed by Eric Carlson.

        Test: webrtc/clone-audio-track.html

        Move enabled handling in MediaStreamTrackPrivate instead of RealtimeMediaSource.
        Move WebRTC and WebAudio customers of RealtimeMediaSource to MediaStreamTrackPrivate.
        Move creation of WebAudio provider to MediaStreamTrackPrivate.

        This allows changing some parameters of tracks having the same source independently.
        Using this for enabled track attribute.

        We no longer stop generating frames in case track is disabled.
        This should be added back as an optimization in a follow-up.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/MediaStreamAudioSource.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::create):
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::setEnabled):
        (WebCore::MediaStreamTrackPrivate::audioSourceProvider):
        (WebCore::MediaStreamTrackPrivate::videoSampleAvailable):
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::removeObserver):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::render):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::OnData):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::pixelBufferFromVideoFrame):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::setSource):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::setSource):
        (WebCore::RealtimeOutgoingVideoSource::initializeFromSource):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::create):
        (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC):
        (WebCore::WebAudioSourceProviderAVFObjC::setClient):
        (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::generateFrame):
        * platform/spi/cocoa/PassKitSPI.h:

2017-06-19  Sam Weinig  <sam@webkit.org>

        [WebIDL] Properly model buffer source / typed arrays as their own IDL types
        https://bugs.webkit.org/show_bug.cgi?id=173513

        Reviewed by Alex Christensen.

        - Adds IDL type hierarchy for buffer source types.
        - Includes a special type, IDLArrayBufferView, which WebIDL defines as the union
          of DataView and all the typed array types, but we model as shared base class.
          This should not be observable, and allows us to avoid using a Variant for ArrayBufferView
          and instead use the existing base class.
        - Add builtin typedefs for BufferSource and DOMTimeStamp as defined in WebIDL. As noted
          above, rather than define a typedef of ArrayBufferView that maps to a union, we treat
          it as a special type.

        * bindings/IDLTypes.h:
        Add type hierarchy for buffer source types.
        - IDLBufferSource is the root
        - IDLArrayBuffer, IDLArrayBufferView, IDLDataView, IDLTypedArray derive from it.
        - And then the specific typed array types derive from IDLTypedArray, and are defined
          in JSDOMConvertBufferSource so we don't have to include a ton of typed array includes
          in this file, as they cannot be forward declared.

        * bindings/js/JSDOMConvertBufferSource.h:
        (WebCore::Detail::BufferSourceConverter::convert):
        (WebCore::Converter<IDLArrayBuffer>::convert):
        (WebCore::JSConverter<IDLArrayBuffer>::convert):
        (WebCore::Converter<IDLDataView>::convert):
        (WebCore::JSConverter<IDLDataView>::convert):
        (WebCore::Converter<IDLInt8Array>::convert):
        (WebCore::JSConverter<IDLInt8Array>::convert):
        (WebCore::Converter<IDLInt16Array>::convert):
        (WebCore::JSConverter<IDLInt16Array>::convert):
        (WebCore::Converter<IDLInt32Array>::convert):
        (WebCore::JSConverter<IDLInt32Array>::convert):
        (WebCore::Converter<IDLUint8Array>::convert):
        (WebCore::JSConverter<IDLUint8Array>::convert):
        (WebCore::Converter<IDLUint16Array>::convert):
        (WebCore::JSConverter<IDLUint16Array>::convert):
        (WebCore::Converter<IDLUint32Array>::convert):
        (WebCore::JSConverter<IDLUint32Array>::convert):
        (WebCore::Converter<IDLUint8ClampedArray>::convert):
        (WebCore::JSConverter<IDLUint8ClampedArray>::convert):
        (WebCore::Converter<IDLFloat32Array>::convert):
        (WebCore::JSConverter<IDLFloat32Array>::convert):
        (WebCore::Converter<IDLFloat64Array>::convert):
        (WebCore::JSConverter<IDLFloat64Array>::convert):
        (WebCore::Converter<IDLArrayBufferView>::convert):
        (WebCore::JSConverter<IDLArrayBufferView>::convert):
        Add native and javascript conversion for all the new types.

        * bindings/js/JSDOMConvertUnion.h:
        Add support for steps 7, 8, and 9 of the union conversion algorithm now that
        buffer source types are properly modeled.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        Replace use of now repurposed IDLBufferSource, with its definition, IDLUnion<IDLArrayBufferView, IDLArrayBuffer>.

        * bindings/scripts/CodeGenerator.pm:
        (IsBufferSourceType):
        Renamed from IsTypedArrayType.

        (IsNonPointerType): Deleted.
        Was only used by DumpRenderTree and WebKitTestRunner generators. They have 
        been switched to the equivalent IsPrimitiveType.

        (IsTypedArrayType): Deleted.
        Renamed to IsBufferSourceType.

        (IsRefPtrType): Deleted. Unused.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (AddClassForwardIfNeeded):
        (GetArgumentExceptionFunction):
        (GetAttributeExceptionFunction):
        (PassArgumentExpression):
        (GenerateDefaultValue):
        (GenerateOverloadDispatcher):
        (ShouldPassArgumentByReference):
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        Update for rename of IsTypedArrayType -> IsBufferSourceType and remove specialized BufferSource
        condition.

        (GetBaseIDLType):
        Add mappings for new buffer source types.

        * bindings/scripts/IDLParser.pm:
        (Parse):
        Insert builtin typedefs to the typedef map before parsing.

        (addBuiltinTypedefs):
        Generate typedefs for BufferSource and DOMTimeStamp as specified by WebIDL.

        (applyTypedefs):
        Add support for applying typedefs to iterable and maplike, necessary now because BufferSource
        is used as the key to iterable in MediaKeyStatusMap.idl

        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.h:
        Update test results.

        * bindings/scripts/test/TestTypedefs.idl:
        Add tests for builtin typedefs.

        * Modules/geolocation/Geoposition.idl:
        * dom/Event.idl:
        * fileapi/Blob.idl:
        * fileapi/File.idl:
        * page/FrameView.h:
        * xml/XMLHttpRequest.idl:
        Remove typedef for DOMTimeStamp and BufferSource which are now automatically included.

2017-06-19  Adrian Perez de Castro  <aperez@igalia.com>

        Missing <functional> includes make builds fail with GCC 7.x
        https://bugs.webkit.org/show_bug.cgi?id=173544

        Unreviewed gardening.

        Fix compilation with GCC 7.

        * Modules/mediastream/MediaStreamRegistry.h:
        * animation/DocumentAnimation.h:
        * page/WheelEventTestTrigger.h:
        * page/csp/ContentSecurityPolicy.h:
        * platform/Timer.h:
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        * platform/network/NetworkStorageSession.h:

2017-06-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix after r218484.

        Properly access the GCryptCipherOperation type (now CipherOperation)
        in the PAL::GCrypt namespace. This somehow worked in local builds.

        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::callOperation):
        (WebCore::gcryptAES_CTR):

2017-06-19  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] AES_CTR support
        https://bugs.webkit.org/show_bug.cgi?id=171420

        Reviewed by Michael Catanzaro.

        Implement AES_CTR support for build configurations that use libgcrypt.

        Both encryption and decryption operations are handled in a single gcryptAES_CTR() function,
        with the specific operation being passed as the first argument. The appropriate AES
        algorithm is picked, and a gcry_cipher_hd_t object is created and has the given key set.
        This key will remain the same throughout the gcry_cipher_hd_t lifetime, even after
        gcry_cipher_reset() calls.

        The encrypt/decrypt operation is wrapped into a helper lambda functor that accepts the
        given counter and input data. It resets the cipher object, sets the counter data, and
        performs the specified operation, returning the output data.

        libgcrypt doesn't support setting counter data on a gcry_cipher_hd_t object with only
        part of that data being used as the actual counter, with the rest acting as a nonce, like
        the Web Crypto specification allows. We have to implement the support for that on our own.

        We compute the number of blocks we'll be processing and the upper exclusive limit for the
        given counter length. We immediately bail if the counter limit is less than the computed
        block count, since that would mean that the counter values would be repeated.

        We short-cut to a direct operation call if the counter length matches size of the counter
        data -- we don't have to adjust the counter data in any way if that's the case.

        Otherwise we move counter data into the MPI format. The nonce and the actual counter MPIs
        can split out of the counter data MPI with the modulus operation and the counter limit MPI.

        We take another shortcut straight to the operation call if we're able to determine that the
        'counter leeway' value, i.e. the difference between the initial counter MPI and the counter
        limit MPI, is larger or equal to the predicted block size -- if that's the case, the counter
        won't wrap around and change the nonce data.

        In worst-case scenario the counter data will wrap around and we have to address that. The
        current implementation takes the slowest possible path for the moment, encrypting/decrypting
        each block separately. For each step the counter is combined with the nonce, the resulting
        MPI data retrieved and passed to the operation function, and the returned block output
        appended to the final output vector. The counter MPI is then incremented and ran through the
        modulus operation, limiting the MPI value to the previously-computed counter limit.

        No new tests -- relevant tests are passing and are unskipped.

        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::callOperation):
        (WebCore::gcryptAES_CTR):
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):

2017-05-14 Frederic Wang  <fwang@igalia.com>

        Add heuristic to avoid flattening "fullscreen" iframes
        https://bugs.webkit.org/show_bug.cgi?id=171914

        Reviewed by Simon Fraser.

        Some authors implement fullscreen popups as out-of-flow iframes with size set to full viewport (using vw/vh CSS units).
        When iframe flattening is enabled, such iframes may unexpectedly become larger than the viewport.
        This commit adds a simple heuristic to avoid frame flattening in that case.
        It is experimented by introducing a "enable for non-fullscreen iframes" state for the frame
        flattening setting.
        The default frame flattening is still either disabled or (fully) enabled on all platforms.
        InternalSettings is also adjusted so that the tests can still set the frame flattening setting.

        Test: fast/frames/flattening/iframe-flattening-fullscreen.html

        * page/FrameView.cpp:
        (WebCore::FrameView::frameFlatteningEnabled): Use the frame flattening enum setting.
        * page/Settings.h: Define a frame flattening enum that includes a "enable for non-fullscreen
        iframes" state.
        * page/Settings.in: Redefine frame flattening using that enum.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::flattenFrameSet): Use the frame flattening enum setting.
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::isFullScreenIFrame): Add a heuristic when partial frame flattening
        is enabled setting is enabled.
        There is not a strict comparison against the viewport size since authors may not exactly use
        100vw/100vh.
        Anyway, it is hard to do such comparison using the resolved width & height on RenderStyle.
        (WebCore::RenderIFrame::flattenFrame): Add a comment for the existing "zero size" heuristic.
        Use isFullScreenIFrame heuristic.
        * rendering/RenderView.cpp:
        (WebCore::FrameFlatteningLayoutDisallower::FrameFlatteningLayoutDisallower): Use the frame flattening enum setting.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Add backup for frame flattening.
        (WebCore::InternalSettings::Backup::restoreTo): Ditto.
        (WebCore::internalSettingsToWebCoreValue): Helper function to cast the frame flattening values.
        (WebCore::InternalSettings::setFrameFlattening): Redefine setFrameFlattening to accept an enum.
        * testing/InternalSettings.h: Define new enum & setter for frame flattening as well as a backup value.
        * testing/InternalSettings.idl: Define new enum & setter for frame flattening.

2017-06-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r218253): Infinite animated gifs no longer loop
        https://bugs.webkit.org/show_bug.cgi?id=173464

        Reviewed by Carlos Alberto Lopez Perez.

        After the first loop iteration we keep rendering the same frame all the time, so it looks like if the animation
        stopped. This is because in r218253 we changed to use SharedBuffer instead of a Vector in ImageBackingStore, but
        we are not correctly copying the data in the copy constructor. We are using SharedBuffer::copy() that doesn't
        actually copy the data of the segments.

        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::ImageBackingStore): Copy the data of the other SharedBuffer.

2017-06-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] MainThreadNotifier ASSERTION FAILED: m_boundThread == currentThread() in _WebKitWebSrcPrivate::~_WebKitWebSrcPrivate
        https://bugs.webkit.org/show_bug.cgi?id=152043

        Reviewed by Xabier Rodriguez-Calvar.

        Stop using a WeakPtr in MainThreadNotifier, because it's not thread safe, which causes a crash in debug builds when
        the notifier is destroyed in a different thread. Make MainThreadNotifier thread safe refcounted instead, and add
        an invalidate() method to mark it as invalid.

        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged):
        * platform/graphics/gstreamer/MainThreadNotifier.h:
        (WebCore::MainThreadNotifier::MainThreadNotifier): Deleted.
        (WebCore::MainThreadNotifier::notify): Deleted.
        (WebCore::MainThreadNotifier::cancelPendingNotifications): Deleted.
        (WebCore::MainThreadNotifier::addPendingNotification): Deleted.
        (WebCore::MainThreadNotifier::removePendingNotification): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::videoChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::videoSinkCapsChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::audioChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::textChangedCallback):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
        (WebCore::TrackPrivateBaseGStreamer::~TrackPrivateBaseGStreamer):
        (WebCore::TrackPrivateBaseGStreamer::disconnect):
        (WebCore::TrackPrivateBaseGStreamer::activeChangedCallback):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (webKitWebSrcDispose):
        (webKitWebSrcStop):
        (webKitWebSrcStart):
        (webKitWebSrcNeedData):
        (webKitWebSrcEnoughData):
        (webKitWebSrcSeek):

2017-06-18  Ryosuke Niwa  <rniwa@webkit.org>

        Meter element doesn't respect the writing direction
        https://bugs.webkit.org/show_bug.cgi?id=173507

        Reviewed by Sam Weinig.

        The bug was caused by NSLevelIndicatorCell no longer using the value of baseWritingDirection
        to determine the direction of rendering in macOS Sierra and later. It instead relies on
        the value of userInterfaceLayoutDirection.

        Fixed the bug by setting both values. Once we dropped the support for macOS El Capitan
        and earlier, we can remove the code to set baseWritingDirection.

        Test: fast/dom/HTMLMeterElement/meter-rtl.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::levelIndicatorFor):

2017-06-18  Dewei Zhu  <dewei_zhu@apple.com>

        Remove 'EditCommand::isEditCommandComposition'.
        https://bugs.webkit.org/show_bug.cgi?id=173525

        Reviewed by Wenson Hsieh.

        Should remove 'isEditCommandComposition' from 'EditCommand' for:
            1. 'EditCommandComposition' is no longer a subclass of EditCommand.
            2. 'isEditCommandComposition' is not used at all.

        * editing/EditCommand.h:
        (WebCore::EditCommand::isCompositeEditCommand):
        (WebCore::EditCommand::isEditCommandComposition): Deleted.

2017-06-18  Chris Dumez  <cdumez@apple.com>

        Crash when re-entering MediaDevicesEnumerationRequest::cancel()
        https://bugs.webkit.org/show_bug.cgi?id=173522
        <rdar://problem/31185739>

        Reviewed by Darin Adler.

        When a MediaDevicesRequest is started, it creates a MediaDevicesEnumerationRequest
        object and passes a completion handler to that MediaDevicesEnumerationRequest
        object. The completion handler holds a reference to the MediaDevicesRequest object
        so that its stays alive until the MediaDevicesEnumerationRequest either completes
        or is canceled. MediaDevicesRequest also holds a reference to the
        MediaDevicesEnumerationRequest object via its m_enumerationRequest data member.

        When the document is destroyed, both MediaDevicesRequest::contextDestroyed() and
        MediaDevicesEnumerationRequest::contextDestroyed() gets called and the other is not
        pre-determined. If MediaDevicesEnumerationRequest::contextDestroyed() gets called
        first then it calls MediaDevicesEnumerationRequest::cancel(). Calling cancel() ends
        up destroying the completion handler. Destroying the completion handler ends up
        dereferencing and destroying the MediaDevicesRequest object. The MediaDevicesRequest
        destructor would call MediaDevicesEnumerationRequest::cancel() again, causing us to
        re-enter it and assign nullptr to the completion callback again. Re-entering
        std::function's operator=(nullptr_t) is not safe because of the way it is implemented
        as we end up trying to destroy the lambda twice and crashing. Using a WTF::Function
        instead fixes this particular issue because re-entering WTF::Function's operator=(nullptr_t)
        is safe.

        However, this fix is not sufficient. Calling the MediaDevicesRequest destructor also
        dereferencing and destroys the MediaDevicesEnumerationRequest object. As a result,
        when MediaDevicesEnumerationRequest::contextDestroyed() returns from its call to cancel
        |this| is already dead when we call ContextDestructionObserver::contextDestroyed().
        To address this issue, we now protect |this| in MediaDevicesEnumerationRequest::contextDestroyed().

        Test: fast/mediastream/destroy-document-while-enumerating-devices.html

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        (WebCore::MediaDevicesEnumerationRequest::contextDestroyed):
        Protect |this| as the call to cancel() may destroy |this| before calling
        ContextDestructionObserver::contextDestroyed() otherwise.

        * Modules/mediastream/MediaDevicesEnumerationRequest.h:
        Use WTF::Function instead of std::function for the completion handler as
        it is safer (in terms of re-entrency) and avoids unnecessary copying.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::~MediaDevicesRequest):
        Stop calling MediaDevicesEnumerationRequest::cancel(). When the destructor
        is called, the MediaDevicesEnumerationRequest has either completed or been
        canceled so there is no need to cancel again. I added an assertion to
        make sure it is the case. This avoids re-entering
        MediaDevicesEnumerationRequest::cancel() is some cases, which was risky.

        (WebCore::MediaDevicesRequest::start):
        Add comment for clarity and capture a Ref<> instead of a RefPtr<> now that
        we can since we use WTF::Function.

2017-06-18  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in WTF/
        https://bugs.webkit.org/show_bug.cgi?id=173519

        Reviewed by Sam Weinig.

        Replace a few uses of std::function with WTF::Function in WebCore/
        as well. It was either this or including <functional> and I decided
        it made more sense to port the code.

        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::FontSelectionAlgorithm::iterateActiveCapabilitiesWithReturn):
        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::StringConstraint::find):
        (WebCore::MediaTrackConstraintSetMap::forEach):
        (WebCore::MediaTrackConstraintSetMap::filter):
        (WebCore::MediaConstraints::isConstraintSet):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::NumericConstraint::find):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::applyConstraint):

2017-06-18  Jer Noble  <jer.noble@apple.com>

        [MSE] Seeking or entering fullscreen can cause extreme CPU usage
        https://bugs.webkit.org/show_bug.cgi?id=173505

        Reviewed by Tim Horton.

        When support for painting MSE to WebGL was added in r217185, the implementation of
        SourceBufferPrivateAVFObjC::isReadyForMoreSamples() was modified to support asking
        the decompression session if it was ready. That change, however, caused an extreme
        performance regression in the normal playback path, where WebKit will effectively
        append samples endlessly to the AVSampleBufferDisplayLayer, which admirably enqueued
        each of them for decoding. Eventually, the cost of iterating over the CMBufferQueue
        overwhelmed the cost of decoding, and caused the extreme lag seen when seeking.

        Make sure to property query the AVSampleBufferDisplayLayer for isReadyForMoreMediaData
        before enqueuing.

        A previous version of this patch exposed some errors which caused failing tests:

        In sourceBufferPrivateDidReceiveSample(), we were using local versions of
        presentationTimestamp and decodeTimestamp as keys to the decodeQueue; those local versions
        were floating point values (because MediaTime + float = float), but the sample itself uses
        non-floating point MediaTimes. This causes samples to be left in the queue when they should
        be removed.

        In didBecomeReadyForMoreSamples(), we were getting spurious assertions when a
        AVSampleBufferDisplayLayer or a AVSampleBufferAudioRenderer would fire a callback from
        -requestMediaDataWhenReadyOnQueue:usingBlock: even after it had been told to
        -stopRequestingMediaData. Apparently it's expected behavior and so an ASSERT_NOT_REACHED is
        inappropriate here.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples):


2017-06-17  Zalan Bujtas  <zalan@apple.com>

        Addressing post-review comment after r218456.
        https://bugs.webkit.org/show_bug.cgi?id=173509

        Reviewed by Darin Adler.

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

2017-06-17  Chris Dumez  <cdumez@apple.com>

        DOMQuad::getBounds() should return a Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=173517

        Reviewed by Simon Fraser.

        DOMQuad::getBounds() should return a Ref<> as it cannot return
        null.

        * dom/DOMQuad.cpp:
        (WebCore::DOMQuad::getBounds):
        * dom/DOMQuad.h:

2017-06-17  Simon Fraser  <simon.fraser@apple.com>

        Implement DOMQuad
        https://bugs.webkit.org/show_bug.cgi?id=163534

        Reviewed by Sam Weinig.

        Implement DOMQuad per https://drafts.fxtf.org/geometry/#DOMQuad, other than serialization
        which requires some bindings changes.

        web-platform-tests/css/geometry-1/DOMRect-001.html tests against an older version of the spec,
        so has some failures. DOMQuad-002.html passes, other than a NaN propagation issue that requires
        spec clarification.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMQuadCustom.cpp: Added.
        (WebCore::JSDOMQuad::getBounds):
        * bindings/scripts/CodeGenerator.pm:
        (IsSerializableDOMType):
        (IsSerializableAttribute):
        * dom/DOMPoint.h:
        * dom/DOMQuad.cpp: Added.
        (WebCore::DOMQuad::DOMQuad):
        (WebCore::DOMQuad::getBounds):
        * dom/DOMQuad.h: Added.
        (WebCore::DOMQuad::create):
        (WebCore::DOMQuad::fromRect):
        (WebCore::DOMQuad::fromQuad):
        (WebCore::DOMQuad::p1):
        (WebCore::DOMQuad::p2):
        (WebCore::DOMQuad::p3):
        (WebCore::DOMQuad::p4):
        * dom/DOMQuad.idl: Added.
        * dom/DOMQuadInit.h: Added.
        * dom/DOMQuadInit.idl: Added.

2017-06-17  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in WebKit2/
        https://bugs.webkit.org/show_bug.cgi?id=173504

        Reviewed by Darin Adler.

        Use WTF::Function instead of std::function in WebKit2/ to avoid
        unnecessary copying.

        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::PaymentCoordinator::openPaymentSetup):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * loader/EmptyClients.cpp:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::willSendRequest):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:

2017-06-17  Zalan Bujtas  <zalan@apple.com>

        Demote the "we have navigated away" check to an assertion.
        https://bugs.webkit.org/show_bug.cgi?id=173509

        Reviewed by Simon Fraser.

        Now that the expected behavior is that the render tree can't get to the page cache, it's ok to assert.
        TODO: We should also have view() check removed at some point.

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

2017-06-17  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build

        * PlatformMac.cmake:
        * bindings/js/ScriptGlobalObject.cpp:

2017-06-17  Commit Queue  <commit-queue@webkit.org>

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

        Caused imported/w3c/web-platform-tests/media-
        source/mediasource* tests to fail (Requested by smfr on
        #webkit).

        Reverted changeset:

        "[MSE] Seeking or entering fullscreen can cause extreme CPU
        usage"
        https://bugs.webkit.org/show_bug.cgi?id=173505
        http://trac.webkit.org/changeset/218438

2017-06-17  Antti Koivisto  <antti@apple.com>

        Crash due to infinite recursion via FrameSelection::updateAppearanceAfterLayout
        https://bugs.webkit.org/show_bug.cgi?id=173468

        Reviewed by Ryosuke Niwa.

        Test: editing/selection/updateAppearanceAfterLayout-recursion.html

        Calling FrameSelection::updateAppearanceAfterLayout() from Document::resolveStyle is unsafe
        because it may cause another call to resolveStyle. We have some cases where the style
        is still unclean when updateAppearanceAfterLayout() is called. This can lead to infinite
        recursion.

        The test case is not the common stack seen in CrashTracer (couldn't quit replicate it) but
        the updateAppearanceAfterLayout/resolveStyle recursion is the same.

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

            Normally selection appearance update is done in post-layout but not all style resolutions schedule a layout.
            Invoke it asynchronously in that case instead of the previous synchronous call.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::updateAppearanceAfterLayout):
        (WebCore::FrameSelection::scheduleAppearanceUpdateAfterStyleChange):
        (WebCore::FrameSelection::appearanceUpdateTimerFired):
        (WebCore::FrameSelection::updateAppearanceAfterLayoutOrStyleChange):
        * editing/FrameSelection.h:

2017-06-17  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build.

        * PlatformMac.cmake:

2017-06-17  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r209495): materiauxlaverdure.com fails to load
        https://bugs.webkit.org/show_bug.cgi?id=173301
        <rdar://problem/32624850>

        Reviewed by Antti Koivisto.

        The bug was caused by WebKit wrapping CSS string values with single quotation marks instead of
        double quotation marks as spec'ed in https://drafts.csswg.org/cssom/#serialize-a-string and
        implemented in Firefox and Chrome.

        The website eval's the computed value of the `content` CSS property with the value `'{name: "flat"}'`
        after stripping single quotation marks from both ends. Prior to r209495, WebKit serialized this CSS value
        in single quotations without escaping double quotations. After r209495, double quotations are escaped
        with backslashes as `'{name: \"flat\"}'`. As a result, `eval` is invoked with `{name: \"flat\"}`
        after stripping single quotations from both ends, which resulted in an exception.

        Chrome and Firefox don't encounter this exception despite of the fact they escape double quotations
        as well because serialize with double quotations as `"{name: \"flat\"}"`. Because there is no code
        to strip double quotations, eval is invoked with the same string, resulting in the entire value as
        being parsed as string, instead of an object with a single key "name" with the value of "flat" as
        was the case in WebKit prior to r209495. While this behavior was most certainly not the intent of
        the website author, Chrome and Firefox don't encounter an exception and the website continues to work.

        This patch aligns WebKit's behavior to that of the CSS OM specification, Firefox, and Chrome by
        serializing CSS string values using double quotation marks instead of single quotation marks.

        Note: inline change log comments are added below for every call site of serializeString for clarity.

        Test: fast/css/getPropertyValue-serialization-with-double-quotes.html

        * css/CSSBasicShapes.cpp:
        (WebCore::buildPathString): Use double quotation marks in path(~) of shapes.
        * css/CSSMarkup.cpp:
        (WebCore::serializeString):
        (WebCore::serializeURL): Use double quotation marks to serialize URLs.
        (WebCore::serializeAsStringOrCustomIdent): Use double quotation marks to serialize strings. We still avoid
        using wrapping the value with double quotations when the value can be an identifier. See r209495.
        (WebCore::serializeFontFamily): Ditto for font-family names such as "San Francisco".
        * css/CSSMarkup.h:
        * css/CSSNamespaceRule.cpp:
        (WebCore::CSSNamespaceRule::cssText): Use double quotation marks to serialize namespace URIs.
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText): Use double quotation marks to serialize
        the separators; e.g. counter(sectionNumber, ".") to produce "1.".
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText): Use double quotation marks to serialize attribute values.
        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::serialize): Use double quotation marks to serialize strings in @support.
        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::extractTextStyles): Updated to strip double quotation marks in font family names to
        maintain the compatibility with old versions of Microsoft Outlook.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapLanguageAttributeToLocale): Use double quotations marks to serialize the value
        of the lang content attribute. It doesn't matter which one is used here because it's only a temporary value
        only fed into the CSS parser to set the equivalent CSS value from the content attribute.

2017-06-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Instrument 2D/WebGL canvas contexts in the backend
        https://bugs.webkit.org/show_bug.cgi?id=172623
        <rdar://problem/32415986>

        Reviewed by Devin Rousso and Joseph Pecoraro.

        Test: inspector/canvas/create-canvas-contexts.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasElement):
        Instrument creation of CSS canvases. This merely registers the canvas
        element with InspectorCanvasAgent and stores the name (identifier passed
        to getCSSCanvasContext) for later use. It isn't until the context is
        actually created that the frontend receives a notification.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext2d):
        (WebCore::HTMLCanvasElement::getContextWebGL):
        Instrument creation of 2D and WebGL canvas contexts.

        * inspector/InspectorAllInOne.cpp:

        * inspector/InspectorCanvasAgent.cpp: Added.
        New backend agent for canvas inspection. Canvas creation and destruction
        are continuously monitored by the agent, regardless of the presence of
        a frontend. This is necessary since there is no way to retrieve the
        rendering contexts for with a given frame once they've been created.

        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::discardAgent):
        Unregister canvas observers to prevent dangling agent pointer.
        (WebCore::InspectorCanvasAgent::enable):
        Dispatch events for existing canvases, now that the frontend exists.
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateCSSCanvas):
        Register the name/identifier associated with the CSS canvas, so that it
        can be retrieved and associated with the rendering context later.

        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        Removes the canvas from the agent, and queues it for notifying the
        frontend during the next event loop.

        (WebCore::InspectorCanvasAgent::canvasDestroyedTimerFired):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::getCanvasEntry):
        (WebCore::InspectorCanvasAgent::buildObjectForCanvas):
        * inspector/InspectorCanvasAgent.h: Added.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvasImpl):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContextImpl):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateCSSCanvas):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext):
        These instrumentation points should not fast return when no frontend
        is attached.

        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorCanvasAgent):
        (WebCore::InstrumentingAgents::setInspectorCanvasAgent):
        Plumbing for the new agent.

2017-06-16  Antoine Quint  <graouts@apple.com>

        Add a WebKit2 setting to control whether media documents should automatically enter fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=173503

        Reviewed by Tim Horton.

        New WebCore setting to specify whether a media document should automatically enter fullscreen.

        * page/Settings.in:

2017-06-16  Jer Noble  <jer.noble@apple.com>

        [MSE] Seeking or entering fullscreen can cause extreme CPU usage
        https://bugs.webkit.org/show_bug.cgi?id=173505

        Reviewed by Tim Horton.

        When support for painting MSE to WebGL was added in r217185, the implementation of
        SourceBufferPrivateAVFObjC::isReadyForMoreSamples() was modified to support asking
        the decompression session if it was ready. That change, however, caused an extreme
        performance regression in the normal playback path, where WebKit will effectively
        append samples endlessly to the AVSampleBufferDisplayLayer, which admirably enqueued
        each of them for decoding. Eventually, the cost of iterating over the CMBufferQueue
        overwhelmed the cost of decoding, and caused the extreme lag seen when seeking.

        Make sure to property query the AVSampleBufferDisplayLayer for isReadyForMoreMediaData
        before enqueuing.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):

2017-06-16  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for HTMLDocument
        https://bugs.webkit.org/show_bug.cgi?id=173444

        Reviewed by Darin Adler.

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::canAccessDocument):
        (WebCore::BindingSecurity::shouldAllowAccessToFrame):
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::showModalDialog):
        Pass ExecState by reference to window accessors.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::incumbentDOMWindow):
        (WebCore::activeDOMWindow):
        (WebCore::firstDOMWindow):
        (WebCore::callerDocument):
        * bindings/js/JSDOMWindowBase.h:
        Pass ExecState by reference to window accessors and add callerDocument.
    
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot): Deleted.
        (WebCore::JSHTMLDocument::all): Deleted.
        (WebCore::JSHTMLDocument::setAll): Deleted.
        (WebCore::findCallingDocument): Deleted.
        (WebCore::JSHTMLDocument::open): Deleted.
        (WebCore::documentWrite): Deleted.
        (WebCore::JSHTMLDocument::write): Deleted.
        Remove custom bindings.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        Add support CallWith=CallerDocument

        * bindings/scripts/IDLAttributes.json:
        Remove CallerWindow, which has not been supported for a while. CallerDocument, despite 
        having it's support removed in the past, was still listed, so keep it.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        Update test results.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createHTMLDocument):
        Update for new signature of Document.write().

        * dom/Document.h:
        * dom/Document.idl:
        * dom/Document.cpp:
        (WebCore::Document::open):
        Add DOMWindow returning overload that calls through to the DOMWindow.
        Add return value and currently not utilized parameters to the Document returning overload.
        Update to return exceptions as specified.

        (WebCore::Document::close):
        Update to return exceptions as specified.

        (WebCore::Document::write):
        (WebCore::Document::writeln):
        Update to take a Vector<String> argument and the caller Document first
        as per convention and return exceptions as specified.

        (WebCore::Document::bgColor):
        (WebCore::Document::setBgColor):
        (WebCore::Document::fgColor):
        (WebCore::Document::setFgColor):
        (WebCore::Document::alinkColor):
        (WebCore::Document::setAlinkColor):
        (WebCore::Document::linkColorForBindings):
        (WebCore::Document::setLinkColorForBindings):
        (WebCore::Document::vlinkColor):
        (WebCore::Document::setVlinkColor):
        (WebCore::Document::clear):
        (WebCore::Document::captureEvents):
        (WebCore::Document::releaseEvents):
        Move from HTMLDocument.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor): Deleted.
        (WebCore::HTMLDocument::setBgColor): Deleted.
        (WebCore::HTMLDocument::fgColor): Deleted.
        (WebCore::HTMLDocument::setFgColor): Deleted.
        (WebCore::HTMLDocument::alinkColor): Deleted.
        (WebCore::HTMLDocument::setAlinkColor): Deleted.
        (WebCore::HTMLDocument::linkColor): Deleted.
        (WebCore::HTMLDocument::setLinkColor): Deleted.
        (WebCore::HTMLDocument::vlinkColor): Deleted.
        (WebCore::HTMLDocument::setVlinkColor): Deleted.
        (WebCore::HTMLDocument::clear): Deleted.
        (WebCore::HTMLDocument::captureEvents): Deleted.
        (WebCore::HTMLDocument::releaseEvents): Deleted.
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:
        Moved operations and attributes to Document.

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        Update for new signature of Document.write().

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::focus):
        * page/DOMWindow.h:
        Use the term incumbentWindow, matching IDL, and so not to be confused
        with the callerWindow, which is slightly different.

2017-06-16  Daniel Bates  <dabates@apple.com>

        Remove header OptionSet.h from FrameLoaderTypes.h
        https://bugs.webkit.org/show_bug.cgi?id=173489

        Reviewed by Joseph Pecoraro.

        Although the header FrameLoaderTypes.h defines exactly one enum class, ReloadOption, whose
        enumerators conform the power of two prerequisite for parameterizing an OptionSet for it
        FrameLoaderTypes.h does not actually make use of the functionality provided by header
        OptionSet.h. And not all source files that include FrameLoaderTypes.h need to use an OptionSet.

        * loader/DocumentLoader.h: Include <wtf/OptionSet.h>.
        * loader/FrameLoader.h: Ditto.
        * loader/FrameLoaderTypes.h: Remove header <wtf/OptionSet.h>.
        * replay/UserInputBridge.h: Include <wtf/Forward.h>.

2017-06-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Upstream iOS drag and drop implementation into OpenSource WebKit
        https://bugs.webkit.org/show_bug.cgi?id=173366
        <rdar://problem/32767014>

        Reviewed by Tim Horton.

        Moves all drag and drop logic previously hidden behind WebKitAdditions into the open source repository, along
        with unit test pages in TestWebKitAPI. Also removes all #includes and #imports of dragging-related files in
        WebKitAdditions from the open source repository.

        This initial upstreaming phase is only concerned with moving code out of WebKitAdditions, and attempts to
        preserve the code as-is, with the exception of trivial style changes so that the open source linter passes.
        Future patches will remove the DATA_INTERACTION feature flag altogether and unobscure all variable and function
        names referencing "data interaction".

        No change in behavior from the internal build.

        * Configurations/FeatureDefines.xcconfig:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::createDraggingDataTransfer):
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::tryToBeginDataInteractionAtPoint):
        * platform/ios/DragImageIOS.mm:
        (WebCore::dragImageSize):
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):
        (WebCore::deleteDragImage):
        (WebCore::createDragImageForLink):
        (WebCore::createDragImageIconForCachedImageFilename):
        (WebCore::platformAdjustDragImageForDeviceScaleFactor):
        (WebCore::createDragImageForSelection):
        (WebCore::dissolveDragImageToFraction):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::setDragImage):
        (WebCore::Pasteboard::createForDragAndDrop):
        * platform/mac/DragDataMac.mm:
        (WebCore::rtfPasteboardType):
        (WebCore::rtfdPasteboardType):
        (WebCore::stringPasteboardType):
        (WebCore::urlPasteboardType):
        (WebCore::htmlPasteboardType):
        (WebCore::colorPasteboardType):
        (WebCore::pdfPasteboardType):
        (WebCore::tiffPasteboardType):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsURL):
        (rtfPasteboardType): Deleted.
        (rtfdPasteboardType): Deleted.
        (stringPasteboardType): Deleted.
        (urlPasteboardType): Deleted.
        (htmlPasteboardType): Deleted.
        (colorPasteboardType): Deleted.
        (pdfPasteboardType): Deleted.
        (tiffPasteboardType): Deleted.

2017-06-16  Youenn Fablet  <youenn@apple.com>

        addTransceiver should trigger mid generation in the SDP
        https://bugs.webkit.org/show_bug.cgi?id=173452

        Reviewed by Alex Christensen.

        Test: webrtc/video-addTransceiver.html

        Adding support for recvonly SDP based on call to addTransceiver.
        Using offer_to_receive options of libwebrtc for that purpose.

        Making sure that addTransceiver and using a real track afterwards is working too.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::enqueueReplaceTrackTask): notify the backend that a track is added in case the sender has no track.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::shouldOfferAllowToReceiveAudio): Detect whether some audio mid should be recvonly.
        (WebCore::LibWebRTCMediaEndpoint::shouldOfferAllowToReceiveVideo): Detect whether some video mid should be recvonly.
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2017-06-16  Youenn Fablet  <youenn@apple.com>

        WebCore::LibWebRTCMediaEndpoint::gatherStatsForLogging is crashing
        https://bugs.webkit.org/show_bug.cgi?id=173493

        Reviewed by Eric Carlson.

        Speculative preventive fix.

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

2017-06-16  Alex Christensen  <achristensen@webkit.org>

        Show punycode to user if a URL has dotless i or j followed by diacritic dot
        https://bugs.webkit.org/show_bug.cgi?id=173431

        Reviewed by Darin Adler.

        Covered by new API tests.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):
        (WebCore::allCharactersInIDNScriptWhiteList):
        (WebCore::createStringWithEscapedUnsafeCharacters):

2017-06-16  Youenn Fablet  <youenn@apple.com>

        [iOS] Switching cameras in a WebRTC call makes black frames being sent
        https://bugs.webkit.org/show_bug.cgi?id=173486

        Reviewed by Eric Carlson.

        Test: webrtc/video-replace-muted-track.html

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::updateBlackFramesSending):
        Ensuring the timer is stopped if needed.
        (WebCore::RealtimeOutgoingVideoSource::initializeFromSource):
        Calling updateBlackFramesSending to stop sending frame if needed.

2017-06-16  Youenn Fablet  <youenn@apple.com>

        Remove replaceTrack restriction about video resolution
        https://bugs.webkit.org/show_bug.cgi?id=173490

        Reviewed by Eric Carlson.

        Covered by updated tests.

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::setSource):

2017-06-16  Jeremy Jones  <jeremyj@apple.com>

        Handle timeout of prepareForPictureInPictureStopWithCompletionHandler.
        https://bugs.webkit.org/show_bug.cgi?id=173462
        rdar://problem/32128170

        Reviewed by Jer Noble.

        No new tests because no effect on the DOM.

        If WebVideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler doesn't respond fast enough,
        the caller will timeout and call will/didStopPictureInPicture.

        This is getting fullscreen state confused.

        This change keeps state consistent by handling will/didStopPictureInPicture possibly being called before
        prepareForPictureInPictureStopWithCompletionHandler calls its callback.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::willStopPictureInPicture):
        (WebVideoFullscreenInterfaceAVKit::didStopPictureInPicture):
        (WebVideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler):
        (WebVideoFullscreenInterfaceAVKit::watchdogTimerFired):

2017-06-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Make builds faster after r218371
        https://bugs.webkit.org/show_bug.cgi?id=173453

        Reviewed by Tim Horton.

        Remove #includes from .h files.

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj: Add new .cpp file, and sort the project file
        * platform/graphics/FontFamilySpecificationNull.cpp: Copied from Source/WebCore/platform/graphics/FontFamilySpecificationNull.h.
        (WebCore::FontFamilySpecificationNull::fontRanges):
        * platform/graphics/FontFamilySpecificationNull.h:
        (WebCore::FontFamilySpecificationNull::fontRanges): Deleted.
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::FontFamilySpecificationCoreText):
        (WebCore::FontFamilySpecificationCoreText::~FontFamilySpecificationCoreText):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.h:
        (WebCore::FontFamilySpecificationCoreText::FontFamilySpecificationCoreText): Deleted.

2017-06-16  Chris Dumez  <cdumez@apple.com>

        [WK2] Add WKProcessPool SPI to efficiently reset all plugin load client policies
        https://bugs.webkit.org/show_bug.cgi?id=173472
        <rdar://problem/28858817>

        Reviewed by Brady Eidson.

        Add PluginLoadClientPolicyMaximum value to PluginLoadClientPolicy enumeration
        to facilitate input value validation on API side.

        * plugins/PluginData.h:

2017-06-16  Jer Noble  <jer.noble@apple.com>

        [iOS] Do not pause playing video when application resigns active state.
        https://bugs.webkit.org/show_bug.cgi?id=173474

        Reviewed by Tim Horton.

        Test: media/video-inactive-playback.html

        Separate out the concept of "inactive" playback from "process background" playback.
        Move the implementation of applicationDidEnterBackground() from MediaSessionManagerIOS
        into it's superclass, PlatformMediaSessionManager, and add a new set of restrictions
        for "InactiveProcessPlaybackRestricted" and "SuspendedUnderLockPlaybackRestricted".
        Leave the default restriction set for iOS as "BackgroundProcessPlaybackRestricted" and
        "SuspendedUnderLockPlaybackRestricted", to preserve the existing behavior of suspending
        playback when switching apps or when locking the device.

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::interruptionName):
        * platform/audio/PlatformMediaSession.h:
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::applicationWillBecomeInactive):
        (WebCore::PlatformMediaSessionManager::applicationDidBecomeActive):
        (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterBackground): Deleted.
        (WebCore::PlatformMediaSessionManager::applicationDidEnterForeground): Deleted.
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        (-[WebMediaSessionHelper applicationDidBecomeActive:]):
        (-[WebMediaSessionHelper applicationWillResignActive:]):
        (WebCore::MediaSessionManageriOS::applicationDidEnterBackground): Deleted.
        (WebCore::MediaSessionManageriOS::applicationWillEnterForeground): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::applicationWillBecomeInactive):
        (WebCore::Internals::applicationDidBecomeActive):
        (WebCore::Internals::applicationWillEnterForeground):
        (WebCore::Internals::applicationDidEnterBackground):
        (WebCore::Internals::setMediaSessionRestrictions):
        (WebCore::Internals::applicationDidEnterForeground): Deleted.
        (WebCore::Internals::applicationWillEnterBackground): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-16  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r213126): Sync XHR needs partition for cache and credentials
        https://bugs.webkit.org/show_bug.cgi?id=173496
        <rdar://problem/31943596>

        Reviewed by Darin Adler.

        Test: http/tests/security/sync-xhr-partition.html

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

2017-06-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r218402 and r218404.
        https://bugs.webkit.org/show_bug.cgi?id=173494

        Seems to have mysteriously broken the build in bizarre ways
        (Requested by thorton on #webkit).

        Reverted changesets:

        "Include a few widespread WTF headers in WebCorePrefix.h"
        https://bugs.webkit.org/show_bug.cgi?id=173481
        http://trac.webkit.org/changeset/218402

        "Fix the Windows build after r218402"
        http://trac.webkit.org/changeset/218404

2017-06-16  Brady Eidson  <beidson@apple.com>

        REGRESSION (r218015) IconLoaders for already-cached resources expect to be asynchronous, no longer are.
        <rdar://problem/32817519> and https://bugs.webkit.org/show_bug.cgi?id=173478

        Reviewed by Daniel Bates.

        Covered by API test.

        Being synchronous is actually better as it's resolved another issue or two.
        But only if we can actually deliver the data without crashing first.
        So let's do that.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::didGetLoadDecisionForIcon): Put the IconLoader in the set of active icon loaders
          before actually starting the icon loading.

2017-06-16  Jeremy Jones  <jeremyj@apple.com>

        Don't use WebCore Timer from code that runs in the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=173460
        rdar://problem/32750731

        Reviewed by Jer Noble.

        If a WebCore Timer is fired from the WebKit2 UI process, it will
        create a web thread, which can cause a crash in this instance.

        It was also causing the timer to be called back on the wrong thread.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit):

2017-06-16  Timothy Horton  <timothy_horton@apple.com>

        Fix the Windows build after r218402

        * WebCorePrefix.h:
        I typed #import instead of #include on auto-pilot, and ... it mostly worked!
        Except Windows.

2017-06-16  Jeremy Jones  <jeremyj@apple.com>

        Hide inline captions in fullscreen. Remove fullscreen captions when no longer needed.
        https://bugs.webkit.org/show_bug.cgi?id=173482

        Reviewed by Eric Carlson.

        Hide the inline captions while they are presenting to fullscreen.
        Remove the text track representation as soon as it is no longer needed.
        This allows the text track to render properly when returning to inline.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateTextTrackRepresentation):

2017-06-16  Tim Horton  <timothy_horton@apple.com>

        Include a few widespread WTF headers in WebCorePrefix.h
        https://bugs.webkit.org/show_bug.cgi?id=173481

        Reviewed by Alex Christensen.

        * WebCorePrefix.h:
        These are four of the headers that contribute the most pre-processed
        source to the WebCore build. They (and their dependents) change infrequently
        enough that a world rebuild of WebCore when they change seems like an
        acceptable tradeoff for the ~9% reduction in WebCore build time that I
        measure from this change.

2017-06-16  Antoine Quint  <graouts@apple.com>

        REGRESSION: AirPlay placard is not shown when in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=173447
        <rdar://problem/32803773>

        Reviewed by Jon Lee.

        We only allowed a placard to be set on inline controls, but that was an oversight: placards
        should be displayed in fullscreen as well. As such, we move the "placard" property up from
        InlineMediaControls to MediaControls, and update the layout() logic in MacOSFullscreenMediaControls
        to display a placard.

        Test: media/modern-media-controls/placard-support/placard-support-airplay-fullscreen.html

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls):
        (InlineMediaControls.prototype.layout):
        (InlineMediaControls.prototype.get placard): Deleted.
        (InlineMediaControls.prototype.set placard): Deleted.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.layout):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get placard):
        (MediaControls.prototype.set placard):
        (MediaControls.prototype.placardPreventsControlsBarDisplay):
        (MediaControls.prototype.layout):
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype._updatePlacard):
        (PlacardSupport):

2017-06-16  Jer Noble  <jer.noble@apple.com>

        [WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=173398
        <rdar://problem/32592961>

        Reviewed by Eric Carlson.

        API Test: Tests/WebKit2/MediaStreamTrackDetached.mm

        Move the definition of a MediaStream as a MediaProducer from the stream itself to its constituent
        MediaStreamTracks. This ensures that, even if a MediaStreamTrack is removed from its stream, the
        document (and thus the clients) are notified that media capture is still occurring.

        Though MediaStream is no longer a MediaProducer, it still uses the MediaProducer's state concept
        to determine when to fire events. However it's mediaState() implementation will be moved into
        MediaStreamTrack, and will instead simply bitwise-or together each of it's track's mediaState().

        The MediaStream notifies the document that its state has changed asynchronously, so do the same
        for MediaStreamTrack (which reduces the number of calls to the client when changes all occur
        during a single run loop).

        Because the MediaStreamTrackPrivate may be started externally (not by the MediaStreamTrack directly),
        add a new client method that notifies observers when the track has been started, and the
        MediaStreamTrack will use this notification to update the document with it's new mediaState().

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::mediaState):
        (WebCore::MediaStream::statusDidChange):
        (WebCore::MediaStream::characteristicsChanged):
        (WebCore::MediaStream::pageMutedStateDidChange): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::pageMutedStateDidChange):
        (WebCore::MediaStreamTrack::mediaState):
        (WebCore::MediaStreamTrack::trackStarted):
        (WebCore::MediaStreamTrack::configureTrackRendering):
        (WebCore::MediaStreamTrack::stop):
        (WebCore::MediaStreamTrack::document):
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::source):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::trackStarted):
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::sourceStarted):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::start):
        * platform/mediastream/RealtimeMediaSource.h:

2017-06-16  Antoine Quint  <graouts@apple.com>

        Backdrop blur missing in media controls bar on Sierra
        https://bugs.webkit.org/show_bug.cgi?id=173451

        Reviewed by Simon Fraser.

        On Sierra, we need to enforce a stacking context on controls bars to guarantee that
        the backdrop filters on the BackgroundTint are applied correctly.

        Test: media/modern-media-controls/controls-bar/controls-bar-stacking-context.html

        * Modules/modern-media-controls/controls/controls-bar.css:
        (.controls-bar):

2017-06-16  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218375.

        The API test MediaStreamTrackDetached is still timing out
        after the patch

        Reverted changeset:

        "[WebRTC] Removing a MediaStreamTrack from a MediaStream
        reports no recording to WebKit clients"
        https://bugs.webkit.org/show_bug.cgi?id=173398
        http://trac.webkit.org/changeset/218375

2017-06-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION: Media control glyphs appear to invert colors when video is dragged
        https://bugs.webkit.org/show_bug.cgi?id=173455
        rdar://problem/32726887

        Reviewed by Tim Horton.

        Masks on composited layers were not correctly painted in drag images, because RenderLayer::paintLayerContents()
        failed to pass the PaintBehaviorFlattenCompositingLayers flag down through the mask drawing code, causing
        RenderBox::paintMaskImages() to fall into the composited mask code path.

        Fix by making a local copy of PaintBehavior, and setting the PaintBehaviorFlattenCompositingLayers and PaintBehaviorSnapshotting
        bits on it as appropriate, and passing it into paintMaskForFragments() and paintChildClippingMaskForFragments(). This is similar
        to code above.

        Can't test drag images.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintChildClippingMaskForFragments):
        * rendering/RenderLayer.h:

2017-06-16  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218376.

        The patch cause multiple Layout Test Crashes.

        Reverted changeset:

        "Web Inspector: Instrument 2D/WebGL canvas contexts in the
        backend"
        https://bugs.webkit.org/show_bug.cgi?id=172623
        http://trac.webkit.org/changeset/218376

2017-06-16  Daniel Bates  <dabates@apple.com>

        Use the term icon instead of favicon
        https://bugs.webkit.org/show_bug.cgi?id=173400

        Reviewed by Alex Christensen.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        (WebCore::InspectorPageAgent::cachedResourceType):
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        (isType):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isMainOrMediaOrIconOrRawResource):
        (WebCore::CachedResource::ignoreForRequestCount):
        (WebCore::CachedResource::isMainOrMediaOrFaviconOrRawResource): Deleted.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestIcon):
        (WebCore::contentTypeFromResourceType):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore::CachedResourceLoader::requestFavicon): Deleted.
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):

2017-06-16  Per Arne Vollan  <pvollan@apple.com>

        WebKit does not honor closed caption stroke width.
        https://bugs.webkit.org/show_bug.cgi?id=173402

        Reviewed by Eric Carlson.

        WebKit currently has an upper limit on the stroke width returned from MACaptionAppearanceCopyFontDescriptorWithStrokeForStyle.
        Since only half the stroke is visible because the stroke is drawn before the fill, double the stroke width from
        MediaAccessibility to get the correct visual stroke width. Also, the stroke width returned from this function should not be
        interpreted as CSS points, but as CSS pixels.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateTextStrokeStyle):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionStrokeWidthForFont):

2017-06-16  Per Arne Vollan  <pvollan@apple.com>

        [Win] WebKit renders scrollbar wrong at 125% scale.
        https://bugs.webkit.org/show_bug.cgi?id=173363

        Reviewed by Darin Adler.

        Scrollbars are drawn with the GDI function DrawThemeBackground. Sometimes, the GDI clip
        rectangle will be too small since we clamp a FloatRect to integer values when setting the
        GDI clip rectangle.

        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::clip):

2017-06-15  Mark Lam  <mark.lam@apple.com>

        Add a JSRunLoopTimer registry in VM.
        https://bugs.webkit.org/show_bug.cgi?id=173429
        <rdar://problem/31287961>

        Reviewed by Filip Pizlo.

        No new tests needed because:
        1. it's already covered: it was also originally discovered by our API tests while
           running on the iOS simulator. The test was intermittently failing on a debug
           build.
        2. the issue is racy (it depends on a JSRunLoopTimer firing at the right time).
           Hence, it's non trivial to write a better test than the one we already have.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):

2017-06-15  Antoine Quint  <graouts@apple.com>

        REGRESSION: AirPlay button is incorrectly highlighted in inline and fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=173446

        Reviewed by Dean Jackson.

        A button's color should be applied to its <picture> element, not the containing
        <button> element.

        * Modules/modern-media-controls/controls/airplay-button.css:
        (button.airplay.on > picture):
        (button.airplay.on): Deleted.

2017-06-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Instrument 2D/WebGL canvas contexts in the backend
        https://bugs.webkit.org/show_bug.cgi?id=172623
        <rdar://problem/32415986>

        Reviewed by Devin Rousso.

        Test: inspector/canvas/create-canvas-contexts.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasElement):
        Instrument creation of CSS canvases. This merely registers the canvas
        element with InspectorCanvasAgent and stores the name (identifier passed
        to getCSSCanvasContext) for later use. It isn't until the context is
        actually created that the frontend receives a notification.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext2d):
        (WebCore::HTMLCanvasElement::getContextWebGL):
        Instrument creation of 2D and WebGL canvas contexts.

        * inspector/InspectorAllInOne.cpp:

        * inspector/InspectorCanvasAgent.cpp: Added.
        New backend agent for canvas inspection. Canvas creation and destruction
        are continuously monitored by the agent, regardless of the presence of
        a frontend. This is necessary since there is no way to retrieve the
        rendering contexts for with a given frame once they've been created.

        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::discardAgent):
        Unregister canvas observers to prevent dangling agent pointer.
        (WebCore::InspectorCanvasAgent::enable):
        Dispatch events for existing canvases, now that the frontend exists.
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateCSSCanvas):
        Register the name/identifier associated with the CSS canvas, so that it
        can be retrieved and associated with the rendering context later.

        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        Removes the canvas from the agent, and queues it for notifying the
        frontend during the next event loop.

        (WebCore::InspectorCanvasAgent::canvasDestroyedTimerFired):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::getCanvasEntry):
        (WebCore::InspectorCanvasAgent::buildObjectForCanvas):
        * inspector/InspectorCanvasAgent.h: Added.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvasImpl):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContextImpl):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateCSSCanvas):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext):
        These instrumentation points should not fast return when no frontend
        is attached.

        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorCanvasAgent):
        (WebCore::InstrumentingAgents::setInspectorCanvasAgent):
        Plumbing for the new agent.

2017-06-15  Jer Noble  <jer.noble@apple.com>

        [WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=173398
        <rdar://problem/32592961>

        Reviewed by Eric Carlson.

        API Test: Tests/WebKit2/MediaStreamTrackDetached.mm

        Move the definition of a MediaStream as a MediaProducer from the stream itself to its constituent
        MediaStreamTracks. This ensures that, even if a MediaStreamTrack is removed from its stream, the
        document (and thus the clients) are notified that media capture is still occurring.

        Though MediaStream is no longer a MediaProducer, it still uses the MediaProducer's state concept
        to determine when to fire events. However it's mediaState() implementation will be moved into
        MediaStreamTrack, and will instead simply bitwise-or together each of it's track's mediaState().

        The MediaStream notifies the document that its state has changed asynchronously, so do the same
        for MediaStreamTrack (which reduces the number of calls to the client when changes all occur
        during a single run loop).

        Because the MediaStreamTrackPrivate may be started externally (not by the MediaStreamTrack directly),
        add a new client method that notifies observers when the track has been started, and the
        MediaStreamTrack will use this notification to update the document with it's new mediaState().

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::mediaState):
        (WebCore::MediaStream::statusDidChange):
        (WebCore::MediaStream::characteristicsChanged):
        (WebCore::MediaStream::pageMutedStateDidChange): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::pageMutedStateDidChange):
        (WebCore::MediaStreamTrack::mediaState):
        (WebCore::MediaStreamTrack::trackStarted):
        (WebCore::MediaStreamTrack::configureTrackRendering):
        (WebCore::MediaStreamTrack::stop):
        (WebCore::MediaStreamTrack::document):
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::source):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::trackStarted):
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::sourceStarted):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::start):
        * platform/mediastream/RealtimeMediaSource.h:

2017-06-15  Simon Fraser  <simon.fraser@apple.com>

        Use WTFLogAlways for debug logging so that it shows up in device system logs
        https://bugs.webkit.org/show_bug.cgi?id=173450

        Reviewed by Tim Horton.

        If you want to showRenderTree() on-device, the result doesn't show in system log so you can't see it
        Switch to WTFLogAlways to fix this, for all the debug logging in WebCore.
        
        Also WKError () -> WKError() in the old WAK code, to allow for easier searching pending cleanup.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::~AudioContext):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::~AudioNode):
        (WebCore::AudioNode::ref):
        (WebCore::AudioNode::finishDeref):
        (WebCore::AudioNode::printNodeCounts):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeObjcMethod):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertObjcValueToValue):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::showStyle):
        * dom/DocumentMarkerController.cpp:
        (DocumentMarkerController::showMarkers):
        * dom/Node.cpp:
        (WebCore::Node::showNode):
        (WebCore::Node::showNodePathForThis):
        (WebCore::traverseTreeAndMark):
        * dom/Position.cpp:
        (WebCore::Position::debugPosition):
        (WebCore::Position::showAnchorTypeAndOffset):
        * dom/Range.cpp:
        (showTree):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::debugRenderer):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::debugPosition):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::debugPosition):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::showTreeWithIndent):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::show):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::dumpMap):
        * page/scrolling/ScrollingStateTree.cpp:
        (showScrollingStateTree):
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestinationIOS::frameSizeChangedProc):
        * platform/graphics/GraphicsLayer.cpp:
        (showGraphicsLayerTree):
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::dump):
        * platform/ios/wak/WAKView.mm:
        (+[WAKView _wrapperForViewRef:]):
        (-[WAKView displayRect:]):
        (-[WAKView displayRectIgnoringOpacity:inContext:]):
        * platform/ios/wak/WKUtilities.c:
        (WKRelease):
        * platform/ios/wak/WKView.mm:
        (_WKViewSetViewContext):
        (WKViewGetBounds):
        (WKViewGetFrame):
        (_WKViewRecursivelyInvalidateGState):
        (WKViewSetFrameOrigin):
        (WKViewSetFrameSize):
        (WKViewGetWindow):
        (WKViewGetSubviews):
        (WKViewAddSubview):
        (WKViewRemoveFromSuperview):
        (WKViewFirstChild):
        (WKViewNextSibling):
        (WKViewTraverseNext):
        (WKViewGetVisibleRect):
        (WKViewConvertRectToSuperview):
        (WKViewConvertRectToBase):
        (WKViewConvertPointToSuperview):
        (WKViewConvertPointFromSuperview):
        (WKViewConvertPointToBase):
        (_WKViewGetAncestorViewsIncludingView):
        (WKViewConvertPointFromBase):
        (WKViewConvertRectFromSuperview):
        (WKViewConvertRectFromBase):
        (WKViewGetAutoresizingMask):
        (WKViewSetAutoresizingMask):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::dumpTextEncodingNameMap):
        * rendering/CounterNode.cpp:
        (WebCore::showTreeAndMark):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showLineBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::showLineBox):
        * rendering/RenderCounter.cpp:
        (showCounterRendererTree):
        * rendering/RenderLayer.cpp:
        (WebCore::showLayerTree):
        * rendering/RenderObject.cpp:
        (WebCore::showRenderTreeLegend):
        (WebCore::RenderObject::showRegionsInformation):
        (WebCore::RenderObject::showRenderObject):
        (WebCore::printRenderTreeForLiveDocuments):
        (WebCore::printLayerTreeForLiveDocuments):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::printPrefix):
        (WebCore::SimpleLineLayout::showLineLayoutForFlow):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::dump):
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resolveCycles):
        * rendering/svg/SVGTextLayoutAttributes.cpp:
        (WebCore::dumpSVGCharacterDataMapValue):
        (WebCore::SVGTextLayoutAttributes::dump):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::dumpTextBoxes):
        (WebCore::SVGTextLayoutEngine::finishLayout):

2017-06-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Removing stray whitespace after r218371
        https://bugs.webkit.org/show_bug.cgi?id=173043

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::shouldIgnoreRotation):
        (WebCore::glyphDataForNonCJKCharacterWithGlyphOrientation):
        * platform/graphics/FontDescription.cpp:
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontFamilySpecificationNull.h:
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::SystemFontDatabase::systemFontCascadeList):
        (WebCore::systemFontParameters):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.h:

2017-06-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Expand system-ui to include every item in the Core Text cascade list
        https://bugs.webkit.org/show_bug.cgi?id=173043
        <rdar://problem/21125708>

        Reviewed by Simon Fraser.

        The concept of the system font on Cocoa platforms represents the entire Core Text cascade list.
        However, previously, WebKit only represented system-ui by pulling out the first item in the Core
        Text cascade list. Instead, we should make all text rendered with "system-ui" match what the
        platform would natively render.

        Previously, we walked through the strings in the font-family property and looked them up one by
        one. However, now we want to abstract this idea of a font family to possibly hold a
        CTFontDescriptorRef instead of a string. This way, we expand a font-family list of ["fontA",
        "system-ui", "fontB"] to ["fontA", ... a bunch of CTFontDescriptorRefs ..., "FontB"]. We can
        then modify the consumer of this object to have two codepaths: the old string-based codepath,
        and a new, platform-specific codepath which simply embeds the CTFontDesriptorRefs inside a Font
        object.

        We don't want to simply pull out the family name from each item in the Core Text fallback list
        because that is a lossy translation. There is more information in these font descriptors which
        cannot be represented by CSS. Therefore, we must keep the descriptors alive and add the new
        codepath for them.

        We also don't want to run the CSS font matching algorithm on each member of the Core Text
        fallback list because it may yield different results from Core Text's font matching algorithm.
        Our goal is to draw text as closely as possible to the system APIs. If we ran it, we may find
        a font which is closer to the requested traits, but it would look out of place on the system.

        This new codepath is only enabled on macOS High Sierra and iOS 11, because enabling it on all
        operating systems would make fixing https://bugs.webkit.org/show_bug.cgi?id=173300 impossible.

        Tests: fast/text/system-font-fallback-emoji.html
               fast/text/system-font-fallback.html
               fast/text/system-font-zero-size.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::realizeNextFallback): The consumer of our new data type. Now uses WTF::visit().
        (WebCore::FontCascadeFonts::realizeFallbackRangesAt): Now that the number of items to test
        against the current character is larger than the number of strings in the font-family list,
        we need to update the existing code to use the correct value.
        * platform/graphics/FontDescription.cpp: Default implementation for non-Cocoa ports.
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::FontCascadeDescription::effectiveFamilyCount):
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/FontDescription.h: Our new data type is a Variant of AtomicString and a
        platform-specific class. Cocoa uses a class that holds a CTFontDescriptorRef and other ports
        use an empty non-constructable class.
        * platform/graphics/FontFamilySpecificationNull.h: Added. The empty non-constructable
        class.
        (WebCore::FontFamilySpecificationNull::fontRanges):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback):
        (WebCore::FontCache::platformInit): Changing the system language will change the system font
        fallback list, so we need to listen to this notification. This also matters for
        FontCache::systemFallbackForCharacters(), so we should build off the same callback we are
        already using for font installation.
        (WebCore::invalidateFontCache):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp: Added. The platform-specific creation of
        our CTFontDescriptorRefs. We hold them cached in a SystemFontDatabase.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParameters):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::isHashTableDeletedValue):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::operator==):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::hash):
        (WebCore::SystemFontDatabase::singleton):
        (WebCore::SystemFontDatabase::systemFontCascadeList):
        (WebCore::SystemFontDatabase::clear):
        (WebCore::SystemFontDatabase::SystemFontDatabase):
        (WebCore::SystemFontDatabase::applyWeightAndItalics):
        (WebCore::SystemFontDatabase::removeCascadeList):
        (WebCore::SystemFontDatabase::computeCascadeList):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::hash):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::equal):
        (WebCore::isSystemFontString):
        (WebCore::systemFontParameters):
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::FontCascadeDescription::effectiveFamilyCount): We don't store the result of this
        because it would probably be a bad idea to increase the size of every single FontCascade just
        in case it might ask for the system font. Most fonts never mention system-ui. Because it's so
        rare, we can just recalculate the result of this as necessary. This shouldn't be slow because
        the results are cached.
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp: Added.
        (WebCore::FontFamilySpecificationCoreText::fontRanges): Create a FontRanges from a
        CTFontDescriptorRef.
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.h: Added.
        (WebCore::FontFamilySpecificationCoreText::FontFamilySpecificationCoreText):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):

2017-06-15  David Kilzer  <ddkilzer@apple.com>

        Revert: [iOS] Generate a simulated crash when the WebThread starts in MobileSafari
        <https://webkit.org/b/173386>
        <rdar://problem/32776426>

        Revert r218347 and r218339 since we're going to take a different
        approach to investigating a crash on the WebThread.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/CrashReporterSupportSoftLink.h: Remove.
        * platform/ios/CrashReporterSupportSoftLink.mm: Remove.
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadEnable):
        * platform/spi/ios/CrashReporterSupportSPI.h: Remove.

2017-06-15  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218365.

        The revision caused API timeouts on all builds.

        Reverted changeset:

        "[WebRTC] Removing a MediaStreamTrack from a MediaStream
        reports no recording to WebKit clients"
        https://bugs.webkit.org/show_bug.cgi?id=173398
        http://trac.webkit.org/changeset/218365

2017-06-15  Simon Fraser  <simon.fraser@apple.com>

        Allow use of Layout* TextStream operators in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=173440

        Reviewed by Zalan Bujtas.

        Export TextStream& operator<< for LayoutPoint, LayoutSize and LayoutRect so that
        WebKit2 can log them.

        Use #pragma once in these geometry headers.

        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/LayoutPoint.h:
        * platform/graphics/LayoutRect.h:
        * platform/graphics/LayoutSize.h:

2017-06-15  Antoine Quint  <graouts@apple.com>

        Modern media controls tests error in Button.js
        https://bugs.webkit.org/show_bug.cgi?id=173439

        Reviewed by Dean Jackson.

        Tests would sometime yield an error when commit() would be called and the _imageSource
        ivar hadn't been set. To more safely commit the mask image when it's loaded, we now use
        a markDirtyProperty() call and a commitProperty() override to ensure that we cover the
        case where we want to commit the mask image, and for other commits not to have to worry
        about the mask image being defined.

        * Modules/modern-media-controls/controls/button.js:
        (Button.prototype.commitProperty):
        (Button.prototype._updateImage):
        (Button.prototype.commit): Deleted.

2017-06-15  Jer Noble  <jer.noble@apple.com>

        [WebRTC] Removing a MediaStreamTrack from a MediaStream reports no recording to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=173398
        <rdar://problem/32592961>

        Reviewed by Eric Carlson.

        API Test: Tests/WebKit2/MediaStreamTrackDetached.mm

        Move the definition of a MediaStream as a MediaProducer from the stream itself to its constituent
        MediaStreamTracks. This ensures that, even if a MediaStreamTrack is removed from its stream, the
        document (and thus the clients) are notified that media capture is still occurring.

        Though MediaStream is no longer a MediaProducer, it still uses the MediaProducer's state concept
        to determine when to fire events. However it's mediaState() implementation will be moved into
        MediaStreamTrack, and will instead simply bitwise-or together each of it's track's mediaState().

        The MediaStream notifies the document that its state has changed asynchronously, so do the same
        for MediaStreamTrack (which reduces the number of calls to the client when changes all occur
        during a single run loop).

        Because the MediaStreamTrackPrivate may be started externally (not by the MediaStreamTrack directly),
        add a new client method that notifies observers when the track has been started, and the
        MediaStreamTrack will use this notification to update the document with it's new mediaState().

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::mediaState):
        (WebCore::MediaStream::statusDidChange):
        (WebCore::MediaStream::characteristicsChanged):
        (WebCore::MediaStream::pageMutedStateDidChange): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::pageMutedStateDidChange):
        (WebCore::MediaStreamTrack::mediaState):
        (WebCore::MediaStreamTrack::trackStarted):
        (WebCore::MediaStreamTrack::configureTrackRendering):
        (WebCore::MediaStreamTrack::stop):
        (WebCore::MediaStreamTrack::document):
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::source):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::trackStarted):
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::sourceStarted):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::start):
        * platform/mediastream/RealtimeMediaSource.h:

2017-06-15  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed build fix after r218336

        * platform/spi/cocoa/PassKitSPI.h: Add missing #ifdefs for Internal builds.

2017-06-15  Antoine Quint  <graouts@apple.com>

        Ensure we only log changes to the ScriptedAnimationController suspended state in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=173423

        Reviewed by Tim Horton.

        We added logging for when the suspended state of the scripted animation controller would change in
        webkit.org/b/173326. It was meant to only be enabled in debug builds and we actually did the wrong
        thing and enabled it in non-debug builds.

        We also added a setting that wasn't used and that we are removing here.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::logSuspendCount):
        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::shouldLogScritedAnimationControllerSuspensionChange): Deleted.
        (WebCore::InternalSettings::setShouldLogScritedAnimationControllerSuspensionChange): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-06-15  David Kilzer  <ddkilzer@apple.com>

        Build fix: [iOS] Generate a simulated crash when the WebThread starts in MobileSafari
        <https://webkit.org/b/173386>
        <rdar://problem/32776426>

        * platform/ios/CrashReporterSupportSoftLink.h:
        * platform/ios/CrashReporterSupportSoftLink.mm:
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadEnable): Log to the console on iOS Simulator.
        * platform/spi/ios/CrashReporterSupportSPI.h:
        - CrashReporterSupport.h is not available on iOS Simulator, so
          restrict to iOS hardware only.

2017-06-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r218318.

        Seems to have caused an 11% PLT regression. Rolling out to
        confirm.

        Reverted changeset:

        "Don't always recalc the style of display: contents elements."
        https://bugs.webkit.org/show_bug.cgi?id=172753
        http://trac.webkit.org/changeset/218318

2017-06-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Using -[WebItemProviderPasteboard setItemProviders:] to swap out item providers before a drop breaks item provider loading
        https://bugs.webkit.org/show_bug.cgi?id=173338
        <rdar://problem/32777720>

        Reviewed by Tim Horton.

        Currently, replacing the list of UIItemProviders right before a drop is handled results in
        WebItemProviderPasteboard failing to load non-"public.content"-conformant items. This is because DragController
        computes and sends to the UI process a list of UTIs to load (preferredTypeIdentifiers: one type identifier for
        each item provider in WebItemProviderPasteboard). However, if the list of item providers changes immediately
        before a drop is performed, WebItemProviderPasteboard will get into an inconsistent state where it has a
        different number of preferred type identifiers to load than available item providers. This causes
        WebItemProviderPasteboard to fail when choosing what type identifiers to load from each item provider.

        To fix this, we instead have the web process propagate a list of supported type identifiers to the UI process,
        which is a property of only the drop destination rather than both the destination and item providers. When
        performing a drop, we then use the current item providers on WebItemProviderPasteboard to consult this list of
        supported type identifiers to resolve our list of preferred type identifiers to load.

        Globally renames updatePreferredTypeIdentifiers to updateSupportedTypeIdentifiers.

        Tests:
        DataInteractionTests.ExternalSourceOverrideDropFileUpload
        DataInteractionTests.ExternalSourceOverrideDropInsertURL

        * page/DragController.cpp:
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::updateSupportedTypeIdentifiersForDragHandlingMethod):
        (WebCore::DragController::updatePreferredTypeIdentifiersForDragHandlingMethod): Deleted.
        * page/DragController.h:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::updateSupportedTypeIdentifiersForDragHandlingMethod):
        (WebCore::DragController::updatePreferredTypeIdentifiersForDragHandlingMethod): Deleted.
        * platform/DragData.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::updateSupportedTypeIdentifiers):
        (WebCore::PlatformPasteboard::updatePreferredTypeIdentifiers): Deleted.
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard updateSupportedTypeIdentifiers:]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard typeIsAppropriateForSupportedTypes:]):
        (-[WebItemProviderPasteboard typeIdentifierToLoadForRegisteredTypeIdentfiers:]):

        Add logic to resolve preferred type identifiers from an item providers list of registered type identifiers.
        This formerly existed on DragData.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):
        (-[WebItemProviderPasteboard updatePreferredTypeIdentifiers:]): Deleted.
        * platform/mac/DragDataMac.mm:

        Remove preferred type identifier resolution logic from DragData.

        (WebCore::typeIsAppropriateForSupportedTypes): Deleted.
        (WebCore::DragData::updatePreferredTypeIdentifiers): Deleted.

2017-06-15  Sam Weinig  <sam@webkit.org>

        [WebIDL] Replace general inclusion of JSDOMConvert.h with inclusion of individual converter files to reduce unnecessary inclusion
        https://bugs.webkit.org/show_bug.cgi?id=173392

        Reviewed by Tim Horton.

        Stop including the umbrella header JSDOMConvert.h in every generated bindings and 
        instead only include the specific converter needed. Then, go around and add all the
        now missing includes that used to be obtained transitively.

        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        * bindings/js/IDBBindingUtilities.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        * bindings/js/JSCustomElementInterface.cpp:
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        * bindings/js/JSDOMConvertBase.h:
        * bindings/js/JSDOMConvertInterface.h:
        * bindings/js/JSDOMConvertRecord.h:
        * bindings/js/JSDOMConvertSequences.h:
        * bindings/js/JSDOMConvertUnion.h:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowProperties.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSErrorHandler.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        * bindings/js/JSMutationCallback.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::retrieveResponse):
        * bindings/js/ScriptGlobalObject.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GetJSCAttributesForAttribute):
        (GenerateEnumerationHeader):
        (GenerateEnumerationImplementation):
        (GenerateEnumerationImplementationContent):
        (GenerateEnumerationsImplementationContent):
        (GenerateEnumerationHeaderContent):
        (GenerateEnumerationsHeaderContent):
        (GenerateDictionaryHeaderContent):
        (GenerateDictionariesHeaderContent):
        (GenerateDictionaryImplementationContent):
        (GenerateDictionariesImplementationContent):
        (GenerateHeader):
        (GeneratePropertiesHashTable):
        (GenerateOverloadDispatcher):
        (GenerateImplementation):
        (GenerateAttributeGetterDefinition):
        (GenerateSerializerDefinition):
        (GenerateDictionaryHeader):
        (JSValueToNative):
        (NativeToJSValueUsingReferences):
        (NativeToJSValueUsingPointers):
        (IsValidContextForNativeToJSValue):
        (NativeToJSValue):
        (GenerateConstructorDefinition):
        (ComputeFunctionSpecial):
        * 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/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.h:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/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/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.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/JSTestNode.h:
        * 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/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.h:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp:
        * dom/MouseEvent.cpp:
        * html/HTMLPlugInImageElement.cpp:

2017-06-14  David Kilzer  <ddkilzer@apple.com>

        [iOS] Generate a simulated crash when the WebThread starts in MobileSafari
        <https://webkit.org/b/173386>
        <rdar://problem/32776426>

        Reviewed by Andy Estes.

        * WebCore.xcodeproj/project.pbxproj: Add new files to project.
        * platform/ios/CrashReporterSupportSoftLink.h: Add.  The using
        statement is so that we don't have to write
        WebCore::SimulateCrash() in WebCoreThread.mm since it's
        functions are not defined inside a WebCore namespace.  I also
        kept the 'pid' argument despite the style checker warning
        because it matches the internal method definition.
        * platform/ios/CrashReporterSupportSoftLink.mm: Add.
        * platform/ios/wak/WebCoreThread.mm: Sort headers.  Soft link to
        CrashReporterSupport.framework.
        (WebThreadEnable): Generate a simulated crash log if the
        WebThread ever starts in MobileSafari.
        * platform/spi/ios/CrashReporterSupportSPI.h: Add.  The header
        isn't safe to include in C++ source, so wrap the import in
        extern "C" macros.

2017-06-15  Jonathan Bedard  <jbedard@apple.com>

        Build WebKit with High Sierra (Seed 1)
        https://bugs.webkit.org/show_bug.cgi?id=173371

        Reviewed by Andy Estes.

        * crypto/CommonCryptoUtilities.h: Added ccRSAPSSPadding to CCAsymmetricPading enum.
        * platform/spi/cocoa/AVKitSPI.h: Declare AVKit SPI used by WebKit in High Sierra.
        (-[AVTouchBarPlaybackControlsControlling NS_ENUM]): Added AVTouchBarMediaSelectionOptionType
        SPI used in WebPlaybackControlManager in High Sierra.
        * platform/spi/cocoa/PassKitSPI.h: Declare PassKit SPI used by WebKit in High Sierra.
        (NS_ERROR_ENUM): Added PKPaymentErrorCode used in WebPayment in High Sierra.

2017-06-15  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection returns RTCSessionDescription where RTCSessionDescriptionInit would be appropriate
        https://bugs.webkit.org/show_bug.cgi?id=173118
        <rdar://problem/32746761>

        Reviewed by Eric Carlson.

        Test: webrtc/createOfferAnswer.html

        Making the promise return a RTCSessionDescription::Init instead of a RTCSessionDescription.
        This aligns with the spec and is more optimal.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCSessionDescription.idl:

2017-06-15 Emilio Cobos Álvarez  <ecobos@igalia.com>

        Don't always recalc the style of display: contents elements.
        https://bugs.webkit.org/show_bug.cgi?id=172753

        Reviewed by Antti Koivisto.

        No new tests (no functionality change). This only removes an
        inefficiency.

        * dom/Element.cpp:
        (WebCore::Element::existingComputedStyle):
        * dom/Element.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        (WebCore::Style::shouldResolveElement):
        (WebCore::Style::TreeResolver::resolveComposedTree):

2017-06-14  Antoine Quint  <graouts@apple.com>

        Rebaseline media/modern-media-controls/media-documents
        https://bugs.webkit.org/show_bug.cgi?id=173394

        Reviewed by Dean Jackson.

        We found two issues related to media documents while rebaselining the dedicated tests.

        First, we needed to expose the --inline-controls-bar-height CSS variable to <video>
        elements in media documents that are actually showing an audio UI. Previously we would
        only expose the variable to <audio> elements.

        Also, due to webkit.org/b/173387, we would fail to identify certain media documents as
        video because the videoTracks weren't set yet when the "loadedmetadata" event would be
        triggered. So now we also look at the videoWidth and videoHeight properties, which should
        provide accurate information in the "loadedmetadata" event handler.

        * Modules/modern-media-controls/controls/media-controls.css:
        (:host(audio), :host(video.media-document.audio), *):
        (:host(audio), *): Deleted.
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get isAudio):

2017-06-14  Zalan Bujtas  <zalan@apple.com>

        animations-paused-in-background-page.html and animated-svg-image-removed-from-document-paused.html fail after r218284
        https://bugs.webkit.org/show_bug.cgi?id=173393

        Reviewed by Simon Fraser.

        Testing cares really about whether the animation has initiated.  

        * platform/graphics/Image.h:
        (WebCore::Image::animationPending):
        * testing/Internals.cpp:
        (WebCore::Internals::isImageAnimating):

2017-06-14  Dean Jackson  <dino@apple.com>

        Restrict filtered painting across cross-origin boundaries with transforms
        https://bugs.webkit.org/show_bug.cgi?id=173388
        <rdar://problem/27362159>

        Reviewed by Simon Fraser.

        Make sure all cases of LayerPaintingInfo maintain the security
        flag. In this case there was only one new place, and since
        everything is scalar, there was no need for a real copy constructor.

        Test: http/tests/css/filters-on-iframes-transform.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerByApplyingTransform): Make sure the cross
        origin flag is used in the call to paint the layer children.
        * rendering/RenderLayer.h: Fix some typos.

2017-06-14  Commit Queue  <commit-queue@webkit.org>

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

        API test fails on iOS (Requested by alexchristensen on
        #webkit).

        Reverted changeset:

        "Add SPI for immediate injection of user scripts"
        https://bugs.webkit.org/show_bug.cgi?id=173342
        http://trac.webkit.org/changeset/218285

2017-06-14  Jer Noble  <jer.noble@apple.com>

        Video flashes black when switching back to a tab https://www.apple.com/homepod/
        https://bugs.webkit.org/show_bug.cgi?id=173377

        Reviewed by Eric Carlson.

        Previously, we had set the background color of the video layer to black in order to make the rect
        occupied by the HTMLMediaElement fully opaque. This worked around a graphics corruption bug. Since
        then, the code in RenderVideo::foregroundIsKnownToBeOpaqueInRect(...) has been fixed to fully account
        for whether the HTMLMediaElement has a valid frame to display, making the black layer background
        unnecessary.

        Remove all the instances where we were setting the background color of the video layer to black.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        (WebCore::VideoFullscreenLayerManager::setVideoLayer):
        (WebCore::VideoFullscreenLayerManager::setVideoFullscreenLayer):

2017-06-14  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218161.

        Introduced bot API test failures and Layout Test Failures.

        Reverted changeset:

        "[Cocoa] Expand system-ui to include every item in the Core
        Text cascade list"
        https://bugs.webkit.org/show_bug.cgi?id=173043
        http://trac.webkit.org/changeset/218161

2017-06-14  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.

        The new SPI is WKUserContentController._addUserScriptImmediately.
        It is covered by new API tests.

        * 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:

2017-06-14  Zalan Bujtas  <zalan@apple.com>

        Crash in WebCore::RenderStyle::colorIncludingFallback.
        https://bugs.webkit.org/show_bug.cgi?id=173347
        <rdar://problem/32675317>

        Reviewed by Chris Dumez.

        Starting an SVG image animation synchronously might trigger recursive style recalc.
        We should kick off the animation on a zero timer to reduce callstack complexity. 

        Test: svg/as-image/svg-css-animation.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient):
        * platform/graphics/Image.cpp:
        (WebCore::Image::Image):
        (WebCore::Image::startAnimationAsynchronously):
        * platform/graphics/Image.h:

2017-06-14  Brady Eidson  <beidson@apple.com>

        WKIconLoadingDelegate never gets asked about the default favicon if touch/touch-precomposed icons are in the <head>
        <rdar://problem/32614328> and https://bugs.webkit.org/show_bug.cgi?id=173376

        Reviewed by Alex Christensen.

        Covered by new API test

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading): Previously we applied the default favicon if the set of LinkIcons was empty.
          Now, apply the default favicon if the set of LinkIcons contains no explicit favicon.

2017-06-14  Jer Noble  <jer.noble@apple.com>

        Flaky Test: media/media-source/media-source-unnecessary-seek-seeked.html
        https://bugs.webkit.org/show_bug.cgi?id=173344

        Reviewed by Eric Carlson.

        Separate the concept of "the page has asked us to seek" from "we have asked the
        media player to seek". When the media engine tells us its ready state has changed
        after the page has requested a seek, but before the media element has asked its
        player to perform the seek, we were previously firing a seeked event. Now we'll
        check this new ivar and see that we aren't expecting a seek to finish yet.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::finishSeek):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        * html/HTMLMediaElement.h:

2017-06-14  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r218157.

        This patch caused multiple API failures on iOS Simulator.

        Reverted changeset:

        "@font-face rules with invalid primary fonts never download
        their secondary fonts"
        https://bugs.webkit.org/show_bug.cgi?id=173138
        http://trac.webkit.org/changeset/218157

2017-06-14  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r217997): mint.com header renders incorrectly when initially loaded
        https://bugs.webkit.org/show_bug.cgi?id=173302
        <rdar://problem/32731747>

        Reviewed by Darin Adler.

        r217997 updated ImplicitAnimation::reset() to not call updateStateMachine(AnimationStateInput::RestartAnimation)
        if the compositeAnimation is suspended. If the compositeAnimation is suspended, we would call
        updateStateMachine(AnimationStateInput::AnimationStateInput::PlayStatePaused), which was expected to be a no-op.
        This was needed because otherwise, changing the style of the animated element would restart the animation
        even though it was supposed to be suspended. One thing I did not realize is that calling
        updateStateMachine(AnimationStateInput::AnimationStateInput::PlayStatePaused) on an animation that is already
        in PausedNew state, will cause it to move to PausedWaitResponse state. This is an issue because upon resuming
        we would call AnimationBase::updatePlayState(AnimPlayStatePlaying) which would return early because
        AnimationBase::paused() would return false. To address the issue, we no longer call updateStateMachine(PlayStatePaused)
        in ImplicitAnimation::reset() when the compositeAnimation is suspended, so that the animation stays in
        PausedNew state until we resume. When we resume, AnimationBase::paused() returns false and we actually resume
        the animation.

        Tests:
        fast/animation/css-animation-resuming-when-visible-with-style-change.html
        fast/animation/css-animation-resuming-when-visible-with-style-change2.html

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::reset):

2017-06-14  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r216901): ImageDecoders: rendering of large images is broken since r216901
        https://bugs.webkit.org/show_bug.cgi?id=172502

        Reviewed by Carlos Garcia Campos.

        When using GTK and WPE image decoders, the decoded frames are stored inside a Vector of
        ImageFrames inside the decoders. These ImageFrames have and ImageBackingStore with the
        pixels. When a NativeImagePtr is requested, a cairo surface is created from the data
        in those ImageBackingStores, but the data keeps being owned by the backing stores. Due
        to this, if the decoder that created the image gets destroyed, the backing stores for
        the decoded frames get destroyed as well, causing the cairo surfaces that were using
        that data to contain garbage (and potentially cause a crash).

        To fix this, we change ImageBackingStore so the pixels are stored in a SharedBuffer. The
        buffer will be reffed everytime a cairo surface is created with it, and the cairo surfaces
        will unref the buffer when they are destroyed. This way, the pixel data won't be freed
        while there are cairo surfaces using it.

        No new tests, no behaviour change.

        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::setSize):
        (WebCore::ImageBackingStore::ImageBackingStore):
        * platform/image-decoders/cairo/ImageBackingStoreCairo.cpp:
        (WebCore::ImageBackingStore::image):

2017-06-14  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Align GstBus signal watch priorities with RunLoop dispatches
        https://bugs.webkit.org/show_bug.cgi?id=173348

        Reviewed by Carlos Garcia Campos.

        When adding GstBus signal watches, use the gst_bus_add_signal_watch_full()
        function to also specify the GLib priority that's used for the underlying
        GSource object.

        RunLoopSourcePriority::RunLoopDispatcher should be a good priority value
        to use here, matching the RunLoop::dispatch() priority that's e.g. used
        in the MainThreadNotifier class.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):

2017-06-14  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Back camera view rendered upside down when in portrait mode
        https://bugs.webkit.org/show_bug.cgi?id=173346
        <rdar://problem/32713675>

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::computeSampleRotation): Use different rotations for front and
        back cameras when device is in portrait orientation.

2017-06-13  Chris Dumez  <cdumez@apple.com>

        Event handlers should not be called in frameless documents
        https://bugs.webkit.org/show_bug.cgi?id=173233

        Reviewed by Sam Weinig.

        As per the HTML specification [1], for event handlers on elements, we should use the
        element's document to check if scripting is disabled [2]. Scripting is considered to
        be disabled if the document has no browsing context (i.e. a frame in WebKit terms).

        In JSLazyEventListener::initializeJSFunction(), instead of using the element's
        document to do the checks, we would use the script execution context. In most cases,
        a node's document and its script execution context are the same so this is not an
        issue. However, if the node's document is a document created via JS, its nodes'
        script execution context will be the document's context document (i.e the one that
        created the document, see implementation of Node::scriptExecutionContext()). In those
        cases, using the wrong document is an issue because the document's context document
        (aka script execution context) may allow scripting but we still do not want to call
        the event handler because its document is frameless.

        This impacts documents created by JS, using the following APIs:
        - DOMParser.parseFromHTML
        - new Document()
        - DOMImplementation.createDocument / createHTMLDocument
        - XHRs whose responseType is Document.

        [1] https://html.spec.whatwg.org/multipage/webappapis.html#getting-the-current-value-of-the-event-handler (step 1.1.)
        [2] https://html.spec.whatwg.org/multipage/webappapis.html#concept-n-noscript

        Tests: fast/events/event-handler-detached-document-dispatchEvent.html
               fast/events/event-handler-detached-document.html

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):

2017-06-13  Antoine Quint  <graouts@apple.com>

        Rebaseline media/modern-media-controls/placard-support
        https://bugs.webkit.org/show_bug.cgi?id=173340

        Reviewed by Dean Jackson.

        We make a source change to use a "placard" getter/setter to show or hide a placard, making it
        more convenient to test whether a placard has been set.

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.get placard):
        (InlineMediaControls.prototype.set placard):
        (InlineMediaControls.prototype.showPlacard): Deleted.
        (InlineMediaControls.prototype.hidePlacard): Deleted.
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype._updatePlacard):
        (PlacardSupport):

2017-06-11  Antoine Quint  <graouts@apple.com>

        Rebaseline media/modern-media-controls/fullscreen-support
        https://bugs.webkit.org/show_bug.cgi?id=173199

        Reviewed by Simon Fraser.

        Test: media/modern-media-controls/fullscreen-support/fullscreen-support-press.html

        We no longer need to track the "error" event for FullscreenSupport since we don't actually
        enable or disable the fullscreen button when an error happens, instead the media controls
        code will simply not present it since we'll be showing a placard instead.

        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.get mediaEvents):

2017-06-13  Matt Rajca  <mrajca@apple.com>

        WebsitePolicies: let clients select specific autoplay quirks
        https://bugs.webkit.org/show_bug.cgi?id=173343

        Reviewed by Alex Christensen.

        Tests: Updated API tests accordingly to use new values.

        Replace the 'allowsAutoplayQuirks' bool with an OptionSet so clients can selectively
        pick auto-play quirks.

        * dom/Document.cpp:
        (WebCore::Document::processingUserGestureForMedia):
        * html/HTMLMediaElement.cpp:
        (WebCore::needsAutoplayPlayPauseEventsQuirk):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::allowedAutoplayQuirks):
        (WebCore::DocumentLoader::setAllowedAutoplayQuirks):
        (WebCore::DocumentLoader::allowsAutoplayQuirks): Deleted.
        (WebCore::DocumentLoader::setAllowsAutoplayQuirks): Deleted.

2017-06-13  Zalan Bujtas  <zalan@apple.com>

        Synchronous media query callbacks on nested frames could produced a detached FrameView.
        https://bugs.webkit.org/show_bug.cgi?id=173330

        Reviewed by Simon Fraser.

        This patch fixes the crash when the nested frame's media query callback triggers navigation on the mainframe.
        webkit.org/b/173329 is to track whether we should allow synchronous callback firing from FrameView::layout(). 

        Covered by show-modal-dialog-during-execCommand.html.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2017-06-13  Chris Fleizach  <cfleizach@apple.com>

        AX[macOS]: Expose Inline property as an accessibility attribute
        https://bugs.webkit.org/show_bug.cgi?id=173131
        <rdar://problem/32667686>

        Reviewed by Joanmarie Diggs.

        Expose whether a renderer is inline so that VoiceOver can make better use of that data when deciding what to output.

        Test: accessibility/mac/inline-text-attribute.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2017-06-13  Jon Davis  <jond@apple.com>

        Update Subresource Integrity status to Supported In Preview
        https://bugs.webkit.org/show_bug.cgi?id=173324

        Reviewed by Sam Weinig.

        * features.json:

2017-06-13  Antoine Quint  <graouts@apple.com>

        Add logging for layout tests when rAF callbacks get suspended and resumed
        https://bugs.webkit.org/show_bug.cgi?id=173326

        Reviewed by Simon Fraser.

        In order to help diagnose webkit.org/b/168409 we log the ScriptedAnimationController
        suspend count when it changes and log the backtrace so that we may understand why it
        fails to be set back to 0 when some modern-media-controls tests run.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::suspend):
        (WebCore::ScriptedAnimationController::resume):
        (WebCore::ScriptedAnimationController::logSuspendCount):
        * dom/ScriptedAnimationController.h:
        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::shouldLogScritedAnimationControllerSuspensionChange):
        (WebCore::InternalSettings::setShouldLogScritedAnimationControllerSuspensionChange):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-06-13  Jer Noble  <jer.noble@apple.com>

        Crash when MSE backed media element changes src/srcObject during PiP
        https://bugs.webkit.org/show_bug.cgi?id=173288

        Reviewed by Alex Christensen.

        Tear down the MediaPlayerPrivateMediaSourceAVFObjC's layers fully whe the player
        is destroyed, which includes removing the player's AVSampleBufferDisplayLayer from
        the HTMLMediaElement's fullscreen layer.

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

2017-06-13  Daniel Bates  <dabates@apple.com>

        Implement W3C Secure Contexts Draft Specification
        https://bugs.webkit.org/show_bug.cgi?id=158121
        <rdar://problem/26012994>

        Reviewed by Brent Fulgham.

        Part 4

        Adds runtime enabled feature flag, isSecureContextAttributeEnabled, to toggle exposing
        the global object property isSecureContext (defaults: true - expose the property).

        Test: security/isSecureContext-disabled.html

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setIsSecureContextAttributeEnabled):
        (WebCore::RuntimeEnabledFeatures::isSecureContextAttributeEnabled):
        * page/WindowOrWorkerGlobalScope.idl:

2017-06-13  Jer Noble  <jer.noble@apple.com>

        Protect lifetime of media element during HTMLMediaElement::notifyAboutPlaying()
        https://bugs.webkit.org/show_bug.cgi?id=173320
        <rdar://problem/32590276>

        Reviewed by Brent Fulgham.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::notifyAboutPlaying):

2017-06-13  Youenn Fablet  <youenn@apple.com>

        getReceivers() should return transceivers that have only an active receiver
        https://bugs.webkit.org/show_bug.cgi?id=173313

        Reviewed by Alex Christensen.

        Test: webrtc/video-receivers.html

        Creating transceivers for receivers created from an offer.
        Setting these as recvonly.

        * Modules/mediastream/RTCRtpTransceiver.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):

2017-06-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unable to paste text that was copied from a page into the universal search field
        https://bugs.webkit.org/show_bug.cgi?id=173293
        <rdar://problem/32440918>

        Reviewed by Ryosuke Niwa.

        Vend "public.utf8-plain-text" and "public.utf16-plain-text" as additional representations on the pasteboard when
        copying both rich and plain web content in PlatformPasteboardIOS.mm. This is because UITextView no longer
        supports pasting "public.text" as text in iOS 11.

        Tests:
        UIPasteboardTests.CopyPlainTextWritesConcreteTypes
        UIPasteboardTests.CopyRichTextWritesConcreteTypes

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writePlainText):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2017-06-13  Sam Weinig  <sam@webkit.org>

        Rename JSDOMWindowShell to JSDOMWindowProxy to match the HTML5 spec.
        https://bugs.webkit.org/show_bug.cgi?id=80733

        Reviewed by Chris Dumez.

        Goodbye dear shell.

        * CMakeLists.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):
        (WebCore::DOMWrapperWorld::didCreateWindowShell): Deleted.
        (WebCore::DOMWrapperWorld::didDestroyWindowShell): Deleted.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::JSDOMWindowBase::willRemoveFromWindowProxy):
        (WebCore::JSDOMWindowBase::proxy):
        (WebCore::toJSDOMWindow):
        (WebCore::JSDOMWindowBase::willRemoveFromWindowShell): Deleted.
        (WebCore::JSDOMWindowBase::shell): Deleted.
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::toJS):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::toWrapped):
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSDOMWindowProperties.h:
        (WebCore::JSDOMWindowProperties::JSDOMWindowProperties):
        * bindings/js/JSDOMWindowProxy.cpp: Copied from WebCore/bindings/js/JSDOMWindowShell.cpp.
        (WebCore::JSDOMWindowProxy::JSDOMWindowProxy):
        (WebCore::JSDOMWindowProxy::finishCreation):
        (WebCore::JSDOMWindowProxy::destroy):
        (WebCore::JSDOMWindowProxy::setWindow):
        (WebCore::JSDOMWindowProxy::wrapped):
        (WebCore::JSDOMWindowProxy::toWrapped):
        (WebCore::toJS):
        (WebCore::toJSDOMWindowProxy):
        (WebCore::JSDOMWindowShell::JSDOMWindowShell): Deleted.
        (WebCore::JSDOMWindowShell::finishCreation): Deleted.
        (WebCore::JSDOMWindowShell::destroy): Deleted.
        (WebCore::JSDOMWindowShell::setWindow): Deleted.
        (WebCore::JSDOMWindowShell::wrapped): Deleted.
        (WebCore::JSDOMWindowShell::toWrapped): Deleted.
        (WebCore::toJSDOMWindowShell): Deleted.
        * bindings/js/JSDOMWindowProxy.h: Copied from WebCore/bindings/js/JSDOMWindowShell.h.
        (WebCore::JSDOMWindowProxy::create):
        (WebCore::toJSDOMWindowProxy):
        (WebCore::JSDOMWindowShell::window): Deleted.
        (WebCore::JSDOMWindowShell::create): Deleted.
        (WebCore::JSDOMWindowShell::createStructure): Deleted.
        (WebCore::JSDOMWindowShell::world): Deleted.
        (WebCore::toJSDOMWindowShell): Deleted.
        * bindings/js/JSDOMWindowShell.cpp: Removed.
        * bindings/js/JSDOMWindowShell.h: Removed.
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::JSEventTarget::toWrapped):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::collectGarbageAfterWindowProxyDestruction):
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::destroyWindowProxy):
        (WebCore::ScriptController::createWindowProxy):
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::evaluateModule):
        (WebCore::ScriptController::windowProxies):
        (WebCore::ScriptController::clearWindowProxiesNotMatchingDOMWindow):
        (WebCore::ScriptController::setDOMWindowForWindowProxy):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::setupModuleScriptHandlers):
        (WebCore::ScriptController::eventHandlerPosition):
        (WebCore::ScriptController::enableEval):
        (WebCore::ScriptController::disableEval):
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::cacheableBindingRootObject):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::createRootObject):
        (WebCore::ScriptController::collectIsolatedContexts):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        (WebCore::ScriptController::cleanupScriptObjectsForPlugin):
        (WebCore::ScriptController::clearScriptObjects):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        (WebCore::collectGarbageAfterWindowShellDestruction): Deleted.
        (WebCore::ScriptController::destroyWindowShell): Deleted.
        (WebCore::ScriptController::createWindowShell): Deleted.
        (WebCore::ScriptController::windowShells): Deleted.
        (WebCore::ScriptController::clearWindowShellsNotMatchingDOMWindow): Deleted.
        (WebCore::ScriptController::setDOMWindowForWindowShell): Deleted.
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::windowProxy):
        (WebCore::ScriptController::existingWindowProxy):
        (WebCore::ScriptController::globalObject):
        (WebCore::ScriptController::windowShell): Deleted.
        (WebCore::ScriptController::existingWindowShell): Deleted.
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptState.cpp:
        (WebCore::mainWorldExecState):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateOverloadDispatcher):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodOverloadDispatcher):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/Frame.cpp:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didCreateWindowProxy):
        (WebCore::ContentSecurityPolicy::didCreateWindowShell): Deleted.
        * page/csp/ContentSecurityPolicy.h:

2017-06-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix typo in variable introduced in r218108.

        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        (WebCore::registerSQLiteMemoryPressureHandler):

2017-06-13  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Implement missing AtkRelation types
        https://bugs.webkit.org/show_bug.cgi?id=155494

        Reviewed by Darin Adler.

        Add methods for getting the element(s) which reference a particular element via an
        ARIA attribute. Then use those methods to identify and expose the expected reverse/
        reciprocal AtkRelationType and targets. Also add ATK support for aria-owns.

        Use SpaceSplitString in AccessibilityObject::elementsFromAttribute() so that unexpected
        whitespace characters in an attribute's list of ids does not prevent the desired element
        from being found.

        Lastly, change the return type of AccessibilityObject::identifierAttribute() from a String
        to a const AtomicString& for better efficiency.

        Tests: accessibility/aria-owns.html
               accessibility/gtk/relation-types.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::identifierAttribute):
        (WebCore::AccessibilityObject::elementsFromAttribute):
        (WebCore::AccessibilityObject::ariaElementsReferencedByAttribute):
        (WebCore::AccessibilityObject::ariaControlsReferencingElements):
        (WebCore::AccessibilityObject::ariaDescribedByReferencingElements):
        (WebCore::AccessibilityObject::ariaFlowToReferencingElements):
        (WebCore::AccessibilityObject::ariaLabelledByReferencingElements):
        (WebCore::AccessibilityObject::ariaOwnsReferencingElements):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

2017-06-13  Gwang Yoon Hwang  <yoon@igalia.com>

        [GStreamerGL] Release GstVideoFrame when there is a flush event from the pipeline
        https://bugs.webkit.org/show_bug.cgi?id=172427

        Reviewed by Žan Doberšek.

        Without GStreamerGL MediaPlayerPrivateGStreamer copies the video frame from
        the decoder's buffer to the texture to display a video. So it makes possible
        to release the GstSample when it got a flush start event to free the decoder's
        buffer to the decoder without side-effects.

        Unlike the traditional way to render video, GStreamer GL does not copy a
        texture from the decoder to the texture mapper's buffer to draw video frame.
        It uses same GstMemory with the gst pipeline to manage the texture to prevent
        copy operations. So without releasing a layer buffer, there is no way to
        return GstMemory to the buffer pool.

        This patch releases current GstSample when the player got the flush start
        event.  It destructs the platform layer buffer any time there is a flush start
        event.

        However, it is not enough to release the GstMemory. The platform layer proxy
        should copy current buffer to show it to the compositor instead of a blank
        frame. It prevents flickerings until getting a new frame after handling flush
        events.

        No new tests, there shouldn't be behavior changes

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::swapBuffersIfNeeded):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink): Adds
        handler for the flush event.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::BitmapTextureGL::copyFromExternalTexture): Copies
        a external texture to the managed texture.
        * platform/graphics/texmap/BitmapTextureGL.h:
        (WebCore::BitmapTextureGL::create):
        To create the managed texture with specific format, this patch adds a
        optional parameter for a texture format.
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        (WebCore::TextureMapperGC3DPlatformLayer::swapBuffersIfNeeded):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::createTexture):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::TextureMapperPlatformLayerBuffer):
        (WebCore::TextureMapperPlatformLayerBuffer::clone):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::appendToUnusedBuffers): Added
        to schedule releasing unused buffers in main thread.
        (WebCore::TextureMapperPlatformLayerProxy::swapBuffer):
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:

2017-06-13  Youenn Fablet  <youenn@apple.com>

        Filter SDP from ICE candidates in case of local ICE candidate filtering
        https://bugs.webkit.org/show_bug.cgi?id=173120

        Reviewed by Eric Carlson.

        Covered by updated test.

        Adding filtering of local description in getters and createOffer promise.

        * Modules/mediastream/MediaEndpointSessionDescription.cpp:
        (WebCore::MediaEndpointSessionDescription::toRTCSessionDescription):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::filterICECandidate):
        (WebCore::PeerConnectionBackend::filterSDP):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCSessionDescription.h:
        (WebCore::RTCSessionDescription::setSdp):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::currentLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::pendingLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::localDescription):

2017-06-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] [macOS] Stop soft-linking Core Text function in iOS 11 and macOS High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=173289

        Reviewed by Lucas Forschler.

        No new tests because there is no behavior change.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):

2017-06-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Expand system-ui to include every item in the Core Text cascade list
        https://bugs.webkit.org/show_bug.cgi?id=173043
        <rdar://problem/21125708>

        Reviewed by Simon Fraser.

        The concept of the system font on Cocoa platforms represents the entire Core Text cascade list.
        However, previously, WebKit only represented system-ui by pulling out the first item in the Core
        Text cascade list. Instead, we should make all text rendered with "system-ui" match what the
        platform would natively render.

        Previously, we walked through the strings in the font-family property and looked them up one by
        one. However, now we want to abstract this idea of a font family to possibly hold a
        CTFontDescriptorRef instead of a string. This way, we expand a font-family list of ["fontA",
        "system-ui", "fontB"] to ["fontA", ... a bunch of CTFontDescriptorRefs ..., "FontB"]. We can
        then modify the consumer of this object to have two codepaths: the old string-based codepath,
        and a new, platform-specific codepath which simply embeds the CTFontDesriptorRefs inside a Font
        object.

        We don't want to simply pull out the family name from each item in the Core Text fallback list
        because that is a lossy translation. There is more information in these font descriptors which
        cannot be represented by CSS. Therefore, we must keep the descriptors alive and add the new
        codepath for them.

        We also don't want to run the CSS font matching algorithm on each member of the Core Text
        fallback list because it may yield different results from Core Text's font matching algorithm.
        Our goal is to draw text as closely as possible to the system APIs. If we ran it, we may find
        a font which is closer to the requested traits, but it would look out of place on the system.

        Tests: fast/text/system-font-fallback-emoji.html
               fast/text/system-font-fallback.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::realizeNextFallback): The consumer of our new data type. Now uses WTF::visit().
        (WebCore::FontCascadeFonts::realizeFallbackRangesAt): Now that the number of items to test
        against the current character is larger than the number of strings in the font-family list,
        we need to update the existing code to use the correct value.
        * platform/graphics/FontDescription.cpp: Default implementation for non-Cocoa ports.
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::FontCascadeDescription::effectiveFamilyCount):
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/FontDescription.h: Our new data type is a Variant of AtomicString and a
        platform-specific class. Cocoa uses a class that holds a CTFontDescriptorRef and other ports
        use an empty non-constructable class.
        * platform/graphics/FontFamilySpecificationNull.h: Added. The empty non-constructable
        class.
        (WebCore::FontFamilySpecificationNull::fontRanges):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::platformInit): Changing the system language will change the system font
        fallback list, so we need to listen to this notification. This also matters for
        FontCache::systemFallbackForCharacters(), so we should build off the same callback we are
        already using for font installation.
        (WebCore::invalidateFontCache):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp: Added. The platform-specific creation of
        our CTFontDescriptorRefs. We hold them cached in a SystemFontDatabase.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParameters):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::isHashTableDeletedValue):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::operator==):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::hash):
        (WebCore::SystemFontDatabase::singleton):
        (WebCore::SystemFontDatabase::systemFontCascadeList):
        (WebCore::SystemFontDatabase::clear):
        (WebCore::SystemFontDatabase::SystemFontDatabase):
        (WebCore::SystemFontDatabase::applyWeightAndItalics):
        (WebCore::SystemFontDatabase::removeCascadeList):
        (WebCore::SystemFontDatabase::computeCascadeList):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::hash):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::equal):
        (WebCore::isSystemFontString):
        (WebCore::systemFontParameters):
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::FontCascadeDescription::effectiveFamilyCount): We don't store the result of this
        because it would probably be a bad idea to increase the size of every single FontCascade just
        in case it might ask for the system font. Most fonts never mention system-ui. Because it's so
        rare, we can just recalculate the result of this as necessary. This shouldn't be slow because
        the results are cached.
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp: Added.
        (WebCore::FontFamilySpecificationCoreText::fontRanges): Create a FontRanges from a
        CTFontDescriptorRef.
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.h: Added.
        (WebCore::FontFamilySpecificationCoreText::FontFamilySpecificationCoreText):
        * platform/graphics/ios/FontCacheIOS.mm: Delete the old handling for system-ui.
        (WebCore::platformFontWithFamilySpecialCase):
        (WebCore::baseSystemFontDescriptor): Deleted.
        (WebCore::systemFontModificationAttributes): Deleted.
        (WebCore::systemFontDescriptor): Deleted.
        * platform/graphics/mac/FontCacheMac.mm: Ditto.
        (WebCore::platformFontWithFamilySpecialCase):
        (WebCore::toNSFontWeight): Deleted.

2017-06-12  Daewoong Jang  <daewoong.jang@navercorp.com>

        Remove WebCore::unloadModule and related data types
        https://bugs.webkit.org/show_bug.cgi?id=173231

        Reviewed by Darin Adler.

        * platform/FileSystem.h:
        (WebCore::PlatformModuleVersion::PlatformModuleVersion): Deleted.
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::unloadModule): Deleted.
        * platform/win/FileSystemWin.cpp:
        (WebCore::unloadModule): Deleted.

2017-06-12  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; fix a misspelling in CoreMediaSoftLink.{h,cpp}.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:

2017-06-12  Myles C. Maxfield  <mmaxfield@apple.com>

        @font-face rules with invalid primary fonts never download their secondary fonts
        https://bugs.webkit.org/show_bug.cgi?id=173138
        <rdar://problem/32554450>

        Reviewed by Simon Fraser.

        We have logic in CSSFontAccessor::font() which disallows downloading a CSSFontFace if that CSSFontFace
        is already in the Succeeded state. However, it was possible for a succeeded CSSFontFace to still fail
        to create a font. In this situation, we wouldn't be able to use the downloaded font, and we wouldn't
        try to download the next item in the src: list because the CSSFontFace is succeeded.

        This patch strengthens the meaning of the Succeeded state. Previously, it just meant that the bytes
        in the file were downloaded successfully. This patch extends this to also mean that the bytes in the
        file can be successfully interpreted as a font. This way, the CSSFontFace in the example above won't be
        set to the Succeeded state, so we will continue follow the src: list and download the secondary fonts.

        This has an added benefit that the CSS Font Loading API's promises will be called more appropriately.
        The transition to the Succeeded state will trigger a resolve of the promise. Now, these promises will
        only be resolved if the fonts are actually parsed and understood by our text system.

        Test: fast/text/font-fallback-invalid-load.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::fontLoaded): Move to the failed state if we can't understand the font
        data. This is the crux of this patch.
        (WebCore::CSSFontFaceSource::font): This function should only be called if we are in the Succeeded
        state, which means now we know we should always be able to understand the bytes of the file. Therefore,
        we can change some if statements into ASSERT()s.
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::createFont): Ditto.
        (WebCore::CachedSVGFont::platformDataFromCustomData): Similarly to CSSFontFaceSource::fontLoaded(), this
        adds another check to our criteria for transitioning into the Succeeded state, which will guarantee that
        later we will always be able to create the font object.

2017-06-12  Chris Dumez  <cdumez@apple.com>

        Add Arabic Kasra to list of blacklisted characters when puny-decoding URL
        https://bugs.webkit.org/show_bug.cgi?id=173283
        <rdar://problem/32725659>

        Reviewed by Brent Fulgham.

        Add Arabic Kasra to list of blacklisted characters when puny-decoding URL as
        it is almost invisible in the URL bar.

        Test: fast/url/user-visible/arabic_kasra.html

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):

2017-06-12  Jer Noble  <jer.noble@apple.com>

        Screen sleeps while doing WebRTC video
        https://bugs.webkit.org/show_bug.cgi?id=173278

        Reviewed by Eric Carlson.

        HTMLMediaElement triggers changing the sleep disabler token when the media engine
        says that its rate has changed; the MediaPlayerPrivateMediaStreamAVFObjC needs to
        notify its client (the HTMLMediaElement) that the rate has changed when the stream
        is played or paused.

        Drive-by fix: Don't set a sleep disabler token (i.e., allow the system and display
        to sleep) if the stream is strictly local-capture.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldDisableSleep):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause):

2017-06-12  Jer Noble  <jer.noble@apple.com>

        Seeking an MSE video will begin playing audio long before rendering video
        https://bugs.webkit.org/show_bug.cgi?id=173269

        Reviewed by Eric Carlson.

        Add a notification listener which will be messaged when a to-be-displayed sample
        is decoded to signal that the 'seeked' event should fire. Consolidate all the various
        flush methods to funnel into a single flushVideo().

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebBufferConsumedContext initWithParent:buffer:]):
        (-[WebBufferConsumedContext dealloc]):
        (-[WebBufferConsumedContext parent]):
        (-[WebBufferConsumedContext buffer]):
        (WebCore::bufferWasConsumedCallback):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::flush):
        (WebCore::SourceBufferPrivateAVFObjC::flushVideo):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::bufferWasConsumed):
        (WebCore::SourceBufferPrivateAVFObjC::willSeek):

2017-06-12  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Set audio session mode and options when capturing
        https://bugs.webkit.org/show_bug.cgi?id=173276
        <rdar://problem/32059254>

        Reviewed by Jer Noble.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory): Set mode and options so the default output is to the speaker,
        and so audio will be routed to bluetooth when appropriate.

2017-06-12  Jeremy Jones  <jeremyj@apple.com>

        Remove watchdog timer from WebVideoFullscreenInterfaceAVKit
        https://bugs.webkit.org/show_bug.cgi?id=173272
        rdar://problem/32260378

        Reviewed by Jer Noble.

        No new tests because no effect on DOM.

        WebVideoFullscreenInterfaceAVKit's watchdog attempts to clean-up fullscreen if the page becomes unresponsive.
        However, it is just calling exitfullscreen(), which initiates the animation, but leaves the fullscreen window
        in place and doesn't initiate cleanup. This leaves the browser in an unusable state since all events will still
        be captured by the fullscren window.

        This change uses the same method of hiding fullscreen window as switching tabs does. This will
        hide the fullscreen winodw and controller, leaving the browser available for interaction, and the page
        can take its time to properly cleanup the fullscreen window while hidden.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::watchdogTimerFired):

2017-06-12  Alex Christensen  <achristensen@webkit.org>

        Modernize UserScript.h
        https://bugs.webkit.org/show_bug.cgi?id=173273

        Reviewed by Tim Horton.

        No change in behavior. Moved encoders to UserScript.h. Use more Rvalues.

        * page/UserScript.h:
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::encode):
        (WebCore::UserScript::decode):

2017-06-12  Aaron Chu  <aaron_chu@apple.com>

        AX: Video/Audio Player Controls missing group container.
        https://bugs.webkit.org/show_bug.cgi?id=171790
        <rdar://problem/32008994>

        Reviewed by Antoine Quint.

        Added aria-label to group controls in media controls.

        * English.lproj/modern-media-controls-localized-strings.js:
        * Modules/modern-media-controls/controls/controls-bar.js:
        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls):
        (InlineMediaControls.prototype.set shouldUseAudioLayout):
        (InlineMediaControls.prototype._updateBottomControlsBarLabel):

2017-06-12  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Use SynchronousLoaderClient for platformLoadResourceSynchronously on WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=173195

        Reviewed by Alex Christensen.

        * PlatformWinCairo.cmake:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/curl/SynchronousLoaderClientCurl.cpp: Added.
        (WebCore::SynchronousLoaderClient::didReceiveAuthenticationChallenge):
        (WebCore::SynchronousLoaderClient::platformBadResponseError):

2017-06-12  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] If a capturing tab is muted while it is in the background, it can not be unmuted
        https://bugs.webkit.org/show_bug.cgi?id=173268
        <rdar://problem/32259809>

        Reviewed by Jer Noble.

        No new tests, tested manually.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::startProducingData): Mute the private stream if page capture is muted.
        (WebCore::MediaStream::mediaState): Set new interrupted state.

        * dom/Document.cpp:
        (WebCore::Document::notifyMediaCaptureOfVisibilityChanged): Don't track "muted for visibility"
        state, let the source center deal with it.
        * dom/Document.h:

        * page/MediaProducer.h: Add bits for interrupted audio and video capture.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource): Drive-by fix: delete m_suppressNotifications,
        it isn't used.
        (WebCore::RealtimeMediaSource::setInterrupted): New. Mute capture when an interruption begins,
        and unmute when it ends in an unmuted page.
        (WebCore::RealtimeMediaSource::setMuted): Do not unmute if interrupted.
        (WebCore::RealtimeMediaSource::settingsDidChange): Don't check m_suppressNotifications, it is
        never set.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setVideoCapturePageState): Renamed from 
        setVideoCaptureMutedForPageVisibility.
        (WebCore::RealtimeMediaSourceCenter::setVideoCaptureMutedForPageVisibility): Deleted.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::stopProducingData): Clear m_interruption because the session
        has been deleted, so we will never get an "end interruption" notification.
        (WebCore::AVMediaCaptureSource::captureSessionIsRunningDidChange): Don't return early if
        the muted state needs to be updated.
        (WebCore::AVMediaCaptureSource::captureSessionEndInterruption): Return early if the session
        has been cleared.
        (WebCore::AVMediaCaptureSource::interrupted): New.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSourceFactory::setVideoCapturePageState): Renamed from 
        setVideoCaptureMutedForPageVisibility.
        (WebCore::AVVideoCaptureSourceFactory::setVideoCaptureMutedForPageVisibility): Deleted.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSourceFactory::setVideoCapturePageState): Ditto.
        (WebCore::MockRealtimeVideoSourceFactory::setVideoCaptureMutedForPageVisibility): Deleted.

2017-06-12  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Remove experimental feature flag of SubtleCrypto
        https://bugs.webkit.org/show_bug.cgi?id=173197
        <rdar://problem/32688148>

        Reviewed by Brent Fulgham.

        The SubtleCrypto implementation is no longer experimental and is ready for production use. We are therefore removing the runtime flag.

        No tests.

        * page/Crypto.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setSubtleCryptoEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::subtleCryptoEnabled): Deleted.

2017-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Allow the injected bundle to add client data when writing an image to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=173238
        <rdar://problem/31943370>

        Reviewed by Ryosuke Niwa and Tim Horton.

        Add clientTypes and clientData to PasteboardImage, and call out to the injected bundle using
        getClientPasteboardDataForRange when writing a PasteboardImage. When generating item providers for dragging in
        the UI process in PlatformPasteboard, add any available client data as representations to the initialization
        list used to set the WebItemProviderPasteboard.

        Test: DataInteraction.InjectedBundleImageElementData

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard):
        * platform/Pasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::writeObjectRepresentations):

2017-06-12  Sam Weinig  <sam@webkit.org>

        [WebIDL] Re-implement GetOwnPropertySlot[ByIndex] generation to more closely follow WebIDL
        https://bugs.webkit.org/show_bug.cgi?id=173229

        Reviewed by Chris Dumez.

        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * bindings/js/JSBindingsAllInOne.cpp:
        Remove JSHTMLFrameSetElementCustom.cpp which is no longer needed.

        * bindings/js/JSDOMAbstractOperations.h:
        (WebCore::isVisibleNamedProperty):
        Add OverrideBuiltins enum as requested by a previous review (and I forgot address) and adopt it
        in isVisibleNamedProperty, switch to VMInquiry as we use elsewhere and add a missing FIXME.

        (WebCore::accessVisibleNamedProperty):
        Add variation of isVisibleNamedProperty that takes a functor and returns either the value the
        functor returns, or std::nullopt. This allows getOwnPropertySlot to avoid doing two lookups for
        property, once in the named property visibility algorithm and again when it needs the value.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        Standardize toJS functions to match generated code (have one that takes a reference, and does the
        cast, and one that takes a pointer, does a null check and calls the one that takes a reference).
        
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot):.
        Update to use the implementation namedItem (which is also used by the generated getOwnPropertySlotByIndex)
        and match the updated bindings rules. This cannot yet be generated due to the odd case of the 'open'
        property requiring custom treatment. I tried removing this, but it cause tests to fail in a way that indicated
        that accessing the lexical global object in the open implementation was not working correctly.

        * bindings/js/JSHTMLFrameSetElementCustom.cpp: Removed.
        Now generated.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateIndexedGetter):
        Add description from the spec and change to return the computed values rather than
        print them to the output array. This will be useful for some clients going forward,
        who only want the attributes.

        (GenerateNamedGetter):
        Add description from the spec and change to return the computed values rather than
        print them to the output array. This will be useful for some clients going forward,
        who only want the attributes. Also greatly simplifies things as [CustomNamedGetter]s
        are no longer needed/supported and the exception / null value checks are performed
        elsewhere.

        (GenerateNamedGetterLambda):
        This generates a lambda functor for use in accessVisibleNamedProperty(...). It
        handles calling the named getter implementation, and transforming the result into
        an one that can be reasoned about by accessVisibleNamedProperty, specifically,
        converting it from using IDL's notion of nullability to std::optional. 

        (GenerateGetOwnPropertySlot):
        (GenerateGetOwnPropertySlotByIndex):
        Add spec annotations and use helper functions. 

        (GenerateGetOwnPropertyNames):
        Add FIXME about supporting non-contiguous indices (should that ever come up)
        and use JSObject explicitly, rather than base, to get the default getOwnPropertyNames
        implementation.

        (GeneratePut):
        Use JSObject explicitly, rather than base, to get the default put implementation.

        (GeneratePutByIndex):
        Use JSObject explicitly, rather than base, to get the default putByIndex implementation.

        (GenerateDefineOwnProperty):
        Use JSObject explicitly, rather than base, to get the default getOwnPropertySlot/defineOwnProperty
        implementations.

        (GenerateDeletePropertyCommon):
        Adopt new OverrideBuiltins enum.

        (GenerateDeletePropertyDefinition):
        Use JSObject explicitly, rather than base, to get the default deleteProperty implementation.

        (GenerateDeletePropertyByIndexDefinition):
        Use JSObject explicitly, rather than base, to get the default deletePropertyByIndex implementation.

        (InstanceOverridesGetOwnPropertySlot):
        Remove [CustomNamedGetter] use.
 
        (GenerateHeader):
        Remove [CustomNamedGetter] use and merge InstanceOverridesGetOwnPropertySlotByIndex into
        InstanceOverridesGetOwnPropertySlot. Specifying either [CustomGetOwnPropertySlot] or
        [CustomGetOwnPropertySlotByIndex] will now declare both hooks.
        
        (GenerateImplementation):
        Rename GenerateGetOwnPropertySlotBody/GenerateGetOwnPropertySlotByIndexBody to remove the 'Body',
        and predicate their generation purely on InstanceOverridesGetOwnPropertySlot as noted for the 
        reasons above.

        (GenerateGetOwnPropertySlotBody): Deleted.
        (GenerateGetOwnPropertySlotBodyByIndex): Deleted.
        (InstanceOverridesGetOwnPropertySlotByIndex): Deleted.

        * bindings/scripts/IDLAttributes.json:
        Remove [CustomNamedGetter].

        * dom/ExceptionOr.h:
        (WebCore::ExceptionOr<ReturnType>::returnValue):
        Add a function to peek at the return value

        * html/HTMLDocument.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::clear):
        (WebCore::HTMLDocument::captureEvents):
        (WebCore::HTMLDocument::releaseEvents):
        Move clear up to be with the other obsolete no-op functions. Add spec annotations
        to clear up any confusion about why they are no-ops.

        (WebCore::HTMLDocument::namedItem):
        Add implementation of namedItem based on the one that was in JSDOMHTMLDocumentCustom.cpp.

        (WebCore::HTMLDocument::supportedPropertyNames):
        Add stub version of supportedPropertyNames with the algorithm we need to implement.
        I don't want to change behavior in this patch, and since we have not enumerated the
        properties of document in the past, I left this unimplemented for now.

        * html/HTMLDocument.idl:
        Remove [CustomNamedGetter] and add named getter.

        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::namedItem):
        Add named getter based on the implementation in JSHTMLFrameSetElementCustom.cpp.

        (WebCore::HTMLFrameSetElement::supportedPropertyNames):
        As noted above, I don't want to change behavior with this change, so I have left this unimplemented
        for now. However, we may not want to implement it at all, as this named getter is not specified and
        at least Firefox does not support it.

        * html/HTMLFrameSetElement.idl:
        Remove [CustomNamedGetter] and add named getter.

        * bindings/scripts/test/JS/JSTestEventTarget.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/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.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/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.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/JSTestOverrideBuiltins.cpp:
        Update test results.

        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Removed.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h: Removed.
        * bindings/scripts/test/TestCustomNamedGetter.idl: Removed.
        Remove test of [CustomNamedGetter] which no longer exists. 

2017-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebItemProviderPasteboard should call its completion block immediately after a synchronous load
        https://bugs.webkit.org/show_bug.cgi?id=173225
        <rdar://problem/32713144>

        Reviewed by Tim Horton.

        Ensures that a completion block passed to doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout: will be
        invoked immediately, if a synchronous timeout is specified and loading finishes before the synchronous timeout
        is reached. To do this, we first factor out the completion logic into a new block. If the synchronous timeout
        exists and dispatch_group_wait returns 0 (indicating that the dispatch group finished without hitting the
        wait timeout) we simply invoke the block and return early; otherwise, we will register the completion block
        using dispatch_group_notify.

        Test: DataInteractionTests.WebItemProviderPasteboardLoading

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):

2017-06-12  Jeremy Jones  <jeremyj@apple.com>

        WebAVPlayerController minTime and maxTime should be calculated properties to provide correct values when streaming.
        https://bugs.webkit.org/show_bug.cgi?id=173193
        rdar://problem/32684807

        Reviewed by Jer Noble.

        No new tests because no affect on the DOM. This only affects properties consumed to AVKit.

        -minTime and -maxTime should be calculated properties so they supply the exptected values to AVKit while streaming.

        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController maxTime]):
        (+[WebAVPlayerController keyPathsForValuesAffectingMaxTime]):
        (-[WebAVPlayerController minTime]):
        (+[WebAVPlayerController keyPathsForValuesAffectingMinTime]):
        (-[WebAVPlayerController resetMediaState]):
        * platform/ios/WebPlaybackSessionInterfaceAVKit.mm:
        (WebCore::WebPlaybackSessionInterfaceAVKit::durationChanged):

2017-06-12  Chris Dumez  <cdumez@apple.com>

        Call _sqlite3_purgeEligiblePagerCacheMemory() on memory pressure only if sqlite is initialized
        https://bugs.webkit.org/show_bug.cgi?id=173264

        Reviewed by Ryosuke Niwa.

        Call _sqlite3_purgeEligiblePagerCacheMemory() on memory pressure only if sqlite is initialized.
        Otherwise, not only is it no needed, it is also potentially unsafe.

        * page/MemoryRelease.cpp:
        (WebCore::registerSQLiteMemoryPressureHandler):
        * page/MemoryRelease.h:
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        (WebCore::registerSQLiteMemoryPressureHandler):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::initializeSQLiteIfNecessary):

2017-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Use utility functions in CryptoKeyEC, CryptoKeyRSA
        https://bugs.webkit.org/show_bug.cgi?id=173253

        Reviewed by Michael Catanzaro.

        Use the utility functions from the GCryptUtilities.h header instead
        of writing the same code in both CryptoKeyEC and CryptoKeyRSA
        implementations. The switches are straightforward, the only difference
        is that the GCryptUtilities functions return a std::optional<> object,
        meaning we have to address possibly invalid return value.

        The mpiData() function is overloaded, making it possible to pass to it
        either a gcry_sexp_t or gcry_mpi_t object. Additionally, mpiLength()
        function is added, overloading again for gcry_sexp_t and gcry_mpi_t.
        This function is used from mpiData() as well as in CryptoKeyRSA when
        retrieving the RSA modulus length.

        No new tests -- no changes in behavior.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::CryptoKeyEC::platformExportRaw):
        (WebCore::CryptoKeyEC::platformAddFieldElements):
        (WebCore::extractMPIData): Deleted.
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::getRSAModulusLength):
        (WebCore::getRSAKeyParameter):
        (WebCore::CryptoKeyRSA::exportData):
        (WebCore::getParameterMPIData): Deleted.
        * crypto/gcrypt/GCryptUtilities.h:
        (WebCore::mpiLength):
        (WebCore::mpiData):

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

        didMoveToNewDocument doesn't get called on an Attr inside a shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=173133

        Reviewed by Antti Koivisto.

        The bug was caused by moveShadowTreeToNewDocument never calling didMoveToNewDocument on Attr nodes.
        Fixed the bug by using the same traversal code as moveTreeToNewScope in moveShadowTreeToNewDocument
        by extracting the traversal code as a templatized traverseSubtreeToUpdateTreeScope.

        Also removed the code to increment the DOM tree version in moveTreeToNewScope. This code was there
        to invalidate the HTML collection caches which used to clear the cache whenever the DOM tree version
        changed before r122621 (five years ago! by me). Since we now eagerly invalidate each node list and
        HTML collection's caches via NodeListsNodeData::adoptTreeScope and NodeListsNodeData::adoptDocument.

        Test: fast/dom/adopt-attr-with-shadow-tree.html

        * dom/Node.cpp:
        (WebCore::moveNodeToNewDocument): Assert that the node had been adopted to a new document.
        (WebCore::traverseSubtreeToUpdateTreeScope): Extracted from moveTreeToNewScope.
        (WebCore::moveShadowTreeToNewDocument): Use traverseSubtreeToUpdateTreeScope to adopt each node
        to the new document.
        (WebCore::Node::moveTreeToNewScope): See above.
        * testing/Internals.cpp:
        (WebCore::Internals::referencingNodeCount): Added. Used in the newly added regression test.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-11  Dan Bernstein  <mitz@apple.com>

        [Mac] Unaligned pointers in static CMBufferCallbacks structs defined in WebCoreDecompressionSession.mm
        https://bugs.webkit.org/show_bug.cgi?id=173245

        Reviewed by Sam Weinig.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::enqueueSample): Prepend 4 bytes of padding to the
          structs so that the pointers are properly aligned.

2017-06-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r217870): Null deref under PageOverlayController::uninstallPageOverlay using find in page
        https://bugs.webkit.org/show_bug.cgi?id=173196
        <rdar://problem/32686871>

        Reviewed by Simon Fraser.

        * page/TextIndicator.cpp:
        (WebCore::initializeIndicator):
        * page/TextIndicator.h:
        The change in r217870 had an expected but not thought-through side-effect
        that you cannot create a TextIndicator for far-off-screen elements. This
        is a problem for find-in-page, which uses TextIndicator to paint the yellow
        highlight before scrolling it into view.

        Bring back TextIndicatorOptionDoNotClipToVisibleRect and revert to it for
        find in page, since it needs different behavior than something like
        drag and drop, which always operates on content near the visible viewport.

2017-06-10  Dan Bernstein  <mitz@apple.com>

        Reverted r218056 because it made the IDE reindex constantly.

        * Configurations/DebugRelease.xcconfig:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        [Xcode] With Xcode 9 developer beta, everything rebuilds when switching between command-line and IDE
        https://bugs.webkit.org/show_bug.cgi?id=173223

        Reviewed by Sam Weinig.

        The rebuilds were happening due to a difference in the compiler options that the IDE and
        xcodebuild were specifying. Only the IDE was passing the -index-store-path option. To make
        xcodebuild pass that option, too, set CLANG_INDEX_STORE_ENABLE to YES if it is unset, and
        specify an appropriate path in CLANG_INDEX_STORE_PATH.

        * Configurations/DebugRelease.xcconfig:

2017-06-10  Dan Bernstein  <mitz@apple.com>

        [macOS] REGRESSION: Link drag images blend into the background in Sierra and earlier
        https://bugs.webkit.org/show_bug.cgi?id=172933
        <rdar://problem/32580649>

        Reviewed by Tim Horton.

        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink): When targeting macOS Sierra and earlier, give the link
          drag image a drop shadow that resembles the one that macOS High Sierra applies to drag
          image layers.

2017-06-10  Andy Estes  <aestes@apple.com>

        [QuickLook] PreviewLoader needs to check if its ResourceLoader has reached the terminal state before calling didReceiveResponse() and friends
        https://bugs.webkit.org/show_bug.cgi?id=173190
        <rdar://problem/31360659>

        Reviewed by Brady Eidson.

        WebPreviewLoader's SubresourceLoader can reach a terminal state while data is loading from
        QLPreviewConverter (the user can cancel, for instance). We can't call functions like
        didReceiveResponse() in this state, because the loader no longer points to a CachedResource,
        leading to null pointer dereferences.

        Fix this in WebPreviewLoader by checking if the SubresourceLoader is in a terminal state
        before calling didReceiveResponse(), didReceiveData(), didFinishLoading(), and didFail().

        Fixes web process crashes in the QuickLook.CancelNavigationAfterResponse API test.

        * loader/ios/PreviewLoader.mm:
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]):
        (-[WebPreviewLoader connection:didReceiveData:lengthReceived:]):
        (-[WebPreviewLoader connectionDidFinishLoading:]):
        (-[WebPreviewLoader connection:didFailWithError:]):

2017-06-09  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in indexeddb code
        https://bugs.webkit.org/show_bug.cgi?id=173198

        Reviewed by Sam Weinig.

        Use WTF::Function instead of std::function in indexeddb code to avoid copying.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::getAllDatabaseNames):
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::getAllDatabaseNames):
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNames):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::doComplete):
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallbackOrFireError):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabase::getCount):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::activateTransactionInBackingStore):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2017-06-09  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.

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

2017-06-09  Yoav Weiss  <yoav@yoav.ws>

        [preload] Fix builds with ENABLE_VIDEO_TRACK set to false
        https://bugs.webkit.org/show_bug.cgi?id=173221

        Reviewed by Chris Dumez.

        https://bugs.webkit.org/show_bug.cgi?id=173047 introduced a build error for builds with video track support disabled.
        This fixes that build issue.

        No new tests since there's no functional change.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::as):

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

        IsInShadowTreeFlag does not get updated for a non-container node
        https://bugs.webkit.org/show_bug.cgi?id=173084

        Address Darin's review comment.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyNodeInsertedIntoDocument):
        (WebCore::notifyNodeInsertedIntoTree):
        (WebCore::notifyNodeRemovedFromDocument):

2017-06-09  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.

        * platform/spi/mac/AVFoundationSPI.h:

2017-06-09  Brady Eidson  <beidson@apple.com>

        Crash when IndexedDB's getAll is used inside a Web Worker.
        https://bugs.webkit.org/show_bug.cgi?id=172434

        Reviewed by Andy Estes.

        Test: storage/indexeddb/modern/worker-getall.html

        * Modules/indexeddb/IDBGetAllResult.cpp:
        (WebCore::IDBGetAllResult::IDBGetAllResult): Add an isolated-copying constructor.
        (WebCore::IDBGetAllResult::isolatedCopy):
        * Modules/indexeddb/IDBGetAllResult.h:
        
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::isolatedCopy): Actually copy the IDBGetAllResult.

2017-06-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix Mac build after r218039.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        * platform/network/DataURLDecoder.h:

2017-06-09  Chris Dumez  <cdumez@apple.com>

        Use WTF::Function instead of std::function in DataURLDecoder
        https://bugs.webkit.org/show_bug.cgi?id=173194

        Reviewed by Sam Weinig.

        Use WTF::Function instead of std::function in DataURLDecoder to avoid copying.

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::DecodeTask::DecodeTask):
        (WebCore::DataURLDecoder::createDecodeTask):
        * platform/network/DataURLDecoder.h:

2017-06-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Image should clear its ImageObserver* when CachedImage releases the last reference to its RefCounted<ImageObserver>
        https://bugs.webkit.org/show_bug.cgi?id=173077

        Reviewed by Simon Fraser.

        Before dereferencing ImageObserver, CachedImage::clearImage() should check
        whether it is the only object that holds a reference to this ImageObserver.
        And if this is true, m_image have to clear its raw pointer to the deleted
        ImageObserver by calling m_image->setImageObserver(nullptr).

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setBodyDataFrom):
        (WebCore::CachedImage::CachedImageObserver::CachedImageObserver):
        (WebCore::CachedImage::clearImage):
        * loader/cache/CachedImage.h:

2017-06-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix layout test failures following <https://trac.webkit.org/changeset/218028/webkit>
        (https://bugs.webkit.org/show_bug.cgi?id=158121)
        <rdar://problem/26012994>

        For now, if we do not have a frame then consider the document a secure context. One way this can happen
        is the page accesses a frame that was removed from the document as demonstrated by the test:
        fast/dom/Window/property-access-on-cached-window-after-frame-removed.html. Treating a frameless
        document as a secure context also matches Blink's implementation:
        <https://chromium.googlesource.com/chromium/src/+/fc202b2b1174f5732f7b9e63a6c46fd01ac2be02/third_party/WebKit/Source/core/dom/Document.cpp#4079>.

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

2017-06-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r218003.

        This change caused assertion failures in existing LayoutTests.

        Reverted changeset:

        "Image should clear its ImageObserver* when CachedImage
        releases the last reference to its RefCounted<ImageObserver>"
        https://bugs.webkit.org/show_bug.cgi?id=173077
        http://trac.webkit.org/changeset/218003

2017-06-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Remove unsupported CryptoAlgorithmIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=173128
        <rdar://problem/32666826>

        Reviewed by Brent Fulgham.

        This patch remove AES_CMAC, DH and CONCAT as they are not implemented and not recommended
        by the spec. Hence there is no plan to support them in short term.

        No change of behaviour.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::supportExportKeyThrow):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        * crypto/CryptoAlgorithmIdentifier.h:
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::isValidAESAlgorithm):

2017-06-09  Daniel Bates  <dabates@apple.com>

        Implement W3C Secure Contexts Draft Specification
        https://bugs.webkit.org/show_bug.cgi?id=158121
        <rdar://problem/26012994>

        Reviewed by Alex Christensen.

        Part 2

        Implements the Secure Contexts spec., <https://w3c.github.io/webappsec-secure-contexts/> (Editor's
        Draft, 17 November 2016) except for the allow-secure-context sandbox flag and restrictions on window.opener
        as the former is at risk of being dropped from the specification and the latter is being discussed in
        <https://github.com/w3c/webappsec-secure-contexts/issues/42>. We are not making use of the Secure
        Contexts functionality at the moment. We will make use of it in a subsequent commit.

        * dom/Document.cpp:
        (WebCore::Document::isSecureContext): Added,
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::isSecureContext): Deleted; moved to class SecurityContext.
        * dom/SecurityContext.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::isSecureContext): Added.
        * page/DOMWindow.h:
        * page/SecurityOrigin.cpp:
        (WebCore::isLoopbackIPAddress): Convenience function to determine whether the host portion
        of the specified URL is a valid loopback address.
        (WebCore::shouldTreatAsPotentionallyTrustworthy): Implements the "Is origin potentially trustworthy?"
        algorithm from the Secure Context specification.
        (WebCore::SecurityOrigin::SecurityOrigin): Compute whether this origin is potentially trustworthy.
        Also, use C++ brace initialization syntax in member initialization list.
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::isPotentionallyTrustworthy): Added.
        * page/WindowOrWorkerGlobalScope.idl: Expose attribute isSecureContext. Fix style nit; remove
        period from a comment that is not meant to be a complete sentence.
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::isSecureContext): Added.
        * workers/WorkerGlobalScope.h:

2017-06-09  Daniel Bates  <dabates@apple.com>

        Implement W3C Secure Contexts Draft Specification
        https://bugs.webkit.org/show_bug.cgi?id=158121
        <rdar://problem/26012994>

        Reviewed by Chris Dumez.

        Part 1

        Teach the bindings code generator to generate a runtime check for an interface, attribute or
        function annotated with the extended attribute [SecureContext]. For now, the runtime check
        (ScriptExecutionContext::isSecureContext()) always returns true. We will flesh out the
        implementation of this runtime check in a subsequent commit.

        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsRuntimeCheck):
        (GenerateRuntimeEnableConditionalString):
        Generate a runtime check for an interface, attribute, or function that is annotated with
        the extended attribute [SecureContext].

        * bindings/scripts/IDLAttributes.json: Update JSON now that we support SecureContext.
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttributes): Add the SecureContext extended attribute to a constructor,
        if applicable.

        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachablePrototype::finishCreation):
        (WebCore::IDLAttribute<JSTestGenerateIsReachable>::cast):
        (WebCore::jsTestGenerateIsReachableASecretAttributeGetter):
        (WebCore::jsTestGenerateIsReachableASecretAttribute):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::finishCreation):
        (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResultBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResult):
        (WebCore::jsTestGlobalObjectInstanceFunctionGetSecretBooleanBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionGetSecretBoolean):
        (WebCore::jsTestGlobalObjectInstanceFunctionTestFeatureGetSecretBooleanBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionTestFeatureGetSecretBoolean):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodePrototype::finishCreation):
        (WebCore::jsTestNodePrototypeFunctionCalculateSecretResultBody):
        (WebCore::jsTestNodePrototypeFunctionCalculateSecretResult):
        (WebCore::jsTestNodePrototypeFunctionGetSecretBooleanBody):
        (WebCore::jsTestNodePrototypeFunctionGetSecretBoolean):
        (WebCore::jsTestNodePrototypeFunctionTestFeatureGetSecretBooleanBody):
        (WebCore::jsTestNodePrototypeFunctionTestFeatureGetSecretBoolean):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::jsTestObjPrototypeFunctionCalculateSecretResultBody):
        (WebCore::jsTestObjPrototypeFunctionCalculateSecretResult):
        (WebCore::jsTestObjPrototypeFunctionGetSecretBooleanBody):
        (WebCore::jsTestObjPrototypeFunctionGetSecretBoolean):
        (WebCore::jsTestObjPrototypeFunctionTestFeatureGetSecretBooleanBody):
        (WebCore::jsTestObjPrototypeFunctionTestFeatureGetSecretBoolean):
        Update expected results.

        * bindings/scripts/test/TestGenerateIsReachable.idl:
        * bindings/scripts/test/TestGlobalObject.idl:
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        Add test cases.

        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::isSecureContext): Added. For now, always returns true.
        We will implement this function in a subsequent commit.

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

        Media elements are allowed to continue to load media data after navigation
        https://bugs.webkit.org/show_bug.cgi?id=173179

        Reviewed by Eric Carlson.

        Deny media sessions the ability to load media data when suspended.  

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isSuspended):
        * Modules/webaudio/AudioContext.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSuspended):
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::isSuspended):
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSessionClient::isSuspended):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sessionCanLoadMedia):

2017-06-09  Daniel Bates  <dabates@apple.com>

        CSP: Apply img-src directive to favicon loads
        https://bugs.webkit.org/show_bug.cgi?id=172733
        <rdar://problem/32082654>

        Reviewed by Brady Eidson.

        Differentiate favicon requests from raw resources requests so that we can apply the Content
        Security Policy to favicon requests.

        Tests: http/tests/security/contentSecurityPolicy/allow-favicon.html
               http/tests/security/contentSecurityPolicy/block-favicon.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent): Keep our current behavior and treat a
        favicon resource analogous to a raw resource.
        (WebCore::InspectorPageAgent::cachedResourceType): Ditto.
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient): Now that we differentiate between a favicon
        and a raw resource we add favicons to the list of unsupported <link as="..."> types. This
        makes the list of handled request destination types more closely match the list of valid types
        documented in <https://fetch.spec.whatwg.org/#concept-request-destination> (24 May 2017).
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType): Keep our current behavior and treat a favicon resource analogous
        to a raw resource.
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded): Ditto.
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource): Update for renaming.
        * loader/cache/CachedRawResource.h:
        (isType): Ditto.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType): Keep our current behavior and treat
        a favicon resource analogous to a raw resource.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isMainOrMediaOrFaviconOrRawResource): Renamed; formerly named isMainOrMediaOrRawResource.
        Also return true if the this resource is a favicon.
        (WebCore::CachedResource::ignoreForRequestCount): Keep our current behavior and treat a
        favicon resource analogous to a raw resource.
        (WebCore::CachedResource::isMainOrMediaOrRawResource): Deleted; renamed to isMainOrMediaOrFaviconOrRawResource.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource): Keep our current behavior and treat a favicon resource analogous
        to a raw resource.
        (WebCore::CachedResourceLoader::requestFavicon): Added.
        (WebCore::contentTypeFromResourceType): Keep our current behavior and treat a favicon
        resource analogous to a raw resource.
        (WebCore::CachedResourceLoader::checkInsecureContent): Ditto.
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy): Check if the favicon is
        allowed by the CSP of the page.
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Update for renaming.
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading): Substitute call CachedResourceLoader::requestFavicon() for CachedResourceLoader::requestRawResource()
        and remove comment about ContentSecurityPolicyImposition::DoPolicyCheck being a placeholder. This is no longer the
        case. This resource request option is now meaningful as we want to apply the CSP of the page with respect to the
        request for the favicon.

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

        [iOS DnD] Add a hook to perform two-step drops in editable content
        https://bugs.webkit.org/show_bug.cgi?id=172992
        <rdar://problem/32590174>

        Reviewed by Tim Horton.

        Adds hooks in DragController::concludeEditDrag to give the client layer a chance to perform custom handling when
        dropping in editable content.
        Tests:  DataInteractionTests.InjectedBundleOverridePerformTwoStepDrop
                DataInteractionTests.InjectedBundleAllowPerformTwoStepDrop

        * loader/EmptyClients.cpp:
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EditorClient.h:

2017-06-09  Matthew Hanson  <matthew_hanson@apple.com>

        Revert r217955. rdar://problem/21125708

2017-06-06 Konstantin Tokarev  <annulen@yandex.ru>

        [MediaFoundation] Volume controls of different media elements should be independent
        https://bugs.webkit.org/show_bug.cgi?id=172967

        Based on patch by Vitaly Slobodin <vitaliy.slobodin@gmail.com>
        Reviewed by Alex Christensen.

        IMFSimpleAudioVolume interface controls master volume of the
        application. We should use IMFAudioStreamVolume interface instead.

        No new tests needed.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::setAllChannelVolumes):
        (WebCore::MediaPlayerPrivateMediaFoundation::setVolume):
        (WebCore::MediaPlayerPrivateMediaFoundation::setMuted):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2017-06-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Image should clear its ImageObserver* when CachedImage releases the last reference to its RefCounted<ImageObserver>
        https://bugs.webkit.org/show_bug.cgi?id=173077

        Reviewed by Simon Fraser.

        Before dereferencing ImageObserver, CachedImage::clearImage() should check
        whether it is the only object that holds a reference to this ImageObserver.
        And if this is true, m_image have to clear its raw pointer to the deleted
        ImageObserver by calling m_image->setImageObserver(nullptr).

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setBodyDataFrom):
        (WebCore::CachedImage::CachedImageObserver::CachedImageObserver):
        (WebCore::CachedImage::clearImage):
        * loader/cache/CachedImage.h:

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

        Add flag allow-popups-to-escape-sandbox to iframe sandbox
        https://bugs.webkit.org/show_bug.cgi?id=158875

        Reviewed by Chris Dumez.

        This patch adds support for the iframe@allow-popups-to-escape-sandbox attribute.
        This allows to pass more W3C Web Platform tests.

        Tests: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-1.html
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-2.html

        * dom/SecurityContext.cpp: Add allow-popups-to-escape-sandbox flag.
        (WebCore::SecurityContext::isSupportedSandboxPolicy):
        (WebCore::SecurityContext::parseSandboxPolicy):
        * dom/SecurityContext.h: Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Do not force sandbox flags when we have allow-popups-to-escape-sandbox.
        (WebCore::createWindow): Ditto.

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

        [iOS] Video occasionally mixes with other system audio instead of interrupting
        https://bugs.webkit.org/show_bug.cgi?id=173127

        Reviewed by Eric Carlson.

        Tests: platform/mac/audio-session-category-video-track-change.html

        When an HTMLMediaElement's tracks change their enabled state, make sure to update
        the PlatformMediaElement, for canProduceAudio() may have changed. 

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState):

        The rest of the changes in this revision are to allow the above to be testable.

        * page/Settings.cpp:
        * page/Settings.h:
        * platform/audio/AudioSession.h:
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::category):
        (WebCore::AudioSession::setCategory):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldManageAudioSessionCategory):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::audioSessionCategory):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-09  Chris Dumez  <cdumez@apple.com>

        CSS transitions added while page is not visible do not start when the page becomes visible
        https://bugs.webkit.org/show_bug.cgi?id=173166
        <rdar://problem/32250351>

        Reviewed by Darin Adler.

        CSS transitions added while page is not visible would not start when the page becomes
        visible. The issue was that when CompositeAnimation::updateTransitions() was called
        while the page is hidden (and animations are therefore suspended), it would not
        populate m_transations with ImplicitAnimation objects. We would therefore have later
        no transitions to resume when the page becomes visible later on. This patch updates
        CompositeAnimation::updateTransitions() to properly populate m_transitions and instead
        pause the ImplicitAnimation it creates if animations are currently suspended. This
        behavior is more consistent with the one of CompositeAnimation::updateKeyframeAnimations().

        I also needed to update ImplicitAnimation::animate() to not restart a paused animation
        if the animation is currently paused. This is similar to what is done in
        KeyframeAnimation::animate(). Without this, the paused ImplicitAnimation we add to
        m_transition would incorrectly get unpaused while the page is still hidden and the
        animations are still supposed to be suspended. This issue was showing when running the
        test I am adding in this patch.

        Test: fast/animation/css-animation-resuming-when-visible.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::reset):
        * page/animation/ImplicitAnimation.h:

2017-06-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, Use FALLTHROUGH

        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):

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

        fast/mediastream/MediaStream-page-muted.html times out and asserts
        https://bugs.webkit.org/show_bug.cgi?id=170355
        <rdar://problem/31376041>

        MediaStream and MediaStreamTrack need to prevent JS wrapper collection while it is possible
        to fire an event or event listeners won't be notified.

        Reviewed by Chris Dumez.

        Test: fast/mediastream/media-stream-wrapper-collected.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Initialize ActiveDOMObject.
        (WebCore::MediaStream::stop): New.
        (WebCore::MediaStream::activeDOMObjectName): Ditto.
        (WebCore::MediaStream::canSuspendForDocumentSuspension): Ditto.
        (WebCore::MediaStream::hasPendingActivity): Ditto, prevent collection if there
        are registered event listeners.
        (WebCore::MediaStream::contextDestroyed): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::hasPendingActivity): Prevent collection if there
        are registered event listeners.
        * Modules/mediastream/MediaStreamTrack.h:

        * testing/Internals.cpp:
        (WebCore::Internals::removeMediaStreamTrack): stream.removeTrack doesn't generate a 'removetrack'
        event, so call private method that does.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-09  Daewoong Jang  <daewoong.jang@navercorp.com>

        [cURL] Remove a call to Windows API
        https://bugs.webkit.org/show_bug.cgi?id=172079

        Reviewed by Yusuke Suzuki.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::moveFileToDestination):
        * platform/win/FileSystemWin.cpp:
        (WebCore::moveFile):

2017-06-09  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Fix alpha premultiplying when using cairo to draw the video frames
        https://bugs.webkit.org/show_bug.cgi?id=173097

        Reviewed by Carlos Garcia Campos.

        We need to premultiply alpha when creating a cairo surface from a GStreamer video frame, if the frame
        has an alpha component. Currently this is wrongly done in VideoSinkGStreamer, as it assumes that every
        frame is going to be rendered with cairo, which is not the case when using accelerated compositing.
        The premultiply must happen inside ImageGStreamerCairo, which is where we know that the frame is
        going to be rendered with cairo, and where the premultiply can be performed when gstreamer-gl is
        enabled as well.

        Covered by existent tests.

        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRequestRender):

2017-06-09  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] Enable ENCRYPTED_MEDIA for build-webkit builds
        https://bugs.webkit.org/show_bug.cgi?id=173103

        Reviewed by Xabier Rodriguez-Calvar.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
        Pass the ParsedContentType's mime type string to the explicit ContentType
        constructor and assign that to the MediaEngineSupportParameters' type
        member.

2017-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Move TreeScope::adoptIfNeeded to Node and rename it to setTreeScopeRecursively
        https://bugs.webkit.org/show_bug.cgi?id=173129

        Reviewed by Antti Koivisto.

        Renamed TreeScope::adoptIfNeeded to setTreeScopeRecursively and moved to Node.

        The old name was really confusing because due to the existence of Document::adoptNode, a DOM API,
        which removes the adopted node from its parent if there was one before adopting the node.
        Most confusingly, this function called TreeScope::adoptIfNeeded.

        Also inlined the tree scope check to avoid calling to moveTreeToNewScope when there is nothing to do.

        This patch effectively reverts r104528.

        No new tests. Existing tests cover this.

        * dom/Attr.cpp:
        (WebCore::Attr::detachFromElementWithValue):
        (WebCore::Attr::attachToElement):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::replaceAllChildren):
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck):
        (WebCore::ContainerNode::parserAppendChild):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::addChildNodesToDeletionQueue):
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):
        * dom/Element.cpp:
        (WebCore::Element::ensureAttr):
        * dom/Node.cpp:
        (WebCore::DidMoveToNewDocumentAssertionScope): Added. The old assertion wasn't sufficient when
        HTMLTemplateElement made a recursive call to setTreeScopeRecursively.
        (WebCore::DidMoveToNewDocumentAssertionScope::DidMoveToNewDocumentAssertionScope):
        (WebCore::DidMoveToNewDocumentAssertionScope::~DidMoveToNewDocumentAssertionScope):
        (WebCore::DidMoveToNewDocumentAssertionScope::didRecieveCall):
        (WebCore::moveNodeToNewDocument): Moved from TreeScope. Calls to incrementReferencingNodeCount
        and decrementReferencingNodeCount to Node::didMoveToNewDocument. This function is now eliminated
        in a release build.
        (WebCore::moveShadowTreeToNewDocument): Moved from TreeScope.
        (WebCore::Node::moveTreeToNewScope): Ditto.
        (WebCore::Node::didMoveToNewDocument): See the description for moveNodeToNewDocument above.
        * dom/Node.h:
        (WebCore::Node::isParsingChildrenFinished): Moved to avoid having its own protected section.
        (WebCore::Node::setIsParsingChildrenFinished): Ditto.
        (WebCore::Node::clearIsParsingChildrenFinished): Ditto.
        (WebCore::Node::setTreeScopeRecursively): Moved from TreeScope::adoptIfNeeded.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::adoptIfNeeded): Deleted.
        (WebCore::TreeScope::moveTreeToNewScope): Deleted.
        (WebCore::TreeScope::ensureDidMoveToNewDocumentWasCalled): Deleted.
        (WebCore::TreeScope::moveNodeToNewDocument): Deleted.
        (WebCore::TreeScope::moveShadowTreeToNewDocument): Deleted.
        * dom/TreeScope.h:
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::didMoveToNewDocument):

2017-06-09  Adrien Plazas  <aplazas@igalia.com>

        [GTK] Add kinetic scrolling
        https://bugs.webkit.org/show_bug.cgi?id=155750

        Reviewed by Carlos Garcia Campos.

        Patch by Adrien Plazas and Yusuke Suzuki.

        Add the ScrollAnimationKinetic scrolling animation allowing to perform momentum scrolling; it is based on GTK+'s
        GtkKineticScrolling type.

        Add the notion of phase, momentum phase and swipe velocity to PlatformWheelEvent.

        Depending on whether the scrolling ended normally or triggered a swipe, the scroll animator will either compute
        the swipe velocity from the previous scrolling events or use the one from the swipe gesture to initiate the
        momentum scrolling.

        * PlatformGTK.cmake:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::setHasPreciseScrollingDeltas):
        (WebCore::PlatformWheelEvent::phase):
        (WebCore::PlatformWheelEvent::momentumPhase):
        (WebCore::PlatformWheelEvent::isTransitioningToMomentumScroll):
        * platform/ScrollAnimation.h:
        (WebCore::ScrollAnimation::scroll):
        (WebCore::ScrollAnimation::updateVisibleLengths):
        (WebCore::ScrollAnimation::setCurrentPosition):
        * platform/ScrollAnimationKinetic.cpp: Added.
        (WebCore::ScrollAnimationKinetic::PerAxisData::PerAxisData):
        (WebCore::ScrollAnimationKinetic::PerAxisData::animateScroll):
        (WebCore::ScrollAnimationKinetic::ScrollAnimationKinetic):
        (WebCore::ScrollAnimationKinetic::~ScrollAnimationKinetic):
        (WebCore::ScrollAnimationKinetic::stop):
        (WebCore::ScrollAnimationKinetic::start):
        (WebCore::ScrollAnimationKinetic::animationTimerFired):
        * platform/ScrollAnimationKinetic.h: Copied from Source/WebCore/platform/ScrollAnimation.h.
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::swipeVelocity):
        * platform/gtk/ScrollAnimatorGtk.cpp:
        (WebCore::ScrollAnimatorGtk::ScrollAnimatorGtk):
        (WebCore::ScrollAnimatorGtk::ensureSmoothScrollingAnimation):
        (WebCore::ScrollAnimatorGtk::scroll):
        (WebCore::ScrollAnimatorGtk::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorGtk::computeVelocity):
        (WebCore::ScrollAnimatorGtk::handleWheelEvent):
        (WebCore::ScrollAnimatorGtk::willEndLiveResize):
        (WebCore::ScrollAnimatorGtk::updatePosition):
        (WebCore::ScrollAnimatorGtk::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorGtk::didAddHorizontalScrollbar):
        * platform/gtk/ScrollAnimatorGtk.h:

2017-06-09  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] ECDSA signing results can be smaller than the EC key size
        https://bugs.webkit.org/show_bug.cgi?id=171535

        Reviewed by Jiewen Tan.

        The libgcrypt-based implementation of the ECDSA signing operation does not
        properly address the resulting `r` and `s` integers that do not potentially
        match the EC key in terms of size.

        To address that, the retrieved MPI data for both integers is handled depending
        on the size of said data. Strictly requiring an amount of bytes that matches
        the key data size N, we simply take the last N bytes if the MPI data is equal
        or larger than N in size. If smaller, we first append enough zero bytes to the
        output Vector object before attaching the MPI data in whole so that the amount
        of appended bytes matches N.

        No new tests -- covers an implementation detail that is not trivial to test,
        but can rely sufficiently on existing tests.

        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        (WebCore::extractECDSASignatureInteger):
        (WebCore::gcryptSign):

2017-06-09  Daewoong Jang  <daewoong.jang@navercorp.com>

        Reduce compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=172078

        Reviewed by Yusuke Suzuki.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::addMatchingCurlCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostnames):
        (WebCore::deleteCookiesForHostname): Deleted.
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::downloadThread):
        (WebCore::CurlDownload::didReceiveHeader):
        * platform/network/curl/CurlDownload.h:
        (WebCore::CurlDownloadListener::didReceiveDataOfLength):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::createCopy):
        (WebCore::SocketStreamHandleImpl::readData):

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

        [GStreamer][EME] Remove the legacy code that was not even official and is deprecated
        https://bugs.webkit.org/show_bug.cgi?id=173096

        Reviewed by Žan Doberšek.

        We are removing the LEGACY_ENCRYPTED_MEDIA code that we was not
        official, is deprecated and we are not planning to support it
        anymore in any way.

        This also helps implementing current ENCRYPTED_MEDIA in a cleaner
        way.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::registerWebKitGStreamerElements):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::extractEventsAndSystemsFromMessage): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::needKey): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::setCDMSession): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::keyAdded): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::receivedGenerateKeyRequest): Deleted.
        (WebCore::keySystemIdToUuid): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::createSession): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchDecryptionKey): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.h:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        (WebCore::appendPipelineElementMessageCallback): Deleted.
        (WebCore::AppendPipeline::dispatchPendingDecryptionKey): Deleted.
        (WebCore::AppendPipeline::dispatchDecryptionKey): Deleted.
        (WebCore::AppendPipeline::handleElementMessage): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::dispatchDecryptionKey): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2017-06-09  Aaron Chu  <aaron_chu@apple.com>

        AX: Media Controls: Missing labels for the Time Labels.
        https://bugs.webkit.org/show_bug.cgi?id=171715
        <rdar://problem/32009214>

        Reviewed by Antoine Quint.

        Added aria-label to describe time labels in media controls.

        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.set inputAccessibleLabel):
        (Slider.prototype._formatTime): Deleted.
        * Modules/modern-media-controls/controls/time-label.js:
        (TimeLabel.prototype.commitProperty):
        * Modules/modern-media-controls/main.js:
        (formatTimeToString):

2017-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix unused parameter warning after r217955.

        * platform/graphics/FontFamilySpecificationNull.h:
        (WebCore::FontFamilySpecificationNull::fontRanges):

2017-06-08  Yoav Weiss  <yoav@yoav.ws>

        [preload] Mandatory `as` value and related spec alignments
        https://bugs.webkit.org/show_bug.cgi?id=173047

        Reviewed by Dean Jackson.

        Align preload's implementation according to latest spec changes: `as` is mandatory and "fetch" replaces the previous empty `as` value,
        onerror no longer fires for invalid `as` values, and the IDL for `as` reflects only valid values, to enable feature detection.

        Related standard discussions:
        https://github.com/w3c/preload/issues/80
        https://github.com/whatwg/fetch/pull/547
        https://github.com/whatwg/fetch/pull/549
        https://github.com/whatwg/html/pull/2588

        No new tests but modified existing ones as well as their expectations.

        * html/HTMLLinkElement.cpp: Add "enumerated attribute" reflection methods to `as`.
        (WebCore::HTMLLinkElement::setAs):
        (WebCore::HTMLLinkElement::as):
        * html/HTMLLinkElement.h:
        * html/HTMLLinkElement.idl:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader): preloadIfNeeded signature change.
        (WebCore::LinkLoader::resourceTypeFromAsAttribute): Replace the empty value by "fetch".
        (WebCore::LinkLoader::preloadIfNeeded): Change the signature, as a LinkLoaderClient is no longer needed, since we don't fire error
        events from inside the function.
        (WebCore::LinkLoader::loadLink): preloadIfNeeded signature change.
        * loader/LinkLoader.h: preloadIfNeeded signature change.

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

        [iOS] LowPowerModeNotifier notifies client on non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=173115
        <rdar://problem/32644703>

        Reviewed by Ryosuke Niwa.

        Update iOS's implementation of the LowPowerModeNotifier to make sure
        we notify the client of low power mode changes on the main thread.

        * platform/ios/LowPowerModeNotifierIOS.mm:
        (-[WebLowPowerModeObserver _didReceiveLowPowerModeChange]):

2017-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Crash inside InsertNodeBeforeCommand via InsertParagraphSeparatorCommand
        https://bugs.webkit.org/show_bug.cgi?id=173085
        <rdar://problem/32575059>

        Reviewed by Wenson Hsieh.

        The crash was caused by the condition to check for special cases failing when visiblePos is null.
        Exit early in these extreme cases.

        Also replaced the use of deprecatedNode and deprecatedEditingOffset to modern idioms.

        Test: editing/inserting/insert-horizontal-rule-in-empty-document-crash.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2017-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        The tree scope of an Attr node inside a shadow tree does not updated upon detach.
        https://bugs.webkit.org/show_bug.cgi?id=173122

        Reviewed by Chris Dumez.

        The crash was caused by the tree scope of an Attr detached from an element inside a shadow root
        not getting updated.

        Test: fast/dom/detaching-attr-node-in-shadow-tree-crash.html

        * dom/Attr.cpp:
        (WebCore::Attr::~Attr): Added assertions.
        (WebCore::Attr::detachFromElementWithValue): Fixed the bug by adopting Attr to Document.
        (WebCore::Attr::attachToElement): Moved the adoptIfNeeded call here from attachAttributeNodeIfNeeded.
        * dom/Element.cpp:
        (WebCore::Element::attachAttributeNodeIfNeeded):

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

        [Cocoa] Expand system-ui to include every item in the Core Text cascade list
        https://bugs.webkit.org/show_bug.cgi?id=173043
        <rdar://problem/21125708>

        Reviewed by Simon Fraser.

        The concept of the system font on Cocoa platforms represents the entire Core Text cascade list.
        However, previously, WebKit only represented system-ui by pulling out the first item in the Core
        Text cascade list. Instead, we should make all text rendered with "system-ui" match what the
        platform would natively render.

        Previously, we walked through the strings in the font-family property and looked them up one by
        one. However, now we want to abstract this idea of a font family to possibly hold a
        CTFontDescriptorRef instead of a string. This way, we expand a font-family list of ["fontA",
        "system-ui", "fontB"] to ["fontA", ... a bunch of CTFontDescriptorRefs ..., "FontB"]. We can
        then modify the consumer of this object to have two codepaths: the old string-based codepath,
        and a new, platform-specific codepath which simply embeds the CTFontDesriptorRefs inside a Font
        object.

        We don't want to simply pull out the family name from each item in the Core Text fallback list
        because that is a lossy translation. There is more information in these font descriptors which
        cannot be represented by CSS. Therefore, we must keep the descriptors alive and add the new
        codepath for them.

        We also don't want to run the CSS font matching algorithm on each member of the Core Text
        fallback list because it may yield different results from Core Text's font matching algorithm.
        Our goal is to draw text as closely as possible to the system APIs. If we ran it, we may find
        a font which is closer to the requested traits, but it would look out of place on the system.

        Tests: fast/text/system-font-fallback-emoji.html
               fast/text/system-font-fallback.html

        * WebCore.xcodeproj/project.pbxproj:
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::realizeNextFallback): The consumer of our new data type. Now uses WTF::visit().
        (WebCore::FontCascadeFonts::realizeFallbackRangesAt): Now that the number of items to test
        against the current character is larger than the number of strings in the font-family list,
        we need to update the existing code to use the correct value.
        * platform/graphics/FontDescription.cpp: Default implementation for non-Cocoa ports.
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::FontCascadeDescription::effectiveFamilyCount):
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/FontDescription.h: Our new data type is a Variant of AtomicString and a
        platform-specific class. Cocoa uses a class that holds a CTFontDescriptorRef and other ports
        use an empty non-constructable class.
        * platform/graphics/FontFamilySpecificationNull.h: Added. The empty non-constructable
        class.
        (WebCore::FontFamilySpecificationNull::fontRanges):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::platformInit): Changing the system language will change the system font
        fallback list, so we need to listen to this notification. This also matters for
        FontCache::systemFallbackForCharacters(), so we should build off the same callback we are
        already using for font installation.
        (WebCore::invalidateFontCache):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp: Added. The platform-specific creation of
        our CTFontDescriptorRefs. We hold them cached in a SystemFontDatabase.
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::CoreTextCascadeListParameters):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::isHashTableDeletedValue):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::operator==):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::hash):
        (WebCore::SystemFontDatabase::singleton):
        (WebCore::SystemFontDatabase::systemFontCascadeList):
        (WebCore::SystemFontDatabase::clear):
        (WebCore::SystemFontDatabase::SystemFontDatabase):
        (WebCore::SystemFontDatabase::applyWeightAndItalics):
        (WebCore::SystemFontDatabase::computeCascadeList):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::hash):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParametersHash::equal):
        (WebCore::isSystemFontString):
        (WebCore::systemFontParameters):
        (WebCore::FontDescription::invalidateCaches):
        (WebCore::FontCascadeDescription::effectiveFamilyCount): We don't store the result of this
        because it would probably be a bad idea to increase the size of every single FontCascade just
        in case it might ask for the system font. Most fonts never mention system-ui. Because it's so
        rare, we can just recalculate the result of this as necessary. This shouldn't be slow because
        the results are cached.
        (WebCore::FontCascadeDescription::effectiveFamilyAt):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp: Added.
        (WebCore::FontFamilySpecificationCoreText::fontRanges): Create a FontRanges from a
        CTFontDescriptorRef.
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.h: Added.
        (WebCore::FontFamilySpecificationCoreText::FontFamilySpecificationCoreText):
        * platform/graphics/ios/FontCacheIOS.mm: Delete the old handling for system-ui.
        (WebCore::platformFontWithFamilySpecialCase):
        (WebCore::baseSystemFontDescriptor): Deleted.
        (WebCore::systemFontModificationAttributes): Deleted.
        (WebCore::systemFontDescriptor): Deleted.
        * platform/graphics/mac/FontCacheMac.mm: Ditto.
        (WebCore::platformFontWithFamilySpecialCase):
        (WebCore::toNSFontWeight): Deleted.

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

        Update Timer to take a WTF::Function instead of a std::function
        https://bugs.webkit.org/show_bug.cgi?id=173113

        Reviewed by Brady Eidson.

        Update Timer to take a WTF::Function instead of a std::function as we prefer
        to use WTF::Function in WebKit.

        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::sharedTimer):
        * platform/Timer.h:
        (WebCore::Timer::Timer):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):

2017-06-08  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WebRTC] enableMockMediaEndpoint() is only used for the OpenWebRTC backend.
        https://bugs.webkit.org/show_bug.cgi?id=173108

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::enableMockMediaEndpoint):
        * testing/Internals.h:

2017-06-08  Antoine Quint  <graouts@apple.com>

        [iOS] Buttons in top-left and bottom media controls bar are positioned too high
        https://bugs.webkit.org/show_bug.cgi?id=173111
        <rdar://problem/32650615>

        Reviewed by Jon Lee.

        Test: media/modern-media-controls/ios-inline-media-controls/ios-inline-media-controls-button-padding.html

        Since we use flex box to vertically center buttons in a buttons container, there is no
        need to offset the button due to padding in the y-axis.

        * Modules/modern-media-controls/controls/buttons-container.css:
        (.ios .buttons-container button):

2017-06-08  Jeremy Jones  <jeremyj@apple.com>

        Implement additional AVPlayerController interfaces for minTime and maxTime.
        https://bugs.webkit.org/show_bug.cgi?id=172396
        rdar://problem/30737452

        Reviewed by Jer Noble.

        No new tests because no change to DOM.

        Add support for new HLS UI in AVKit.

        This adds new properties (seekableTimeRangesLastModifiedTime, liveUpdateInterval, minTiming, maxTiming) to WebAVPlayerController.
        Plumb these properties from AVPlayer up to AVKit.

        Switch WebPlaybackSessionModelMediaElement from updating seekableRangesChanged using timeupdate event to using progress event.

        Enable progress events on iOS.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::seekableTimeRangesLastModifiedTime):
        (WebCore::HTMLMediaElement::liveUpdateInterval):
        * html/HTMLMediaElement.h:
        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/cocoa/WebPlaybackSessionModel.h:
        (WebCore::WebPlaybackSessionModelClient::seekableRangesChanged):
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::WebPlaybackSessionModelMediaElement::observedEventNames):
        (WebCore::WebPlaybackSessionModelMediaElement::seekableTimeRangesLastModifiedTime):
        (WebCore::WebPlaybackSessionModelMediaElement::liveUpdateInterval):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::seekableTimeRangesLastModifiedTime):
        (WebCore::MediaPlayer::liveUpdateInterval):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekableTimeRangesLastModifiedTime):
        (WebCore::MediaPlayerPrivateInterface::liveUpdateInterval):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesLastModifiedTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::liveUpdateInterval):
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController observeValueForKeyPath:ofObject:change:context:]):
        (-[WebAVPlayerController updateMinMaxTiming]):
        (-[WebAVPlayerController hasSeekableLiveStreamingContent]):
        (+[WebAVPlayerController keyPathsForValuesAffectingHasSeekableLiveStreamingContent]):
        (-[WebAVPlayerController resetMediaState]):
        * platform/ios/WebPlaybackSessionInterfaceAVKit.h:
        * platform/ios/WebPlaybackSessionInterfaceAVKit.mm:
        (WebCore::WebPlaybackSessionInterfaceAVKit::WebPlaybackSessionInterfaceAVKit):
        (WebCore::WebPlaybackSessionInterfaceAVKit::resetMediaState):
        (WebCore::WebPlaybackSessionInterfaceAVKit::seekableRangesChanged):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::seekableRangesChanged):
        (WebVideoFullscreenControllerContext::seekableTimeRangesLastModifiedTime):
        (WebVideoFullscreenControllerContext::liveUpdateInterval):
        * platform/mac/WebPlaybackSessionInterfaceMac.h:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::seekableRangesChanged):
        * platform/spi/cocoa/AVKitSPI.h:
        * platform/spi/mac/AVFoundationSPI.h:

2017-06-07  Dave Hyatt  <hyatt@apple.com>

        Laili restaurant menu page does not display full menu
        https://bugs.webkit.org/show_bug.cgi?id=173062
        rdar://problem/32436486

        Reviewed by Simon Fraser.

        Percentage heights inside auto containing blocks were handled correctly by
        hasReplacedLogicalHeight, which checked hasAutoHeightOrContainingBlockWithAutoHeight
        properly. min-max-height were not handled properly though and need to do the same check.
        
        There is also now a quirk for iBooks to preserve the old behavior, since they depend
        on the old behavior to constrain the height of images to a page.

        Test: fast/replaced/max-height-percent-inside-auto-block.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::replacedMinMaxLogicalHeightComputesAsNone):
        Add a new helper that resolves min and max logical height values to none for
        replaced elements with percentage min/max heights inside auto containing blocks.

        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        Change the min/max-height constraint function for replaced elements to call the
        new helper function.

        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        Move a function from private to protected so that RenderBox can access it.

2017-06-08  Tim Horton  <timothy_horton@apple.com>

        Add a borderless mode to <attachment>, and make it respect its layout size
        https://bugs.webkit.org/show_bug.cgi?id=173079
        <rdar://problem/32491584>

        Reviewed by Simon Fraser.

        Tests: fast/attachment/attachment-borderless.html
               fast/attachment/attachment-respects-css-size.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * platform/ThemeTypes.h:
        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::shouldDrawBorder):
        * rendering/RenderAttachment.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        Add "-webkit-appearance: borderless-attachment;" in addition to "attachment",
        so clients can specify the borderless appearance. This isn't specified as a
        CSS border because it's a very custom appearance that isn't achievable that way.

        * rendering/RenderThemeIOS.mm:
        (WebCore::AttachmentInfo::AttachmentInfo):
        Use the layout size of the attachment, not the fixed size; we use the fixed
        size as our intrinsic size, so most attachments will still be that size,
        but if a client specifies a different size, we'll lay out correctly.

2017-06-08  Jer Noble  <jer.noble@apple.com>

        YouTube audio stutters when page changes visibility.
        https://bugs.webkit.org/show_bug.cgi?id=173102

        Reviewed by Eric Carlson.

        Don't change renderers when the visibility changes; only use the decompression session
        when we were explicitly asked to paint into an accelerated surface.

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

2017-06-08  Jer Noble  <jer.noble@apple.com>

        Clients of the WK2 C-API don't have their mediaContentTypesRequiringHardwareSupport setting initialized correctly.
        https://bugs.webkit.org/show_bug.cgi?id=173091

        Reviewed by Eric Carlson.

        Add a new default setting value, defined separately in Settings and SettingsCocoa.

        * page/Settings.cpp:
        (WebCore::Settings::defaultMediaContentTypesRequiringHardwareSupport):
        * page/Settings.h:
        * page/cocoa/SettingsCocoa.mm:
        (WebCore::Settings::defaultMediaContentTypesRequiringHardwareSupport):

2017-06-08  Jer Noble  <jer.noble@apple.com>

        Take the mediaContentTypesRequiringHardwareSupport Setting into account when answering HTMLMediaElement::canPlayType()
        https://bugs.webkit.org/show_bug.cgi?id=173092

        Reviewed by Eric Carlson.

        Pass the value of mediaContentTypesRequiringHardwareSupport into the MediaPlayer when querying canPlayType().
        Then, use the existing code in AVAssetTrackUtilities to know whether to bail out early from the codec check.

        Drive-by fix: FourCC was converting String -> FourCC in reverse.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        * platform/graphics/FourCC.cpp:
        (WebCore::FourCC::fromString):
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.h:
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:
        (WebCore::contentTypesToCodecs):
        (WebCore::codecsMeetHardwareDecodeRequirements):
        (WebCore::contentTypeMeetsHardwareDecodeRequirements):
        (WebCore::assetTrackMeetsHardwareDecodeRequirements):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):

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

        ASSERTION FAILED: !m_isolatedWorld->isNormal() || m_wrapper || !m_jsFunction on webrtc/ephemeral-certificates-and-cnames.html
        https://bugs.webkit.org/show_bug.cgi?id=173039
        <rdar://problem/32600412>

        Reviewed by Youenn Fablet.

        RTCPeerConnection was an ActiveDOMObject but failed to override ActiveDOMObject::hasPendingActivity()
        to make sure its JS wrapper stays alive as long as it needs to. In this patch, we override
        ActiveDOMObject::hasPendingActivity() and have it return true if !m_isStopped. I believe this is
        the right thing to do to keep the wrapper alive as long as the connection is not closed.
        RTCPeerConnection::close() closes the connection and then posts a task to call
        RTCPeerConnection::doStop(), setting m_isStopped to true.

        No new tests, already covered by webrtc/ephemeral-certificates-and-cnames.html which
        was a flaky crash.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::canSuspendForDocumentSuspension):
        (WebCore::RTCPeerConnection::hasPendingActivity):
        * Modules/mediastream/RTCPeerConnection.h:

2017-06-08  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE][GSTREAMER_GL] Change the colorspace used by the video frames provided by GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=173050

        Reviewed by Žan Doberšek.

        We are currently requesting RGBA as the color format of the video frames to gstreamer. This is a problem
        because when those frames are rendered with the CPU, the R and B components are swapped as cairo expects
        ARGB and GStreamer delivers ABGR.

        In order to fix this without performing color conversions on the CPU, what we do is change the format
        used by GStreamer for the video frames. We do that taking into account the endianness used. So with
        little endian we will use BGRx or BGRA and with big endian xRGB or ARGB. Thanks to this, when downloading
        the frames to the CPU they will automatically be turned into the ARGB expected by cairo. Also, when
        rendering the frames using OpenGL, we indicate that the color space needs to be converted to the RGBA
        expected by the destination texture (but this color conversion is performed by the GPU so there's no
        penalty).

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::updateColorConversionMatrix):
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::colorSpaceMatrixForFlags):
        * platform/graphics/texmap/TextureMapperGL.h:

2017-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        IsInShadowTreeFlag does not get updated for a non-container node
        https://bugs.webkit.org/show_bug.cgi?id=173084

        Reviewed by Antti Koivisto.

        insertedInto and removedFrom were only called on ContainerNode nodes when they're not connected to a document.
        As a result IsInShadowTreeFlag could have gotten out-of-date when a node was inserted or removed from a shadow root
        which is not connected to a document.

        Fixed this inconsistency by always falling insertedInto and removedFrom on all nodes.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyNodeInsertedIntoDocument): Merged notifyDescendantInsertedIntoDocument. Now takes a Node instead
        of a ContainerNode.
        (WebCore::notifyNodeInsertedIntoTree): Merged notifyDescendantInsertedIntoTree. Now takes a Node instead of
        a ContainerNode.
        (WebCore::notifyChildNodeInserted): Always call notifyNodeInsertedIntoTree on an inserted node.
        (WebCore::notifyNodeRemovedFromDocument): Now takes a Node instead of a ContainerNode.
        (WebCore::notifyNodeRemovedFromTree): Ditto.
        (WebCore::notifyChildNodeRemoved): Always call notifyNodeRemovedFromTree on an inserted node.
        (WebCore::addChildNodesToDeletionQueue): Directly call adoptIfNeeded on document() since onwerDocument() only returns
        nullptr on a Document node but this function is never called on a root node and Document can only be a root node.
        Also assert that a node not put into the deletion queue is no longer in a document or a shadow tree.

        * dom/Node.cpp:
        (WebCore::Node::insertedInto): Removed the assertion that's no longer true.
        (WebCore::Node::removedFrom): Ditto.

2017-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Enable resource usage
        https://bugs.webkit.org/show_bug.cgi?id=173054

        Reviewed by Žan Doberšek.

        Add resource usage linux files to the compilation.

        * PlatformWPE.cmake:

2017-06-07  Jer Noble  <jer.noble@apple.com>

        [Web Audio] createScriptProcessor throws IndexSizeError for valid arguments
        https://bugs.webkit.org/show_bug.cgi?id=173022

        Reviewed by Sam Weinig.

        Updated test: webaudio/javascriptaudionode.html

        The Web Audio spec (<https://webaudio.github.io/web-audio-api/>, 06 June 2017) defines a default behavior when
        clients pass in a value of 0 for bufferSize to the createScriptProcessor() method.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createScriptProcessor):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::create):
        * Modules/webaudio/ScriptProcessorNode.h:

2017-06-07  Chris Dumez  <cdumez@apple.com>

        CSSStyleRule.style / CSSPageRule.style / CSSKeyframeRule.style should be settable
        https://bugs.webkit.org/show_bug.cgi?id=164537
        <rdar://problem/29181773>

        Reviewed by Sam Weinig.

        CSSStyleRule.style / CSSPageRule.style / CSSKeyframeRule.style should be settable
        as per:
        - https://drafts.csswg.org/cssom/#the-cssstylerule-interface
        - https://drafts.csswg.org/cssom/#the-csspagerule-interface
        - https://drafts.csswg.org/css-animations/#interface-csskeyframerule

        Tests:
        http/wpt/cssom/CSSPageRule.html
        imported/w3c/web-platform-tests/cssom/CSSKeyframeRule.html
        imported/w3c/web-platform-tests/cssom/CSSStyleRule.html
        imported/w3c/web-platform-tests/cssom/interfaces.html

        * css/CSSKeyframeRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSStyleRule.idl:

2017-06-07  Sam Weinig  <sam@webkit.org>

        [WebIDL] Split up attribute generation to match operation generation
        https://bugs.webkit.org/show_bug.cgi?id=173072

        Reviewed by Chris Dumez.

        * bindings/js/JSDOMAttribute.h:
        (WebCore::IDLAttribute::setStatic):
        (WebCore::IDLAttribute::getStatic):
        Add static variants of get/set matching the one in IDLOperation.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetFullyQualifiedImplementationCallName):
        Factor out duplicate code to compute the qualified name for a function call.

        (AddAdditionalArgumentsForImplementationCall):
        Factor out duplicate code to compute the some standard arguments for a function
        call. We may want to merge this with GenerateCallWith.

        (GenerateHeader):
        Update for new signature of HasCustom... subroutines.
        
        (GenerateImplementation):
        Pass @implContent to more helper generators to continue propagating the idiom.

        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeGetterTrampolineDefinition):
        (GenerateAttributeGetterDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateAttributeSetterTrampolineDefinition):
        (GenerateAttributeSetterDefinition):
        Split attribute getter and setter generation up by having separate subroutines 
        to generate the trampoline and body. Also, make all attributes, even static ones
        use a trampoline to simplify the code. Static attributes got through a no-op 
        trampoline, that gets compiled away. Also adopt GetFullyQualifiedImplementationCallName
        and AddAdditionalArgumentsForImplementationCall to reduce duplication.

        (GenerateOperationBodyDefinition):
        (GenerateOperationDefinition):
        Adopt $outputArray idiom and adopt GetFullyQualifiedImplementationCallName
        and AddAdditionalArgumentsForImplementationCall to reduce duplication

        (GenerateParametersCheck):
        Adopt GetFullyQualifiedImplementationCallName and AddAdditionalArgumentsForImplementationCall 
        to reduce duplication.

        (HasCustomGetter):
        (HasCustomSetter):
        (HasCustomMethod):
        Convert HasCustom... subroutines to take an IDLAttribute rather than the extended
        attributes, matching other predicates

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Update test results.

2017-06-07  Youenn Fablet  <youenn@apple.com>

        RTCTrackEvent.track should be found in RTCTrackEvent.streams[0]
        https://bugs.webkit.org/show_bug.cgi?id=173074

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrackFromPlatform):

2017-06-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Add ContextMenu item to log WebSocket object to console
        https://bugs.webkit.org/show_bug.cgi?id=172878

        Reviewed by Joseph Pecoraro.

        Test: http/tests/websocket/tests/hybi/inspector/resolveWebSocket.html

        * inspector/InspectorNetworkAgent.h:
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::InspectorNetworkAgent):
        (WebCore::InspectorNetworkAgent::webSocketForRequestId):
        (WebCore::webSocketAsScriptValue):
        (WebCore::InspectorNetworkAgent::resolveWebSocket):
        Loops over the static allActiveWebSockets to find one with the given requestId. If found, it
        will create a RemoteObject wrapper for it and send it back to the inspector.

2017-06-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Allow user to choose stylesheet when creating new rules
        https://bugs.webkit.org/show_bug.cgi?id=172487

        Reviewed by Joseph Pecoraro.

        New test: inspector/css/add-rule.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule):
        Reparse the content when a new rule is added to a non-inspector origin stylesheet.

2017-06-07  Youenn Fablet  <youenn@apple.com>

        getUserMedia is prompting too often
        https://bugs.webkit.org/show_bug.cgi?id=172859
        <rdar://problem/32589950>

        Reviewed by Eric Carlson.

        Tests: fast/mediastream/getUserMedia-grant-persistency-reload.html
               fast/mediastream/getUserMedia-grant-persistency.html

        * loader/FrameLoaderClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::setDocument): Allows notifying of change of main frame document.
        UIProcess will use that to remove unneeded previously granted gum permission.

2017-06-07  Chris Dumez  <cdumez@apple.com>

        Align <col span>/<colgroup span> limits with the latest HTML specification
        https://bugs.webkit.org/show_bug.cgi?id=173049

        Reviewed by Daniel Bates.

        Align <col span>/<colgroup span> limits with the latest HTML specification after:
        - https://github.com/whatwg/html/issues/2705
        - https://github.com/whatwg/html/pull/2734

        In particular, col / colspan's span attribute is now clamped to the [1, 1000] range.

        Test: imported/w3c/web-platform-tests/html/semantics/tabular-data/processing-model-1/col-span-limits.html

        [1] https://html.spec.whatwg.org/#dom-colgroup-span
        [2] https://html.spec.whatwg.org/#clamped-to-the-range
        [3] https://github.com/whatwg/html/pull/2734/files

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseAttribute):
        As per [1][2], the span attribute should be clamped to the range [1, 1000] with a default value of 1 (on getting).

        (WebCore::HTMLTableColElement::setSpan):
        As per [2], on setting, we should behave the same as setting a regular reflected unsigned integer when an attribute
        is clamped to a range. Therefore, we now call limitToOnlyHTMLNonNegative() instead of
        limitToOnlyHTMLNonNegativeNumbersGreaterThanZero(). We used to call limitToOnlyHTMLNonNegativeNumbersGreaterThanZero()
        because the value used to be limited to only non-negative numbers greater than zero with fallback before [3]. Without
        this change, "col.span = 0" would set the content attribute to 1 instead of 0, which would be wrong.

2017-06-07  Jer Noble  <jer.noble@apple.com>

        Exempt exclusively wall-powered devices from hardware codec requirement
        https://bugs.webkit.org/show_bug.cgi?id=173009

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:
        (WebCore::systemHasBattery):
        (WebCore::assetTrackMeetsHardwareDecodeRequirements):
        * platform/spi/cocoa/IOPSLibSPI.h: Added.

2017-06-07  Jer Noble  <jer.noble@apple.com>

        Refactoring: MediaEngineSupportParameters should take a ContentType rather than separate type & codecs strings
        https://bugs.webkit.org/show_bug.cgi?id=173038

        Reviewed by Eric Carlson.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::isTypeSupported):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * platform/ContentType.cpp:
        (WebCore::ContentType::codecsParameter):
        (WebCore::ContentType::profilesParameter):
        (WebCore::ContentType::containerType):
        (WebCore::simplifyWhitespace):
        (WebCore::ContentType::codecs):
        (WebCore::ContentType::profiles):
        (WebCore::ContentType::type): Deleted.
        * platform/ContentType.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::bestMediaEngineForSupportParameters):
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::nextBestMediaEngine):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::supportsType):
        (WebCore::MediaPlayer::networkStateChanged):
        (WebCore::codecs): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::contentMIMEType):
        (WebCore::MediaPlayer::contentTypeCodecs):
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystemAndMimeType):
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsMIMEType):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsType):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::supportsType):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::supportsType):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::supportsType):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::supportsType):
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::addSourceBuffer):

2017-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        Use a dedicated node flag to identify a Document node
        https://bugs.webkit.org/show_bug.cgi?id=173037

        Reviewed by Chris Dumez.

        Address Antti's review comment. We don't need a new Node flg.

        * dom/Node.h:
        (WebCore::Node::isDocumentNode):

2017-06-07  Jon Davis  <jond@apple.com>

        Update feature status for features Supported In Preview
        https://bugs.webkit.org/show_bug.cgi?id=173071

        Reviewed by Darin Adler.

        Updated WebAssembly.

        * features.json:

2017-06-07  Sam Weinig  <sam@webkit.org>

        [WebIDL] PutForwards is not implemented to spec as illustrated by the WPT WebIDL/ecmascript-binding/put-forwards.html
        https://bugs.webkit.org/show_bug.cgi?id=172956

        Reviewed by Chris Dumez.

        Implements step 3.5.9 of https://heycam.github.io/webidl/#dfn-attribute-setter.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterDefinition):
        Implement [PutForwards] to spec, which involves using JSC get/set rather than calling
        directly into the implementation.

        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        Update test results.

2017-06-07  Jer Noble  <jer.noble@apple.com>

        Clean-up: RenderElement.h includes headers it doesn't use
        https://bugs.webkit.org/show_bug.cgi?id=173046

        Reviewed by Andy Estes.

        Remove a couple of unneeded includes from RenderElement.h, and then clean up all the
        follow-on compile errors that causes. Mostly, these errors are fixed by including the
        correct headers at the point of use; otherwise, they're solved by forward-declaring types
        and in one case by moving default constructors implementation to the cpp file from the header.

        * css/parser/SizesAttributeParser.cpp:
        * editing/cocoa/EditorCocoa.mm:
        * platform/mac/PasteboardMac.mm:
        * rendering/InlineIterator.h:
        (WebCore::embedCharFromDirection):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        * rendering/RenderElement.h:
        * rendering/RenderIterator.h:
        * rendering/RenderLineBreak.cpp:
        * rendering/RenderQuote.cpp:
        * rendering/RenderText.h:
        * rendering/SimpleLineLayoutPagination.cpp:
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        * rendering/TextAutoSizing.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * style/RenderTreeUpdater.cpp:
        * style/StyleResolveForDocument.cpp:
        * style/StyleTreeResolver.cpp:

2017-06-07  Youenn Fablet  <youenn@apple.com>

        Add WebRTC stats logging
        https://bugs.webkit.org/show_bug.cgi?id=173045

        Reviewed by Eric Carlson.

        No change of behavior.

        Do release logging of WebRTC stats once remote description is set.
        Do logging every second for the first 30 seconds.
        After 30 seconds, do release logging of these stats every 5 seconds.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        (WebCore::LibWebRTCMediaEndpoint::gatherStatsForLogging):
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        (WebCore::LibWebRTCMediaEndpoint::startLoggingStats):
        (WebCore::LibWebRTCMediaEndpoint::stopLoggingStats):
        (WebCore::LibWebRTCPeerConnectionBackend::doSetRemoteDescription):

2017-06-07  Per Arne Vollan  <pvollan@apple.com>

        Support removal of authentication data through the Website data store API.
        https://bugs.webkit.org/show_bug.cgi?id=171217

        Reviewed by Brady Eidson.

        Add support to remove and fetch credential data through the Website data store API.

        Test: http/tests/loading/basic-auth-remove-credentials.html

        * platform/network/CredentialStorage.h:
        (WebCore::CredentialStorage::originsWithCredentials):

2017-06-07  Per Arne Vollan  <pvollan@apple.com>

        AudioSourceProviderAVFObjC::m_tap member access is not thread safe.
        https://bugs.webkit.org/show_bug.cgi?id=172263

        Reviewed by Darin Adler.

        It it possible that the main thread will modify the m_tap member by calling
        AudioSourceProviderAVFObjC::destroyMix(), while m_tap is being read on a secondary
        thread under AudioSourceProviderAVFObjC::processCallback(). Instead of accessing
        the m_tap member on the secondary thread, we can use the same MTAudioProcessingTapRef
        provided by MediaToolbox in the callback. We assume the tap ref is retained by
        MediaToolbox, so it should be safe to use even if the the m_tap member is set to null.

        Covered by existing tests.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::processCallback):
        (WebCore::AudioSourceProviderAVFObjC::process):

2017-06-07  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] RSA-PSS support
        https://bugs.webkit.org/show_bug.cgi?id=172856

        Reviewed by Jiewen Tan.

        Implement RSA-PSS support for Web Crypto API in ports that use libgcrypt.

        For the signing operation, the digest algorithm is determined and used to
        compute the hash of the passed-in data. The given salt length and hash results
        are embedded into a data s-expression, specifying PSS as the preferred type of
        padding. This s-expression and the provided key are then passed to the
        gcry_pk_sign() call which computes the signature. The MPI data of this signature
        is retrieved and its size validated before being passed to the success callback.

        For the verification operation, the hash of the passed-in data is computed as
        before, embedding it into a data s-expression along with the specified salt
        length. The passed-in signature data is embedded into a sig-val s-expression.
        The two s-expressions are passed to the gcry_pk_verify() call along with the
        key. If the returned error code for this operation is GPG_ERR_NO_ERROR the
        verification is deemed successful, while in case of any other error code (which
        might indicate a verification failure or an operation error) we simply signal
        that the verification step failed (and not that it possibly errored out).

        No new tests -- covered by existing tests.

        * PlatformGTK.cmake: Add the new build targets.
        * PlatformWPE.cmake: Ditto.
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp: Added.
        (WebCore::gcryptSign):
        (WebCore::gcryptVerify):
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/gcrypt/CryptoAlgorithmRegistryGCrypt.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register the RSA-PSS algorithm.

2017-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        Merge TreeScopeAdopter into TreeScope
        https://bugs.webkit.org/show_bug.cgi?id=173040

        Reviewed by Antti Koivisto.

        Merged TreeScopeAdopter into TreeScope since it's used by TreeScope::adoptIfNeeded.

        Most of code changes are for didMoveToNewDocument taking the new document as an argument,
        which is used by ShadowRoot::didMoveToNewDocument to update its document scope.

        No new tests since there should be no behavioral change.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::didMoveToNewDocument):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument): Moved the code to moves the node lists and node iterators here
        from TreeScopeAdopter::moveNodeToNewDocument.
        * dom/Node.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::didMoveToNewDocument): Moved the code to update the document scope here
        from TreeScopeAdopter::moveNodeToNewDocument.
        * dom/ShadowRoot.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::adoptIfNeeded):
        (WebCore::TreeScope::moveTreeToNewScope): Moved from TreeScopeAdopter. Now takes the old tree scope and
        the new tree scope as arguments (they used to be members of TreeScopeAdopter). Also merged updateTreeScope
        into this function.
        (WebCore::TreeScope::ensureDidMoveToNewDocumentWasCalled): Moved from TreeScopeAdopter.
        (WebCore::TreeScope::moveNodeToNewDocument): Ditto. The code to adopt node lists and node iterators have
        been moved to Node::didMoveToNewDocument.
        (WebCore::TreeScope::moveShadowTreeToNewDocument): Moved from TreeScopeAdopter.
        * dom/TreeScope.h:
        (WebCore::TreeScope::ensureDidMoveToNewDocumentWasCalled):
        * dom/TreeScopeAdopter.cpp: Removed.
        * dom/TreeScopeAdopter.h: Removed.
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::didMoveToNewDocument):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didMoveToNewDocument):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::didMoveToNewDocument):
        * html/HTMLFormElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::didMoveToNewDocument):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didMoveToNewDocument): Grouped related function calls on new/old documents.
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didMoveToNewDocument):
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::didMoveToNewDocument):
        * html/HTMLObjectElement.h:
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::didMoveToNewDocument):
        * html/HTMLPictureElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::didMoveToNewDocument):
        * html/HTMLTemplateElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didMoveToNewDocument):
        * html/HTMLVideoElement.h:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentElement::didMoveToNewDocument):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::didMoveToNewDocument):
        * svg/SVGImageElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::didMoveToNewDocument):
        * svg/SVGSVGElement.h:

2017-06-06  Ryosuke Niwa  <rniwa@webkit.org>

        Use a dedicated node flag to identify a Document node
        https://bugs.webkit.org/show_bug.cgi?id=173037

        Reviewed by Chris Dumez.

        Use a Node flag to identify a Document node instead of checking this == document() which loads TreeScope.

        * dom/Document.h:
        (WebCore::Node::isDocumentNode): Deleted.
        * dom/Node.h:
        (WebCore::Node::isDocumentNode):

2017-06-06  Dan Bernstein  <mitz@apple.com>

        Fixed building with the macOS 10.13 Apple Internal SDK when targeting macOS 10.12.

        * platform/spi/cocoa/PassKitSPI.h:

2017-06-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r214974.

        Causes some tabs to start using a huge amount of CPU after 8
        minutes in the background

        Reverted changeset:

        "Make inactive web processes behave as though under memory
        pressure."
        https://bugs.webkit.org/show_bug.cgi?id=170042
        http://trac.webkit.org/changeset/214974

2017-06-06  Tim Horton  <timothy_horton@apple.com>

        Crash trying to drag the entire text of a long book out of Mail compose view
        https://bugs.webkit.org/show_bug.cgi?id=173042
        <rdar://problem/32382059>

        Reviewed by Simon Fraser.

        Creating a TextIndicator that is hundreds of thousands of pixels tall
        is not a good idea. We introduced TextIndicatorOptionDoNotClipToVisibleRect
        so that (for example) an image that overhangs the edge of the page would
        contain the entire image, instead of just the visible fragment.
        Instead, rename this option to ExpandClipBeyondVisibleRect, and make it
        not unclip *entirely*, but expand the clip significantly (50% in each direction)
        beyond the bounds of the current visible rect. Also, make use of exposed
        area information for this clipping; otherwise, clients with very large views
        inside scrollable areas (like Mail) would still try to create large TextIndicators.

        * page/TextIndicator.cpp:
        (WebCore::initializeIndicator):
        * page/TextIndicator.h:

2017-06-06  Chris Dumez  <cdumez@apple.com>

        RELEASE_ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values)) hit in convertEnumerationToJS<WebCore::History::ScrollRestoration>()
        https://bugs.webkit.org/show_bug.cgi?id=173033
        <rdar://problem/32591099>

        Reviewed by Simon Fraser.

        History::scrollRestoration() was returning a bad value because HistoryItem::m_shouldRestoreScrollPosition
        was initialized from FrameState::shouldRestoreScrollPosition member, which was not initialized when
        restored from the legacy session restore API.

        Tests: WebKit2.RestoreSessionStateContainingScrollRestoration* API tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumerationImplementationContent):
        Drop the RELEASE_ASSERT that was added to debug this and use the regular debug ASSERT.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setShouldRestoreScrollPosition):
        Make sure we notify that the HistoryItem has changed when setShouldRestoreScrollPosition()
        is called.

2017-06-06  Darin Adler  <darin@apple.com>

        Update to slightly stricter rules for custom element names from more recent standard draft
        https://bugs.webkit.org/show_bug.cgi?id=173019

        Reviewed by Ryosuke Niwa.

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::validateCustomElementNameAndThrowIfNeeded): Add more error strings for various error cases.

        * dom/Document.cpp:
        (WebCore::isPotentialCustomElementNameCharacter): Added. Implements the PCENChar production
        from the standard by listing all the ranges exactly as they appear in the standard.
        (WebCore::Document::validateCustomElementName): Added a check that the first character is
        a lowercase ASCII letter. Added a check that all characters are potential custom element
        name characters.

        * dom/Document.h: Update the CustomElementNameValidationStatus with new values for
        the various new error cases.  Not sure that validateCustomElementName really belongs
        in the Document class in the first place. Also seems that the error strings could be
        in validateCustomElementName rather than in a separate bindings function, obviating
        the need for the enum.

2017-06-06  Yoav Weiss  <yoav@yoav.ws>

        [preload] Conditional support for media preloading and align media `as` values.
        https://bugs.webkit.org/show_bug.cgi?id=172501

        Reviewed by Dean Jackson.

        As discussed at https://bugs.webkit.org/show_bug.cgi?id=171720#c11 media preloading may not work
        since the backend may not reuse such resources properly.
        This patch makes support for media preloading conditional on a setting, in order to avoid double downloads in these cases.
        It also aligns the media `as` values to the spec, and splitting them into "video" and "audio".

        No new tests but related tests were modified to remove media preloading tests as the setting is off by default.

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::resourceTypeFromAsAttribute): Make handling of MediaResource conditional on setting. Align `as` values to spec.
        (WebCore::createLinkPreloadResourceClient): Make handling of MediaResource conditional on setting.
        (WebCore::LinkLoader::isSupportedType): Make handling of MediaResource conditional on setting.
        * page/RuntimeEnabledFeatures.h: Added a media preloading preference.
        (WebCore::RuntimeEnabledFeatures::setMediaPreloadingEnabled):
        (WebCore::RuntimeEnabledFeatures::mediaPreloadingEnabled):
        * page/Settings.in: Added a media preloading preference.

2017-06-06  Don Olmstead  <don.olmstead@am.sony.com>

        [WebCore] Enable REQUEST_ANIMATION_FRAME_TIMER for all ports
        https://bugs.webkit.org/show_bug.cgi?id=172780

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::addThrottlingReason):
        (WebCore::ScriptedAnimationController::removeThrottlingReason):
        (WebCore::ScriptedAnimationController::isThrottled):
        (WebCore::ScriptedAnimationController::interval):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::displayRefreshFired):
        * dom/ScriptedAnimationController.h:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::scheduleAnimation): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/Curl.cmake: Added.
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::ScrollAnimationSmooth::ScrollAnimationSmooth):
        (WebCore::ScrollAnimationSmooth::stop):
        (WebCore::ScrollAnimationSmooth::animationTimerFired):
        (WebCore::ScrollAnimationSmooth::startNextTimer):
        (WebCore::ScrollAnimationSmooth::animationTimerActive):
        (WebCore::ScrollAnimationSmooth::serviceAnimation): Deleted.
        * platform/ScrollAnimationSmooth.h:

2017-06-06  Darin Adler  <darin@apple.com>

        Cut down use of WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=172997

        Reviewed by Chris Dumez.

        * contentextensions/NFAToDFA.cpp: Remove unused SetTransitions class.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Use modern for loop instead of WTF_ARRAY_LENGTH.
        * dom/make_names.pl:
        (printDefinitions): Ditto.
        (printFactoryCppFile): Ditto.
        (printWrapperFactoryCppFile): Ditto.

        * platform/URL.cpp:
        (WebCore::portAllowed): Use std::is_sorted, std::begin, and std::end
        in sort assertion to greatly streamline it and eliminate use of WTF_ARRAY_LENGTH.
        Also allow the sort assertion to run every time; slightly optimizing debug builds
        was not worth having the code be messy.

        * platform/URLParser.cpp:
        (WebCore::URLParser::appendNumberToASCIIBuffer): Use std::end instead of
        WTF_ARRAY_LENGTH.

        * platform/graphics/FontCascade.cpp: Make fontFamiliesWithInvalidCharWidth be
        a constant array rather than a non-constant array to constant strings.
        (WebCore::FontCascade::hasValidAverageCharWidth): Streamline the hash table
        initialization to avoid heap allocation and use a modern for loop instead of
        WTF_ARRAY_LENGTH.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::disableComponentsOnce): Use a modern for loop instead of WTF_ARRAY_LENGTH.
        * platform/network/CacheValidation.cpp:
        (WebCore::shouldUpdateHeaderAfterRevalidation): Ditto. Also use the
        startsWithIgnoringASCIICase function rather than the version that folds
        arbitrary Unicode case.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::pruneBlacklistedCodecs): Use modern for loops to make the code considerably
        easier to read and avoid WTF_ARRAY_LENGTH.

        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::monthLabels): Use modern for loop instead of WTF_ARRAY_LENGTH.
        (WebCore::LocaleMac::shortMonthLabels): Ditto.
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText): Ditto.

2017-06-06  Isaac Devine  <isaac@devinesystems.co.nz>

        Allow FileReader to open files multiple times

        If multiple file readers open files they are prevented by default due to
        Windows' file locking.

        Allow FileReader to open multiple files for reading at the same time on wincairo
        https://bugs.webkit.org/show_bug.cgi?id=172632

        Reviewed by Darin Adler.

        * platform/win/FileSystemWin.cpp:
        (WebCore::openFile): Use the appropriate sharing options to allow multiple opens

2017-06-06  Beth Dakin  <bdakin@apple.com>

        Netflix seeking quirk should also apply to Now Playing, and should always use the 
        livestream UI
        https://bugs.webkit.org/show_bug.cgi?id=173030
        -and corresponding-
        rdar://problem/32228660

        Reviewed by Darin Adler.

        This patch rolls out much of https://trac.webkit.org/changeset/217791/webkit in 
        favor of an approach that can be used to apply the quirk to Now Playing in 
        addition to Touch Bar. This patch also changes the UI in both Touch Bar and Now 
        Playing to match live stream UI, which means there is no playhead. This hopefully 
        makes it less confusing that taps on the timeline will have no effect. 

        supportsSeeking() should return false for Netflix. That function needs to be 
        public now.
        * html/HTMLMediaElement.cpp:
        (WebCore::needsSeekingSupportQuirk):
        (WebCore::HTMLMediaElement::supportsSeeking):
        * html/HTMLMediaElement.h:

        Here is where we get the desired result in Now Playing. Make sure the 
        currentSession supportsSeeking() before relying on the time and duration info for 
        the sake of Now Playing. 
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):

        We can roll out allowsTouchBarScrubbing() and rely on supportsSeeking().
        * platform/cocoa/WebPlaybackSessionModel.h:
        (WebCore::WebPlaybackSessionModelClient::mutedChanged):
        (WebCore::WebPlaybackSessionModelClient::allowsTouchBarScrubbingChanged): Deleted.
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::updateForEventName):

        And here is where we get the desired result for Touch Bar. Make sure the the media 
        element supportsSeeking() before relying on the duration. 
        (WebCore::WebPlaybackSessionModelMediaElement::duration):

        We can roll out allowsTouchBarScrubbing() and rely on supportsSeeking().
        (WebCore::WebPlaybackSessionModelMediaElement::allowsTouchBarScrubbing): Deleted.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        * platform/mac/WebPlaybackControlsManager.h:

        Currently the Touch Bar live stream UI lets you seek, which results in broken 
        behavior on real live streams and on Netflix. Prevent that by preventing scrubbing 
        for NaN and infinite durations.
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager canBeginTouchBarScrubbing]):

        We can roll out allowsTouchBarScrubbing() and rely on supportsSeeking().
        * platform/mac/WebPlaybackSessionInterfaceMac.h:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::setPlayBackControlsManager):
        (WebCore::WebPlaybackSessionInterfaceMac::allowsTouchBarScrubbingChanged): Deleted.

2017-06-06  Konstantin Tokarev  <annulen@yandex.ru>

        Add missing <functional> includes
        https://bugs.webkit.org/show_bug.cgi?id=173017

        Patch by Thiago Macieira <thiago.macieira@intel.com>
        Reviewed by Yusuke Suzuki.

        This patch fixes compilation with GCC 7.

        No new tests needed.

        * css/CSSValue.h:
        * css/StyleSheetContents.h:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.h:

2017-06-06  Konstantin Tokarev  <annulen@yandex.ru>

        Fix compilation with !ENABLE(SVG_FONTS)
        https://bugs.webkit.org/show_bug.cgi?id=172731

        Reviewed by Darin Adler.

        No new tests needed.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):

2017-06-06  Zalan Bujtas  <zalan@apple.com>

        Safari doesn't load newest The Order of the Stick comic.
        https://bugs.webkit.org/show_bug.cgi?id=172949
        <rdar://problem/32389730>

        Reviewed by Antti Koivisto.

        As part of the table layout, RenderTableSection::layoutRows calls the RenderTableCell's layout() directly
        (skipping the RenderTableRow parent). If during this call the RenderTableCell (or any of its descendant) marks the ancestor
        chain dirty, this dirty flag on the RenderTableRows will never be cleared and we'll end up early returning from RenderTableSection::paint.
        For certain type of float objects, we need to invalidate the line layout path during layout (and we mark the ancestors dirty).
        This patch takes a conservative approach and marks the ancestors dirty only when the renderer is not dirty yet, but
        as part of webkit.org/b/172947 we should revisit and validate whether the setNeedsLayout() is required at all.

        Test: fast/table/floating-table-sibling-is-invisible.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):

2017-06-06  Emilio Cobos Álvarez  <ecobos@igalia.com>

        [css-conditional] The one-string version of CSS.supports should be wrapped in implied parentheses.
        https://bugs.webkit.org/show_bug.cgi?id=172906

        Reviewed by Darin Adler.

        From https://drafts.csswg.org/css-conditional/#the-css-interface:

        > When invoked with a single conditionText argument, it must return
        > true if conditionText, when either parsed and evaluated as a
        > supports_condition or parsed as a declaration, wrapped in implied
        > parentheses, and evaluated as a supports_condition, would return
        > true.

        Note the "wrapped in implied parentheses" bit.

        Gecko is fixing it in https://bugzil.la/1338486, and Blink in
        https://crbug.com/729403.

        Tests: css3/supports-dom-api.html
               imported/w3c/web-platform-tests/cssom/CSS.html

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSupportsCondition):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeSupportsRule):
        * css/parser/CSSSupportsParser.cpp:
        (WebCore::CSSSupportsParser::supportsCondition):
        * css/parser/CSSSupportsParser.h:

2017-06-06  Joseph Pecoraro  <pecoraro@apple.com>

        Move Resource Timing / User Timing from experimental features into main preferences
        https://bugs.webkit.org/show_bug.cgi?id=172950

        Reviewed by Darin Adler.

        * features.json:
        Graduate some features from In Development to Supported.

2017-06-06  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][Wayland] Do not pass value of $DISPLAY to wl_display_connect()
        https://bugs.webkit.org/show_bug.cgi?id=172993

        Reviewed by Žan Doberšek.

        No new tests needed.

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::create): Instead of using the "DISPLAY" environment variable (meant for X11),
        pass a null pointer to "wl_display_connect()". This function checks the value of the "WAYLAND_DISPLAY" environment
        variable itself and therefore we do not need to pass it ourselves.

2017-06-06  Antoine Quint  <graouts@apple.com>

        Rebaseline and enable media/modern-media-controls/airplay-support
        https://bugs.webkit.org/show_bug.cgi?id=172980

        Reviewed by Eric Carlson.

        Fixing a small issue in the modern media controls code which would yield
        an error when manually creating a MediaController without a MediaControlsHost.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get isAudio):

2017-06-06  Antoine Quint  <graouts@apple.com>

        Update modern media controls testing utilities
        https://bugs.webkit.org/show_bug.cgi?id=172976
        <rdar://problem/32588432>

        Reviewed by Eric Carlson.

        Stop logging an error when we're not able to load UI Strings since UI strings
        are not defined in the majority of modern-media-controls tests as we load the
        code directly from the modern-media-controls module and can't reach into the
        English.lproj directory, nor is it necessary.

        * Modules/modern-media-controls/main.js:
        (UIString):

2017-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use the same draw timer and mutex when AC disabled or building without OpenGL
        https://bugs.webkit.org/show_bug.cgi?id=172923

        Reviewed by Michael Catanzaro.

        We have two different paths to do the same. When building without OpenGL, the VideoRenderRequestScheduler has
        its own timer and we need to add ifdefs to handle that. But when building with OpenGL we still support
        non-accelerated rendering that does the same than the VideoRenderRequestScheduler timer, but using the media
        player timer instead. We can simplify the code and remove more ifdefs by using the media player timer and mutex
        in all cases for non-accelerated rendering.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::cancelRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::start):
        (VideoRenderRequestScheduler::stop):
        (VideoRenderRequestScheduler::requestRender):
        (VideoRenderRequestScheduler::VideoRenderRequestScheduler): Deleted.
        (VideoRenderRequestScheduler::render): Deleted.

2017-06-05  Antoine Quint  <graouts@apple.com>

        Update media controls to match latest design specs
        https://bugs.webkit.org/show_bug.cgi?id=172932

        Reviewed by Dean Jackson.

        The media controls specs have changed and we now implement them. The main controls bar now
        appears to be floating, with a rounded corners and a margin around it. Some of the controls
        it used to contain now may appear outside of it. Specifically, the fullscreen and
        picture-in-picture buttons now are displayed in a dedicated controls bar in the top-left
        corner and the mute button, on iOS (where we don't support changing the volume when inline),
        is displayed in the top right corner.

        Another small UI improvement is that we display an activity indicator when we are waiting
        for data to initiate or resume playback instead of showing the elapsed time label. We also
        make displaying the scrubber more important than displaying other controls, except for the
        play/pause button, when width becomes scarce. Finally, we no longer use a speci layer type
        for the controls bar backgrounds, we now use the same "backdrop-filter" and tint overlay
        on both macOS and iOS.

        Since this work had previously been done through WebKitAdditions, we remove the specific
        build phase code that we added for this purpose and are now only ever looking for media
        controls code in the WebCore source tree.

        * Modules/modern-media-controls/controls/activity-indicator.css: Added.
        (.activity-indicator):
        (.activity-indicator > div):
        (.activity-indicator > .ne):
        (.activity-indicator > .e):
        (.activity-indicator > .se):
        (.activity-indicator > .s):
        (.activity-indicator > .sw):
        (.activity-indicator > .w):
        (.activity-indicator > .nw):
        (@keyframes activity-indicator-pulse):
        (to):
        * Modules/modern-media-controls/controls/airplay-button.js:
        * Modules/modern-media-controls/controls/auto-hide-controller.js: Added.
        (AutoHideController):
        (AutoHideController.prototype.get fadesWhileIdle):
        (AutoHideController.prototype.set fadesWhileIdle):
        (AutoHideController.prototype.handleEvent):
        (AutoHideController.prototype.gestureRecognizerStateDidChange):
        (AutoHideController.prototype.mediaControlsFadedStateDidChange):
        (AutoHideController.prototype.mediaControlsBecameInvisible):
        (AutoHideController.prototype._cancelNonEnforcedAutoHideTimer):
        (AutoHideController.prototype._cancelAutoHideTimer):
        (AutoHideController.prototype._resetAutoHideTimer):
        (AutoHideController.prototype._autoHideTimerFired):
        * Modules/modern-media-controls/controls/background-click-delegate-notifier.js: Added.
        (BackgroundClickDelegateNotifier):
        (BackgroundClickDelegateNotifier.prototype.handleEvent):
        * Modules/modern-media-controls/controls/background-tint.css:
        (.background-tint,):
        (.background-tint > .blur):
        (.background-tint > .tint):
        * Modules/modern-media-controls/controls/button.css:
        (button):
        (button > picture):
        (button.skip-back > picture,):
        (button.on > picture):
        (button:active > picture):
        (button.corner):
        (button.center,):
        (button.center):
        (button.small-center):
        (button.center > .background-tint,):
        (button.center > picture,):
        (button.center:active > picture,):
        * Modules/modern-media-controls/controls/button.js:
        (Button.prototype.get iconName):
        (Button.prototype.set iconName):
        (Button.prototype.get on):
        (Button.prototype.set on):
        (Button.prototype.get style):
        (Button.prototype.set style):
        (Button.prototype.get scaleFactor):
        (Button.prototype.set scaleFactor):
        (Button.prototype.handleEvent):
        (Button.prototype.commit):
        (Button.prototype._loadImage):
        (Button.prototype._imageSourceDidLoad):
        (Button.prototype._updateImage):
        (Button.prototype._updateImageMetrics):
        (Button):
        * Modules/modern-media-controls/controls/buttons-container.css:
        (.buttons-container):
        (.ios .buttons-container button):
        * Modules/modern-media-controls/controls/buttons-container.js:
        * Modules/modern-media-controls/controls/controls-bar.css:
        (.controls-bar):
        (.controls-bar.faded): Deleted.
        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.get children):
        (ControlsBar.prototype.set children):
        (ControlsBar.prototype.commitProperty):
        (ControlsBar.prototype.get userInteractionEnabled): Deleted.
        (ControlsBar.prototype.set userInteractionEnabled): Deleted.
        (ControlsBar.prototype.get fadesWhileIdle): Deleted.
        (ControlsBar.prototype.set fadesWhileIdle): Deleted.
        (ControlsBar.prototype.get visible): Deleted.
        (ControlsBar.prototype.set visible): Deleted.
        (ControlsBar.prototype.get faded): Deleted.
        (ControlsBar.prototype.set faded): Deleted.
        (ControlsBar.prototype.handleEvent): Deleted.
        (ControlsBar.prototype.gestureRecognizerStateDidChange): Deleted.
        (ControlsBar.prototype._cancelNonEnforcedAutoHideTimer): Deleted.
        (ControlsBar.prototype._cancelAutoHideTimer): Deleted.
        (ControlsBar.prototype._resetAutoHideTimer): Deleted.
        (ControlsBar.prototype._autoHideTimerFired): Deleted.
        * Modules/modern-media-controls/controls/fullscreen-button.js:
        * Modules/modern-media-controls/controls/icon-button.css: Removed.
        * Modules/modern-media-controls/controls/icon-button.js: Removed.
        * Modules/modern-media-controls/controls/icon-service.js:
        (const.iconService.new.IconService.prototype.imageForIconAndLayoutTraits):
        (const.iconService.new.IconService.prototype._fileNameAndPlatformForIconAndLayoutTraits):
        (const.iconService.new.IconService):
        (const.iconService.new.IconService.prototype.imageForIconNameAndLayoutTraits): Deleted.
        (const.iconService.new.IconService.prototype._fileNameAndPlatformForIconNameAndLayoutTraits): Deleted.
        * Modules/modern-media-controls/controls/inline-layout-support.js: Removed.
        * Modules/modern-media-controls/controls/inline-media-controls.css: Added.
        (.media-controls.inline > .controls-bar):
        (.media-controls.inline > .controls-bar.top-left):
        (.media-controls.inline.audio > .controls-bar):
        (.media-controls.inline > .controls-bar > *):
        (.media-controls.inline > button.mute):
        (.media-controls.inline > button.play-pause.corner):
        (.media-controls.inline.audio > button.play-pause.corner):
        (.media-controls.inline > .controls-bar button):
        (.media-controls.inline button.start.center > picture,):
        (.media-controls.inline button.start.small-center > picture,):
        (.media-controls.inline .time-control,):
        * Modules/modern-media-controls/controls/inline-media-controls.js: Added.
        (InlineMediaControls):
        (InlineMediaControls.prototype.set shouldUseAudioLayout):
        (InlineMediaControls.prototype.set shouldUseSingleBarLayout):
        (InlineMediaControls.prototype.get showsStartButton):
        (InlineMediaControls.prototype.set showsStartButton):
        (InlineMediaControls.prototype.showPlacard):
        (InlineMediaControls.prototype.hidePlacard):
        (InlineMediaControls.prototype.layout):
        (InlineMediaControls.prototype.commitProperty):
        (InlineMediaControls.prototype.get preferredMuteButtonStyle):
        (InlineMediaControls.prototype._topLeftContainerButtons):
        (InlineMediaControls.prototype._leftContainerButtons):
        (InlineMediaControls.prototype._rightContainerButtons):
        (InlineMediaControls.prototype._droppableButtons):
        * Modules/modern-media-controls/controls/ios-inline-media-controls.css: Removed.
        * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
        (IOSInlineMediaControls.prototype.get showsStartButton):
        (IOSInlineMediaControls.prototype.set showsStartButton):
        (IOSInlineMediaControls.prototype.gestureRecognizerStateDidChange):
        (IOSInlineMediaControls.prototype._pinchGestureRecognizerStateDidChange):
        (IOSInlineMediaControls.prototype._tapGestureRecognizerStateDidChange):
        (IOSInlineMediaControls):
        (IOSInlineMediaControls.prototype.layout): Deleted.
        (IOSInlineMediaControls.prototype.layoutTraitsDidChange): Deleted.
        * Modules/modern-media-controls/controls/layout-item.js:
        * Modules/modern-media-controls/controls/layout-node.js:
        (LayoutNode.prototype.commitProperty):
        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.css: Removed.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen .buttons-container.left):
        (.media-controls.mac.fullscreen .buttons-container.center):
        (.media-controls.mac.fullscreen .time-control):
        (.media-controls.mac.fullscreen > .controls-bar .status-label):
        (.media-controls.mac.fullscreen > .controls-bar > .background-tint > div): Deleted.
        (.media-controls.mac.fullscreen .volume.slider): Deleted.
        (.media-controls.mac.fullscreen button.volume-down): Deleted.
        (.media-controls.mac.fullscreen button.volume-up): Deleted.
        (.media-controls.mac.fullscreen button.rewind): Deleted.
        (.media-controls.mac.fullscreen button.play-pause): Deleted.
        (.media-controls.mac.fullscreen button.forward): Deleted.
        (.media-controls.mac.fullscreen .time-label): Deleted.
        (.media-controls.mac.fullscreen .scrubber): Deleted.
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.handleEvent):
        (MacOSFullscreenMediaControls.prototype.layout):
        (MacOSFullscreenMediaControls.prototype._handleMousedown):
        (MacOSFullscreenMediaControls.prototype._handleMousemove):
        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline .volume-slider-container):
        (.media-controls.mac.inline.audio .volume-slider-container):
        (.media-controls.mac.inline .volume-slider-container > .background-tint):
        (.media-controls.mac.inline .volume-slider-container > .background-tint > div):
        (.media-controls.mac.inline .volume-slider-container > .slider):
        (.media-controls.mac.inline > .controls-bar): Deleted.
        (.media-controls.mac.inline > .controls-bar > *): Deleted.
        (.media-controls.mac.inline > button.start > div): Deleted.
        (.media-controls.mac.inline > .controls-bar button): Deleted.
        (.media-controls.mac.inline button.play-pause): Deleted.
        (.media-controls.mac.inline button.skip-back): Deleted.
        (.media-controls.mac.inline .scrubber.slider): Deleted.
        (.media-controls.mac.inline button.mute): Deleted.
        (.media-controls.mac.inline button.airplay): Deleted.
        (.media-controls.mac.inline button.pip): Deleted.
        (.media-controls.mac.inline button.tracks): Deleted.
        (.media-controls.mac.inline button.fullscreen): Deleted.
        (.media-controls.mac.inline .time-label,): Deleted.
        (.media-controls.mac.inline .volume.slider): Deleted.
        * Modules/modern-media-controls/controls/macos-inline-media-controls.js:
        (MacOSInlineMediaControls.prototype.layout):
        (MacOSInlineMediaControls.prototype.get preferredMuteButtonStyle):
        (MacOSInlineMediaControls.prototype.handleEvent):
        (MacOSInlineMediaControls.prototype.layoutTraitsDidChange): Deleted.
        * Modules/modern-media-controls/controls/macos-media-controls.js: Removed.
        * Modules/modern-media-controls/controls/media-controls.css:
        (:host(audio)):
        (*):
        (:host(audio), *):
        (.media-controls-container):
        (.media-controls):
        (.media-controls > *):
        (.media-controls.shows-tracks-panel > .controls-bar,):
        (.media-controls.faded > *:not(.placard)):
        (.media-controls .time-label,):
        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get visible):
        (MediaControls.prototype.set visible):
        (MediaControls.prototype.get faded):
        (MediaControls.prototype.set faded):
        (MediaControls.prototype.showTracksPanel):
        (MediaControls.prototype.hideTracksPanel):
        (MediaControls.prototype.isPointInControls):
        (MediaControls.prototype.handleEvent):
        (MediaControls.prototype.commitProperty):
        (MediaControls.prototype.get layoutTraits): Deleted.
        (MediaControls.prototype.set layoutTraits): Deleted.
        (MediaControls.prototype.get showsStartButton): Deleted.
        (MediaControls.prototype.set showsStartButton): Deleted.
        (MediaControls.prototype.get placard): Deleted.
        (MediaControls.prototype.get showsPlacard): Deleted.
        (MediaControls.prototype.showPlacard): Deleted.
        (MediaControls.prototype.hidePlacard): Deleted.
        (MediaControls.prototype.controlsBarVisibilityDidChange): Deleted.
        (MediaControls.prototype.controlsBarFadedStateDidChange): Deleted.
        (MediaControls.prototype.layoutTraitsDidChange): Deleted.
        (MediaControls.prototype.layout): Deleted.
        (MediaControls.prototype._invalidateChildren): Deleted.
        * Modules/modern-media-controls/controls/media-document.css:
        (:host(.media-document)):
        (:host(.media-document.audio.mac)):
        * Modules/modern-media-controls/controls/mute-button.js:
        * Modules/modern-media-controls/controls/pip-button.js:
        * Modules/modern-media-controls/controls/placard.css:
        (.placard):
        (.placard .container):
        (.placard button):
        (.placard button > picture):
        (.placard .icon): Deleted.
        * Modules/modern-media-controls/controls/placard.js:
        (Placard.):
        (Placard.prototype.layout):
        * Modules/modern-media-controls/controls/play-pause-button.js:
        (PlayPauseButton):
        (PlayPauseButton.prototype.commit):
        * Modules/modern-media-controls/controls/scheduler.js:
        (const.scheduler.new.prototype.scheduleLayout):
        (const.scheduler.new.prototype.unscheduleLayout):
        (const.scheduler.new.prototype._requestFrameIfNeeded):
        (const.scheduler.new.prototype._frameDidFire):
        (const.scheduler.new.prototype._layout):
        * Modules/modern-media-controls/controls/scrubber.js: Removed.
        * Modules/modern-media-controls/controls/seek-button.js:
        * Modules/modern-media-controls/controls/skip-back-button.js:
        * Modules/modern-media-controls/controls/skip-forward-button.js: Added.
        (SkipForwardButton):
        * Modules/modern-media-controls/controls/slider.css:
        (.slider):
        (.slider > .custom-slider,):
        (.slider > .custom-slider):
        (.slider > .custom-slider > *):
        (.slider > .custom-slider > .fill):
        (.slider > .custom-slider > .track):
        (.slider > .custom-slider > .primary):
        (.slider > .custom-slider > .secondary):
        (.slider > .custom-slider > .knob):
        (.slider > input):
        (.slider > input::-webkit-slider-thumb):
        (.slider.disabled > input,):
        (.ios .slider > input):
        (.ios .slider > input::-webkit-slider-runnable-track):
        (.ios .slider > input::-webkit-slider-thumb):
        (.slider > canvas,): Deleted.
        (.slider > canvas): Deleted.
        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.set inputAccessibleLabel):
        (Slider.prototype.get disabled):
        (Slider.prototype.set disabled):
        (Slider.prototype.get secondaryValue):
        (Slider.prototype.set secondaryValue):
        (Slider.prototype._formatTime):
        (Slider.prototype.commitProperty):
        (Slider.prototype.commit):
        (Slider.prototype.draw): Deleted.
        (addRoundedRect): Deleted.
        * Modules/modern-media-controls/controls/start-button.css: Removed.
        * Modules/modern-media-controls/controls/start-button.js: Removed.
        * Modules/modern-media-controls/controls/status-label.css:
        (.status-label):
        * Modules/modern-media-controls/controls/status-label.js:
        (StatusLabel.prototype.get enabled):
        (StatusLabel.prototype.set enabled): Deleted.
        * Modules/modern-media-controls/controls/text-tracks.css:
        (video::-webkit-media-text-track-container):
        (video::-webkit-media-text-track-container.visible-controls-bar):
        (video::-webkit-media-text-track-container.visible-controls-bar.compact-controls-bar): Deleted.
        * Modules/modern-media-controls/controls/time-control.js:
        (TimeControl.prototype.set duration):
        (TimeControl.prototype.set currentTime):
        (TimeControl.prototype.get loading):
        (TimeControl.prototype.set loading):
        (TimeControl.prototype.get minimumWidth):
        (TimeControl.prototype.get idealMinimumWidth):
        (TimeControl.prototype.layout):
        (TimeControl.prototype._performIdealLayout):
        (TimeControl.prototype.get useSixDigitsForTimeLabels): Deleted.
        (TimeControl.prototype.set useSixDigitsForTimeLabels): Deleted.
        (TimeControl.prototype.get isSufficientlyWide): Deleted.
        * Modules/modern-media-controls/controls/time-label.css:
        (.time-label):
        * Modules/modern-media-controls/controls/time-label.js:
        (TimeLabel.prototype.setValueWithNumberOfDigits):
        (TimeLabel.prototype.commitProperty):
        (TimeLabel.prototype._formattedTime):
        (doubleDigits):
        (TimeLabel.prototype.set value): Deleted.
        * Modules/modern-media-controls/controls/tracks-button.js:
        * Modules/modern-media-controls/controls/tracks-panel.css:
        (.tracks-panel > .scrollable-container):
        (.tracks-panel section):
        (.tracks-panel section > h3):
        (.tracks-panel > .background-tint > div,): Deleted.
        * Modules/modern-media-controls/controls/volume-down-button.js:
        * Modules/modern-media-controls/controls/volume-slider.css: Removed.
        * Modules/modern-media-controls/controls/volume-slider.js: Removed.
        * Modules/modern-media-controls/controls/volume-up-button.js:
        * Modules/modern-media-controls/gesture-recognizers/gesture-recognizer.js:
        (GestureRecognizer.prototype.gestureBegan):
        (GestureRecognizer.prototype._removeTrackingListeners):
        * Modules/modern-media-controls/gesture-recognizers/tap.js:
        (TapGestureRecognizer.prototype.touchesMoved):
        * Modules/modern-media-controls/images/iOS/Airplay.svg: Added.
        * Modules/modern-media-controls/images/iOS/EnterFullscreen.svg: Added.
        * Modules/modern-media-controls/images/iOS/MediaSelector.svg: Added.
        * Modules/modern-media-controls/images/iOS/MiniPipIn.svg: Added.
        * Modules/modern-media-controls/images/iOS/Mute.svg: Added.
        * Modules/modern-media-controls/images/iOS/Pause.svg: Added.
        * Modules/modern-media-controls/images/iOS/PipIn.svg: Added.
        * Modules/modern-media-controls/images/iOS/Play.svg: Added.
        * Modules/modern-media-controls/images/iOS/SkipBack15.svg: Added.
        * Modules/modern-media-controls/images/iOS/SkipForward15.svg: Added.
        * Modules/modern-media-controls/images/iOS/VolumeHi.svg: Added.
        * Modules/modern-media-controls/images/iOS/airplay@1x.png: Removed.
        * Modules/modern-media-controls/images/iOS/airplay@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/enter-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/iOS/enter-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/enter-fullscreen@3x.png: Removed.
        * Modules/modern-media-controls/images/iOS/interval-skip-back@1x.png: Removed.
        * Modules/modern-media-controls/images/iOS/interval-skip-back@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/interval-skip-back@3x.png: Removed.
        * Modules/modern-media-controls/images/iOS/pause@1x.png: Removed.
        * Modules/modern-media-controls/images/iOS/pause@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/pause@3x.png: Removed.
        * Modules/modern-media-controls/images/iOS/pip-in@1x.png: Removed.
        * Modules/modern-media-controls/images/iOS/pip-in@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/pip-in@3x.png: Removed.
        * Modules/modern-media-controls/images/iOS/play@1x.png: Removed.
        * Modules/modern-media-controls/images/iOS/play@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/play@3x.png: Removed.
        * Modules/modern-media-controls/images/iOS/slider-thumb@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/start@1x.png: Removed.
        * Modules/modern-media-controls/images/iOS/start@2x.png: Removed.
        * Modules/modern-media-controls/images/iOS/start@3x.png: Removed.
        * Modules/modern-media-controls/images/macOS/Airplay-fullscreen.svg: Added.
        * Modules/modern-media-controls/images/macOS/Airplay.svg: Added.
        * Modules/modern-media-controls/images/macOS/EnterFullscreen.svg: Added.
        * Modules/modern-media-controls/images/macOS/ExitFullscreen.svg: Added.
        * Modules/modern-media-controls/images/macOS/Forward.svg: Added.
        * Modules/modern-media-controls/images/macOS/MediaSelector-fullscreen.svg: Added.
        * Modules/modern-media-controls/images/macOS/MediaSelector.svg: Added.
        * Modules/modern-media-controls/images/macOS/Mute.svg: Added.
        * Modules/modern-media-controls/images/macOS/Pause.svg: Added.
        * Modules/modern-media-controls/images/macOS/PipIn-fullscreen.svg: Added.
        * Modules/modern-media-controls/images/macOS/PipIn.svg: Added.
        * Modules/modern-media-controls/images/macOS/Play.svg: Added.
        * Modules/modern-media-controls/images/macOS/Rewind.svg: Added.
        * Modules/modern-media-controls/images/macOS/SkipBack15.svg: Added.
        * Modules/modern-media-controls/images/macOS/SkipForward15.svg: Added.
        * Modules/modern-media-controls/images/macOS/VolumeHi.svg: Added.
        * Modules/modern-media-controls/images/macOS/VolumeLo.svg: Added.
        * Modules/modern-media-controls/images/macOS/airplay-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/airplay-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/airplay-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/airplay-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/airplay@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/airplay@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/enter-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/enter-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/exit-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/exit-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/forward@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/forward@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/interval-skip-back-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/interval-skip-back-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/interval-skip-back@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/interval-skip-back@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/media-selection-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/media-selection-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/media-selection-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/media-selection-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/media-selection@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/media-selection@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pause-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pause-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pause-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pause-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pause@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pause@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pip-in-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pip-in-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pip-in-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pip-in-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pip-in@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/pip-in@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/play-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/play-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/play-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/play-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/play@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/play@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/rewind@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/rewind@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/scale-to-fill@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/scale-to-fill@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/scale-to-fit@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/scale-to-fit@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/start@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/start@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-down-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-down-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-mute-compact@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-mute-compact@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-mute@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-mute@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-up-fullscreen@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume-up-fullscreen@2x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume@1x.png: Removed.
        * Modules/modern-media-controls/images/macOS/volume@2x.png: Removed.
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/main.js:
        (UIString):
        (formatTimeByUnit):
        * Modules/modern-media-controls/media/audio-support.js: Added.
        (AudioSupport.prototype.get control):
        (AudioSupport.prototype.get mediaEvents):
        (AudioSupport.prototype.get tracksToMonitor):
        (AudioSupport.prototype.syncControl):
        (AudioSupport):
        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.buttonWasPressed):
        (FullscreenSupport.prototype.syncControl):
        (FullscreenSupport):
        (FullscreenSupport.prototype.iOSInlineMediaControlsRecognizedPinchInGesture): Deleted.
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.get isAudio):
        (MediaController.prototype.get isYouTubeEmbedWithTitle):
        (MediaController.prototype.get isFullscreen):
        (MediaController.prototype.get layoutTraits):
        (MediaController.prototype.iOSInlineMediaControlsRecognizedTapGesture):
        (MediaController.prototype.iOSInlineMediaControlsRecognizedPinchInGesture):
        (MediaController.prototype._updateControlsIfNeeded):
        (MediaController.prototype._updateTextTracksClassList):
        (MediaController.prototype.controlsBarFadedStateDidChange): Deleted.
        * Modules/modern-media-controls/media/media-document-controller.js:
        (MediaDocumentController.prototype._mediaDocumentHasMetadata):
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype._updatePlacard):
        (PlacardSupport):
        * Modules/modern-media-controls/media/scrubbing-support.js:
        (ScrubbingSupport.prototype.get mediaEvents):
        (ScrubbingSupport.prototype.syncControl):
        (ScrubbingSupport):
        * Modules/modern-media-controls/media/skip-back-support.js:
        * Modules/modern-media-controls/media/skip-forward-support.js: Added.
        (SkipForwardSupport.prototype.get control):
        (SkipForwardSupport.prototype.get mediaEvents):
        (SkipForwardSupport.prototype.buttonWasPressed):
        (SkipForwardSupport.prototype.syncControl):
        (SkipForwardSupport):
        * Modules/modern-media-controls/media/start-support.js:
        (StartSupport):
        (StartSupport.prototype.handleEvent):
        (StartSupport.prototype._shouldShowStartButton):
        (StartSupport.prototype.get control): Deleted.
        (StartSupport.prototype.syncControl): Deleted.
        * Modules/modern-media-controls/media/status-support.js:
        (StatusSupport.prototype.get mediaEvents):
        (StatusSupport.prototype.syncControl):
        (StatusSupport):
        * Modules/modern-media-controls/media/time-control-support.js: Renamed from Source/WebCore/Modules/modern-media-controls/media/time-labels-support.js.
        (TimeControlSupport.prototype.syncControl):
        (TimeControlSupport):
        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport.prototype.syncControl):
        * WebCore.xcodeproj/project.pbxproj:

2017-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor -[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:] to check readable types
        https://bugs.webkit.org/show_bug.cgi?id=172891
        <rdar://problem/32204540>

        Reviewed by Darin Adler.

        Tweaks some logic in PlatformPasteboardIOS and WebItemProviderPasteboard to correctly construct objects in
        -valuesForPasteboardType:inItemSet:. Previously, we have a hard-coded map of UTI type to Class in the form of
        static helpers titled is{RichText, String, URL, Image, Color}Type in WebItemProviderPasteboard. We would use
        these functions to determine whether an NSAttributedString, NSString, NSURL, UIImage or UIColor should be
        constructed using the loaded item provider data. This is incorrect for some UTIs, such as public.html, which
        cannot actually be used to construct an NSAttributedString -- this caused -valuesForPasteboardType:inItemSet: to
        always return nil when attempting to create an object corresponding to public.html.

        To fix this, we refactor -valuesForPasteboardType:inItemSet: to instead iterate through UIItemProviderReading-
        conformant classes in search for a class that can be created for the given UTI type. If no such class exists, we
        then fall back to custom WebKit handling of the dropped UTI type, which so far only includes reading an NSString
        with public.plain-text if the UTI is public.html (i.e. reading the HTML source from loaded item provider data).

        Covered by 2 new API tests:
        DataInteractionTests.ExternalSourceHTMLToContentEditable
        DataInteractionTests.ExternalSourceAttributedStringToContentEditable

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

        In some cases, -[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:] may now return an
        NSAttributedString when an NSString was previously created. This adjusts for that possibility by returning just
        the plain text, -[NSAttributedString string], if the read object was an NSAttributedString.

        * platform/ios/WebItemProviderPasteboard.mm:
        (allLoadableClasses):
        (classForTypeIdentifier):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):

        See description above for more details.

        (isRichTextType): Deleted.
        (isStringType): Deleted.
        (isURLType): Deleted.
        (isColorType): Deleted.
        (isImageType): Deleted.

        Removes these heuristics that attempt to "guess" the best UIItemProviderReading class to try and load for a
        given UTI type.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::draggedContentRangesBetweenOffsets):

        Adds a nil check to fix a debug assertion hit when running DataInteractionTests.

2017-06-05  Dan Bernstein  <mitz@apple.com>

        Build fix for macOS 10.12

        * platform/spi/cocoa/AVKitSPI.h:

2017-06-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager togglePictureInPicture]):

2017-06-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.

        * platform/spi/cocoa/AVKitSPI.h:

2017-06-05  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, fix missing semicolon in r217795

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

2017-06-05  Jer Noble  <jer.noble@apple.com>

        Allow clients to specify a list of codecs which should require hardware decode support.
        https://bugs.webkit.org/show_bug.cgi?id=172787

        Reviewed by Alex Christensen.

        Add a new setting, checked by HTMLMediaElement, which allows MediaPlayerPrivate implementation
        to require that the specified codecs have hardware support. This requirement will be supported
        in the normal media loading path and the MSE path on Cocoa ports.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaCodecsRequiringHardwareSupport):
        * html/HTMLMediaElement.h:
        * page/Settings.cpp:
        (WebCore::Settings::setMediaCodecsRequiringHardwareSupport):
        * page/Settings.h:
        (WebCore::Settings::mediaCodecsRequiringHardwareSupport):
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaCodecsRequiringHardwareSupport):
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.h: Added.
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm: Added.
        (WebCore::assetTrackMeetsHardwareDecodeRequirements):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::checkPlayability):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):

2017-06-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.

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

2017-06-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.

        * platform/spi/mac/AVFoundationSPI.h:

2017-06-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.

        * platform/spi/cocoa/IOSurfaceSPI.h:

2017-06-05  Konstantin Tokarev  <annulen@yandex.ru>

        Fix MediaPlayerPrivateMediaFoundation::naturalSize
        https://bugs.webkit.org/show_bug.cgi?id=172908

        Reviewed by Alex Christensen.

        MediaPlayerPrivateMediaFoundation::naturalSize should return size of
        video frame corrected by PAR, not size of video element.

        No new tests needed.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::load):
        (WebCore::MediaPlayerPrivateMediaFoundation::naturalSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::setNaturalSize):
        (WebCore::calculateNaturalSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::setMediaType):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2017-06-05  Zalan Bujtas  <zalan@apple.com>

        Destroy the associated renderer subtree when display: contents node is deleted.
        https://bugs.webkit.org/show_bug.cgi?id=172920
        <rdar://problem/32446045>

        Reviewed by Antti Koivisto.

        Since display: contents node does not create a renderer, we need to explicitly check
        and distinguish it from the display: none case.

        Covered by existing tests.

        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        * dom/Node.cpp:
        (WebCore::Node::~Node): Promote ASSERT(!renderer()) to ASSERT_WITH_SECURITY_IMPLICATION.
        * dom/Text.cpp:
        (WebCore::Text::~Text): Redundant assert. Text is a Node.

2017-06-05  Beth Dakin  <bdakin@apple.com>

        Modify Netflix controlsManager quirk to prevent only scrubbing
        https://bugs.webkit.org/show_bug.cgi?id=172881
        -and corresponding-
        rdar://problem/32228660

        Reviewed by Andy Estes.

        Instead of preventing Netflix from getting a controlsManager at all, this patch 
        ONLY prevents touch bar scrubbing from working. This means that Netflix will now 
        get controls in the TouchBar, it means that the play/pause and PiP buttons will be 
        functional, and it means that the timeline will accurately represent the current 
        time, BUT users will not be able to use the timeline to scrub the video. This also 
        allows Netflix to work with other MediaRemote clients such as AirPods.

        Remove the quirk code from here, since this is no longer the right place to test 
        if the MediaElement is hosted at Netflix.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager):
        (WebCore::needsPlaybackControlsManagerQuirk): Deleted.

        Pass around a new bool allowsTouchBarScrubbing.
        * platform/cocoa/WebPlaybackSessionModel.h:
        (WebCore::WebPlaybackSessionModelClient::allowsTouchBarScrubbingChanged):
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:

        Here’s where we check if we need quirky behavior.
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::WebPlaybackSessionModelMediaElement::allowsTouchBarScrubbing):

        Return the bool we have plumbed through tracking whether the current site 
        allowsTouchBarScrubbing from the existing delegate method 
        canBeginTouchBarScrubbing. We will always return NO for video elements on Netflix, 
        and this will prevent users from be able to scrub with the TouchBar on Netflix.
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager canBeginTouchBarScrubbing]):

        More plumbing.
        * platform/mac/WebPlaybackSessionInterfaceMac.h:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::allowsTouchBarScrubbingChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::setPlayBackControlsManager):

2017-06-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Deadlock in MediaPlayerPrivateGStreamer::changePipelineState, web process often locks up on seeking in a youtube video that has already fully buffered
        https://bugs.webkit.org/show_bug.cgi?id=170003

        Reviewed by Michael Catanzaro.

        When video sink is requested to render a frame, the GstBaseSink preroll mutex is taken. Then WebKit media player
        schedules a repaint in the main thread, taking the draw mutex and waiting on draw condition. It can happen that
        before the repaint is done in the main thread, a pause is requested in the main thread, causing a change state
        from PLAYING to PAUSE. When the change state reaches the video sink gst_base_sink_change_state() tries to get
        the preroll mutex. This causes a deadlock because the main thread is waiting to get the preroll mutex, but the
        other thread is waiting for the main thread to do the repaint. GStreamer handles this case by calling unlock()
        on the video sink before trying to get the preroll mutex, but the media player doesn't cancel the pending
        repaint when using coordinated graphics. This patch adds a new signal to WebKitVideoSink "repaint-cancelled" to
        notify the media player to cancel the pending prepaint.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::cancelRepaint): Release the draw mutex and notify the condition.
        (WebCore::MediaPlayerPrivateGStreamerBase::repaintCancelledCallback): Call cancelRepaint().
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink): Connect to WebKitVideoSink::repaint-cancelled.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRepaintCancelled): Emit WebKitVideoSink::repaint-cancelled.
        (webkitVideoSinkUnlock): Call webkitVideoSinkRepaintCancelled().
        (webkitVideoSinkStop): Ditto.
        (webkit_video_sink_class_init): Add WebKitVideoSink::repaint-cancelled signal.

2017-06-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Cleanup ifdefs in MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=172918

        Reviewed by Michael Catanzaro.

        The code in MediaPlayerPrivateGStreamerBase is quite difficult to follow with all the ifdefs for the
        possibilities when rendering. Some of them are even dead code now that all ports using GStreamer are using also
        coordinated graphics.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::VideoRenderRequestScheduler):
        (VideoRenderRequestScheduler::stop):
        (VideoRenderRequestScheduler::requestRender):
        (webkitVideoSinkRequestRender):

2017-06-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix compile warning when building GTK+ port without OpenGL.

        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::createTexture):

2017-06-05  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Do not force video sample's buffer release when the platformLayerProxy is inactive
        https://bugs.webkit.org/show_bug.cgi?id=172916

        Reviewed by Carlos Garcia Campos.

        When MediaPlayerPrivateGStreamerBase's plarformLayerProxy was inactive, a copy of the video sample
        was being done (without the buffer) and set, causing the sample's buffer to get freed. This was done
        to avoid stalling the gstreamer pipeline in situations where the video was set to display:none, as the
        platformLayerProxy would keep all the available buffers. But this can't happen nowadays as setting
        the video to display:none invalidates the proxy, causing it to release the references to the
        gstreamer buffers it's using. Also, the current code is causing a crash when using gstreamer-gl and
        the video is hidden but its contents are being painted through webgl or an accelerated canvas. So,
        remove this sample copy as it's not necessary anymore.

        Covered by existent tests.

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

2017-06-05  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Fix the condition to decide whether the MediaPlayer can be rendered accelerated
        https://bugs.webkit.org/show_bug.cgi?id=172852

        Reviewed by Michael Catanzaro.

        Before this change, in order to determine whether the MediaPlayer rendering could be accelerated we
        needed the player to have a renderer or it would return false. The renderer was needed in order to
        access the RenderLayerCompositor and check whether the chrome would be overwriting the accelerated
        compositing setting. But we don't have that option in WebKitGTK+ or WPE, so we can just check the
        accelerated compositing setting directly.

        Another problems with the approach before this change is that accelerated rendering was being disabled
        when the video element was not visible, as there's no video renderer. Due to this, cases where the video
        is painted through an accelerated canvas or webgl would not be using hardware accelerated copies.

        Covered by existent tests.

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

2017-06-04  Simon Fraser  <simon.fraser@apple.com>

        Percentages are calculated wrong in SVG transform CSS property
        https://bugs.webkit.org/show_bug.cgi?id=172901

        Reviewed by Zalan Bujtas.
        
        The code added in r217236 was just fetching viewBox(), but that can be empty.
        SVGLengthContext::determineViewport() does the correct thing to get
        the appropriate viewport.

        Test: svg/transforms/percent-transform-values-viewbox.html

        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform):

2017-06-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Page capture state not reported correctly
        https://bugs.webkit.org/show_bug.cgi?id=172897
        <rdar://problem/32493318>

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/media-stream-track-muted.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState): Test for audio and video mute on the tracks.
        (WebCore::MediaStream::characteristicsChanged): Call statusDidChange when m_mediaState
        changes instead of m_muted, so the page is informed when just audio or video mute state
        changes.
        * Modules/mediastream/MediaStream.h:

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaStreamTrackMuted): New.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-03  Darin Adler  <darin@apple.com>

        Streamline handling of attributes, using references as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=172899

        Reviewed by Chris Dumez.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::valueForRange): Use reference to value of
        attribute instead of copy to avoid reference count churn.
        (WebCore::AccessibilityNodeObject::maxValueForRange): Ditto.
        (WebCore::AccessibilityNodeObject::minValueForRange): Ditto.
        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::childElementWithMatchingLanguage): Ditto.
        (WebCore::AccessibilitySVGElement::accessibilityDescription): Ditto.
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::StyleAttributeMutationScope::StyleAttributeMutationScope): Ditto.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::shouldCancelDefaultAction): Use the
        equalLettersIgnoringASCIICase function instead of using
        both equalIgnoringASCIICase and convertToASCIILowercase.

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::HTMLAudioElement): Marked this inline since we
        want it inlined the one place it's used.
        (WebCore::HTMLAudioElement::create): Use auto and named the local variable
        just element.
        (WebCore::HTMLAudioElement::createForJSConstructor): Call create rather than
        repeating the code from create. Use setAttributeWithoutSynchronization directly
        rather than calling helper functions. Removed unneeded null check;
        setAttributeWithoutSynchronization handles null by removing the attribute.
        * html/HTMLAudioElement.h: Changed src argument of createForJSConstructor to
        take AtomicString since that is what we need for an attribute value.
        * html/HTMLAudioElement.idl: Use [AtomicString] for src argument.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::directionality): Use reference to value of
        attribute instead of copy to avoid reference count churn.
        (WebCore::HTMLElement::shouldAutocorrect): Ditto.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement): Call the new
        parsedMediaAttribute instead of the old mediaQuerySet function. Other than the
        name, the only change is that the result is now a const pointer.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType): Removed unnecessary local variable,
        resulting in code that is slightly cleaner and possibly eliminating reference
        count chrun.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSrc): Deleted.
        (WebCore::HTMLMediaElement::selectNextSourceChild): Use parsedMediaAttribute and
        removed rendudant direct check of whether mediaAttr is present. Changed logging to
        get the media attribute directly rather than with a helper function. Changed type
        to get the type attribute directly rather than with a helper function.
        (WebCore::HTMLMediaElement::sourceWasAdded): Take a reference rather than a pointer.
        (WebCore::HTMLMediaElement::sourceWasRemoved): Ditto.
        (WebCore::HTMLMediaElement::doesHaveAttribute): Use reference to value of
        attribute instead of copy to avoid reference count churn.
        * html/HTMLMediaElement.h: Updated for the above.

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedInto): Pass reference instead of pointer.
        (WebCore::HTMLSourceElement::removedFrom): Ditto.
        (WebCore::HTMLSourceElement::setSrc): Deleted.
        (WebCore::HTMLSourceElement::media): Deleted.
        (WebCore::HTMLSourceElement::setMedia): Deleted.
        (WebCore::HTMLSourceElement::type): Deleted.
        (WebCore::HTMLSourceElement::setType): Deleted.
        (WebCore::HTMLSourceElement::parseAttribute): Clear out m_cachedParsedMediaAttribute.
        This makes the parsing be lazy. The old code would parse the attribute value to make
        a MediaQuerySet here, but we do it in parsedMediaAttribute now.
        (WebCore::HTMLSourceElement::parsedMediaAttribute): Added. Creates a MediaQuerySet
        if needed, and returns it or null.
        * html/HTMLSourceElement.h: Removed include of MediaList.h. Removed unneeded media,
        type, setSrc, setMedia, and setType functions. Replaced the mediaQuerySet function
        with the parsedMediaAttribute, which returns a const pointer rather than non-const,
        and is also non-inline because it lazily creates the MediaQuerySet as needed. Replaced
        m_mediaQuerySet with m_cachedParsedMediaAttribute.
        * html/HTMLSourceElement.idl: Use [Reflect] for both type and media.

        * html/MediaDocument.cpp: Modernize the MediaDocumentParser constructor.
        (WebCore::MediaDocumentParser::createDocumentStructure): Instead of setSrc, use
        setAttributeWithoutSynchronization for the src attribute just as we do for all the
        other attributes of the newly created video element.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): Use reference to
        value of attribute instead of copy to avoid reference count churn.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultSubstituteDataForURL): Ditto.
        * rendering/RenderThemeIOS.mm:
        (WebCore::getAttachmentProgress): Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::AttachmentLayout::layOutSubtitle): Ditto.
        (WebCore::RenderThemeMac::paintAttachment): Ditto.
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::buildHorizontalKerningPair): Ditto.
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::buildVerticalKerningPair): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource): Ditto. Also use parentElement
        instead of writing out code that does exactly what it does.

2017-06-03  Sam Weinig  <sam@webkit.org>

        Can't use Object.defineProperty() to add an item to a DOMStringMap or Storage
        https://bugs.webkit.org/show_bug.cgi?id=172687

        Reviewed by Darin Adler.

        - Adds support for generating the defineOwnProperty ClassInfo method table hook
          to add support for Object.defineProperty(). The implementation follows WebIDL
          section 3.9.3 [[DefineOwnProperty]].
          (https://heycam.github.io/webidl/#legacy-platform-object-defineownproperty)
        - Adds support for generating named setters in addition to the already supported
          indexed setters as much of the required work was needed to make defineOwnProperty
          work for those properties. This patch does not aim to follow WebIDL faithfully,
          but rather to generate as close to the custom code as possible. A follow up 
          change will attempt to match WebIDL more closely (which will also require changes
          to [[GetOwnPropertySlot]]).
        - Removes the need for custom bindings in DOMStringMap, HTMLOptionsCollection and
          HTMLSelectElement. Gets us one function away from supporting Storage.
        - Tidies up generated headers a bit by grouping all the ClassInfo method table hooks
          together.
        - Removes support for CustomIndexedSetter, which is no longer used.

        Test: js/dom/legacy-platform-object-defineOwnProperty.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Removed now unneeded custom bindings.

        * bindings/js/JSDOMStringMapCustom.cpp: Removed.
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp: Removed.
        * bindings/js/JSHTMLSelectElementCustom.cpp: Removed.
        * bindings/js/JSHTMLSelectElementCustom.h: Removed.
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::putDelegate): Deleted.
        Remove more code that is now generated.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateIndexedGetter):
        - Add missing check for indexed setter operation when determining if the property should be ReadOnly.
        - Add support for custom implementation name, matching GenerateNamedGetter.
        - Convert to taking an outputArray and indent to allow more flexibility going forward.

        (GenerateNamedGetter):
        - Add missing check for named setter operation when determining if the property should be ReadOnly.
        - Convert to taking an outputArray and indent to allow more flexibility going forward.

        (GenerateGetOwnPropertySlotBody):
        - Convert to taking an outputArray and indent to allow more flexibility going forward.
        - Take over responsibility for checking and bailing if CustomGetOwnPropertySlot is set.

        (GenerateGetOwnPropertySlotBodyByIndex):
        - Convert to taking an outputArray and indent to allow more flexibility going forward.
        - Take over responsibility for checking and bailing if CustomGetOwnPropertySlotByIndex is set.

        (GenerateGetOwnPropertyNames):
        - Convert to taking an outputArray and indent to allow more flexibility going forward.
        - Take over responsibility for checking and bailing if CustomEnumerateProperty is set.

        (GenerateInvokeIndexedPropertySetter):
        Added. Implements the 'invoke an indexed property setter' algorithm (https://heycam.github.io/webidl/#invoke-indexed-setter)

        (GenerateInvokeNamedPropertySetter):
        Added. Implements the 'invoke a named property setter' algorithm (https://heycam.github.io/webidl/#invoke-named-setter)

        (GeneratePut):
        (GeneratePutByIndex):
        - Convert to taking an outputArray and indent to allow more flexibility going forward.
        - Take over responsibility for checking and bailing if CustomPut is set.
        - Adds support for CEReactions.
        - Adopts GenerateInvokeIndexedPropertySetter and GenerateInvokeNamedPropertySetter to
          simplify code.
        - Removes support for CustomIndexedSetter, which is no longer used.
        - Replaces use direct checking of OverrideBuiltins with check if any interface it inherits
          has it, which is how it is specified to work.

        (GenerateIsUnforgeablePropertyName):
        Added. Helper subroutine to generate a function that compares a property name
        agains all the property names defined as Unforgeable on the interface. Used by
        GenerateDefineOwnProperty.

        (GenerateDefineOwnProperty):
        Added. Implements section 3.9.3 [[DefineOwnProperty]] (https://heycam.github.io/webidl/#legacy-platform-object-defineownproperty)
        Adds support for CEReactions.

        (GenerateDeletePropertyCommon):
        Switch from getting OverrideBuiltins directly off the interface to using InheritsExtendedAttribute.

        (GenerateNamedDeleterDefinition):
        Switch signature to match peer generators.

        (InstanceOverridesGetOwnPropertySlot):
        Update for rename of JSCustomGetOwnPropertySlotAndDescriptor to CustomGetOwnPropertySlotAndDescriptor.

        (InstanceOverridesGetOwnPropertySlotByIndex):
        Added. Like InstanceOverridesGetOwnPropertySlot, but checks for the new CustomGetOwnPropertySlotByIndex 
        rather than CustomGetOwnPropertySlot.

        (InstanceOverridesGetOwnPropertyNames):
        Added. Moves complex predicate out of line.

        (InstanceOverridesPut):
        Removes now unused CustomIndexedSetter, and adds CustomPutFunction, which used to be checked separately.

        (InstanceOverridesDefineOwnProperty):
        Added.

        (GenerateHeader):
        - Moves more structure flags together.
        - Simplifies predicates and moves the ClassInfo method table hooks together.

        (GenerateImplementation):
        - Moves the ClassInfo method table hooks together
        - Adds call to GenerateDefineOwnProperty.

        (GenerateLegacyCallerDefinitions):
        Simplify bail condition to match other generators.

        (GeneratePrototypeDeclaration):
        Update for new extended attribute names.

        (InstanceOverridesCall): 
        Renamed from IsCallable for consistency.
        
        (HasComplexGetOwnProperty): 
        Deleted. Unused.
        
        (InstanceOverridesPutImplementation): 
        Deleted. Unused.
        
        (InstanceOverridesPutDeclaration): 
        Deleted. Unused.
        
        (IsCallable): 
        Renamed, for consistency, to InstanceOverridesCall .

        * bindings/scripts/IDLAttributes.json:
        Renames a few of the extended attributes to remove the JS prefix. This time
        around I only did the ones in the area I was working, but we should probably
        remove most of the rest.
    
        * css/CSSStyleDeclaration.idl:
        Update for JSCustomGetOwnPropertySlotAndDescriptor -> CustomGetOwnPropertySlotAndDescriptor rename.

        * dom/DOMStringMap.idl:
        Remove CustomNamedSetter and add uncomment out the setter.

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::setNamedItem):
        (WebCore::DatasetDOMStringMap::setItem): Deleted.
        * dom/DatasetDOMStringMap.h:
        Rename setItem to setNamedItem, which is what the generator expects.

        * dom/Node.idl:
        Update for JSCustomPushEventHandlerScope -> CustomPushEventHandlerScope rename.

        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        Update for JSCustomGetOwnPropertySlotAndDescriptor -> CustomGetOwnPropertySlotAndDescriptor rename.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::isSupportedPropertyName):
        * html/HTMLCollection.h:
        Add isSupportedPropertyName function which is used by the bindings and is now needed.

        * html/HTMLElement.idl:
        Update for JSCustomPushEventHandlerScope -> CustomPushEventHandlerScope rename.

        * html/HTMLOptionsCollection.h:
        (WebCore::HTMLOptionsCollection::setItem):
        Add setItem() implementation which just forwards to the select element. Also, add 
        a type alias to make the implementations of item and namedItem less verbose.

        * html/HTMLOptionsCollection.idl:
        Remove CustomIndexedSetter and uncomment the setter.

        * html/HTMLSelectElement.idl:
        Remove CustomIndexedSetter and uncomment the setter. Also, reformat
        to match the WHATWG spec.

        * page/DOMWindow.idl:
        Update for JSCustomDefineOwnProperty -> CustomDefineOwnProperty rename. Add 
        CustomGetOwnPropertySlotByIndex which is now needed to remove some unsound
        assumptions the generator was making.

        * page/Location.idl:
        Update for removal of JS prefix from a bunch of extended attributes.

        * page/UserMessageHandlersNamespace.idl:
        Update for JSCustomGetOwnPropertySlotAndDescriptor -> CustomGetOwnPropertySlotAndDescriptor rename.

        * storage/Storage.idl:
        Remove CustomNamedSetter and uncomment the setter.

        * bindings/scripts/test/JS/JSInterfaceName.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp: Added.
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h: Added.
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h: Added.
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.h: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.h: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.h: Added.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/TestIndexedSetterNoIdentifier.idl: Added.
        * bindings/scripts/test/TestIndexedSetterThrowingException.idl: Added.
        * bindings/scripts/test/TestIndexedSetterWithIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedAndIndexedSetterNoIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedAndIndexedSetterThrowingException.idl: Added.
        * bindings/scripts/test/TestNamedAndIndexedSetterWithIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedDeleterWithIdentifier.idl:
        * bindings/scripts/test/TestNamedSetterNoIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedSetterThrowingException.idl: Added.
        * bindings/scripts/test/TestNamedSetterWithIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedSetterWithOverrideBuiltins.idl: Added.
        * bindings/scripts/test/TestNamedSetterWithUnforgableProperties.idl: Added.
        * bindings/scripts/test/TestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.idl: Added.
        Added new tests and updated some results.

2017-06-04  Simon Fraser  <simon.fraser@apple.com>

        Object bounding box wrong for some paths
        https://bugs.webkit.org/show_bug.cgi?id=172866

        Reviewed by Tim Horton.
        
        RenderSVGShape::calculateObjectBoundingBox() should use boundingRect()
        rather than fastBoundingRect(), because the latter includes control points.

        Covered by existing tests.

        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::calculateObjectBoundingBox):

2017-06-04  Konstantin Tokarev  <annulen@yandex.ru>

        Fix build of Windows-specific code with ICU 59.1
        https://bugs.webkit.org/show_bug.cgi?id=172729

        Reviewed by Darin Adler.

        Fix conversions from WTF::String to wchar_t* and vice versa.
        No new tests needed.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateMediaFoundation::startCreateMediaSource):

2017-06-04  Chris Dumez  <cdumez@apple.com>

        Implement DOMMatrixReadOnly.transformPoint()
        https://bugs.webkit.org/show_bug.cgi?id=172900

        Reviewed by Simon Fraser.

        Implement DOMMatrixReadOnly.transformPoint():
        - https://drafts.fxtf.org/geometry/#dommatrixreadonly
        - https://drafts.fxtf.org/geometry/#dom-dommatrixreadonly-transformpoint

        Test: imported/blink/fast/dom/geometry-interfaces-dom-matrix-transformPoint.html

        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::transformPoint):
        * css/DOMMatrixReadOnly.h:
        * css/DOMMatrixReadOnly.idl:

2017-06-04  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Improve comments in AES, PBKDF2, RSA-SSA algorithm implementations
        https://bugs.webkit.org/show_bug.cgi?id=172894

        Reviewed by Michael Catanzaro.

        Add or improve code comments in libgcrypt implementations for the AES_CBC,
        AES_GCM, AES_KW, PBKDF2 and RSA-SSA algorithms.

        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp: Add generic comments that
        describe each operation that's performed.
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp: Ditto.
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp: Ditto.
        (WebCore::gcryptWrapKey):
        (WebCore::gcryptUnwrapKey):
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp: Ditto.
        (WebCore::gcryptDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        (WebCore::gcryptVerify): Align the verification results comment with the
        one that's used in the ECDSA implementation.

2017-06-03  Chris Dumez  <cdumez@apple.com>

        Implement DOMMatrix's fromFloat32Array / fromFloat64Array & toFloat32Array / toFloat64Array
        https://bugs.webkit.org/show_bug.cgi?id=172898

        Reviewed by Sam Weinig.

        Implement DOMMatrix's fromFloat32Array / fromFloat64Array & toFloat32Array / toFloat64Array
        as per:
        - https://drafts.fxtf.org/geometry/#dommatrixreadonly

        Test: http/wpt/geometry/DOMMatrix-from-to-typed-arrays.html

        * css/DOMMatrix.cpp:
        (WebCore::DOMMatrix::fromFloat32Array):
        (WebCore::DOMMatrix::fromFloat64Array):
        * css/DOMMatrix.h:
        * css/DOMMatrix.idl:
        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::fromFloat32Array):
        (WebCore::DOMMatrixReadOnly::fromFloat64Array):
        (WebCore::DOMMatrixReadOnly::toFloat32Array):
        (WebCore::DOMMatrixReadOnly::toFloat64Array):
        * css/DOMMatrixReadOnly.h:
        * css/DOMMatrixReadOnly.idl:

2017-06-03  Simon Fraser  <simon.fraser@apple.com>

        Implement DOMPointReadOnly.matrixTransform()
        https://bugs.webkit.org/show_bug.cgi?id=172896

        Reviewed by Chris Dumez.

        DOMPointReadOnly.matrixTransform() creates the matrix or throws, then uses
        a new function in TransformationMatrix to map x,y,z,w through the matrix.

        Test: http/wpt/geometry/DOMPoint-003.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/DOMMatrixReadOnly.h:
        (WebCore::DOMMatrixReadOnly::transformationMatrix):
        * dom/DOMPointReadOnly.cpp: Copied from Source/WebCore/dom/DOMPointReadOnly.idl.
        (WebCore::DOMPointReadOnly::matrixTransform):
        * dom/DOMPointReadOnly.h:
        * dom/DOMPointReadOnly.idl:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::map4ComponentPoint):
        * platform/graphics/transforms/TransformationMatrix.h:

2017-06-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Cleanup arguments to preparePlatformFont() and fontWithFamily() in FontCacheCoreText.cpp
        https://bugs.webkit.org/show_bug.cgi?id=172886

        Reviewed by Simon Fraser.

        The number of arguments is getting out of control.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/spi/cocoa/CoreTextSPI.h:

2017-06-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Script modules should be able to import data urls
        https://bugs.webkit.org/show_bug.cgi?id=171594

        Reviewed by Youenn Fablet.

        Tests: js/dom/classic-script-with-data-url.html
               js/dom/modules/module-script-with-data-url.html

        Script tag resources should have SameOriginDataURLFlag::Set to load data URLs
        since script tags should treat data URLs as same origin.

        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestScriptWithCache):

2017-06-03  Simon Fraser  <simon.fraser@apple.com>

        Sort the project file.

        * WebCore.xcodeproj/project.pbxproj:

2017-06-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Gather SUBTLE_CRYPTO utility functions in a single header
        https://bugs.webkit.org/show_bug.cgi?id=172870

        Reviewed by Jiewen Tan.

        Gather the helper functions used across different source files
        for libgcrypt-backed SUBTLE_CRYPTO implementations in a single
        header file.

        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        (WebCore::hashCryptoDigestAlgorithm): Deleted.
        (WebCore::hashAlgorithmName): Deleted.
        (WebCore::mpiData): Deleted.
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::gcryptDeriveBits):
        (WebCore::macAlgorithmForHashFunction): Deleted.
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::gcryptDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        (WebCore::mpiData): Deleted.
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        (WebCore::hashCryptoDigestAlgorithm): Deleted.
        (WebCore::hashAlgorithmName): Deleted.
        (WebCore::mpiData): Deleted.
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::hashAlgorithmName): Deleted.
        (WebCore::mpiData): Deleted.
        * crypto/gcrypt/GCryptUtilities.h: Added.
        (WebCore::hashAlgorithmName):
        (WebCore::hmacAlgorithm):
        (WebCore::digestAlgorithm):
        (WebCore::hashCryptoDigestAlgorithm):
        (WebCore::mpiData):

2017-06-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Fix PK verification for ECDSA
        https://bugs.webkit.org/show_bug.cgi?id=172857

        Reviewed by Michael Catanzaro.

        No new tests -- covered by existing tests.

        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        (WebCore::gcryptVerify): Return `true` if the verification succeeded or `false`
        in any other case, avoiding spilling information about the exact cause of
        verification failure.

2017-06-02  Zalan Bujtas  <zalan@apple.com>

        Cleanup FrameView::autoSizeIfEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=172889
        <rdar://problem/32550783>

        Reviewed by Tim Horton.

        This patch ensures that we always have a clean tree (and a valid and current document size) when
        setting m_autoSizeContentSize. 

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):

2017-06-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r216212): RenderReplaced::paint() should not save and restore the context unless it has to
        https://bugs.webkit.org/show_bug.cgi?id=172883
        <rdar://problem/32548614>

        Reviewed by Tim Horton.

        After implementing dragged content fading, RenderReplace::paint is now always guarded by unnecessary calls to
        GraphicsContext::save and GraphicsContext::restore, even when there is no dragged content being rendered. To
        address this, we initialize our GraphicsContextStateSaver with saveAndRestore = false, indicating that we don't
        want to immediately try and save the context.

        If we are in a dragged content range, we will then call GraphicsContextStateSaver::save, which saves the
        graphics context and also causes the GraphicsContextStateSaver to eventually try and restore() when it is
        destroyed. Otherwise, in the common codepath where the renderer is not in a dragged content range, the
        constructor and destructor of GraphicsContextStateSaver will be no-ops with respect to saving and restoring the
        graphics context.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):

2017-06-02  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r213464): [iOS] Fonts get too bold when the "Bold Text" accessibility setting is enabled
        https://bugs.webkit.org/show_bug.cgi?id=172737

        Reviewed by Simon Fraser.

        Revert the part of r213464 which changed how we calculate the weights of system fonts.

        Add an InternalSetting to trigger our mock of the accessbility "Bold Text" setting. We can't
        use the real setting, so instead we just ask for bold fonts instead of regular fonts when this
        setting is true.

        Tests: fast/text/accessibility-bold-system-font.html
               fast/text/accessibility-bold-system-font-2.html

        * platform/graphics/FontCache.h:
        (WebCore::FontCache::shouldMockBoldSystemFontForAccessibility):
        (WebCore::FontCache::setShouldMockBoldSystemFontForAccessibility):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::shouldMockBoldSystemFontForAccessibility):
        (WebCore::RenderTheme::setShouldMockBoldSystemFontForAccessibility):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::cssWeightOfSystemFont):
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldMockBoldSystemFontForAccessibility):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-06-02  Brady Eidson  <beidson@apple.com>

        Prevent scheme handlers from handling all built-in URL schemes.
        <rdar://problem/32404790> and https://bugs.webkit.org/show_bug.cgi?id=172869

        Reviewed by Andy Estes.

        Covered by API test.

        This patch refactors SchemeRegistry to keep a base, constant set of each of the special
        URL schemes that WebKit knows about by default.
        
        It then exposes that list through a new method to support WK2 API.

        * platform/SchemeRegistry.cpp:
        (WebCore::allBuiltinSchemes):
        (WebCore::builtinLocalURLSchemes):
        (WebCore::localURLSchemes):
        (WebCore::builtinSecureSchemes):
        (WebCore::secureSchemes):
        (WebCore::builtinSchemesWithUniqueOrigins):
        (WebCore::schemesWithUniqueOrigins):
        (WebCore::builtinEmptyDocumentSchemes):
        (WebCore::emptyDocumentSchemes):
        (WebCore::builtinCanDisplayOnlyIfCanRequestSchemes):
        (WebCore::canDisplayOnlyIfCanRequestSchemes):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::builtinCORSEnabledSchemes):
        (WebCore::CORSEnabledSchemes):
        (WebCore::SchemeRegistry::isBuiltinScheme):
        * platform/SchemeRegistry.h:

2017-06-02  Simon Fraser  <simon.fraser@apple.com>

        All scroll peformance logging should happen in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=172874
        rdar://problem/24474830

        Reviewed by Tim Horton.

        Printing to stdout from the WebProcess doesn't show up anywhere in non-development builds,
        so we have to log from the UI process.

        Achieve this by adding a PerformanceLoggingClient to Page which forwards messages to
        WebPageProxy, which prints them with the same format they had before. Some plumbing through
        PlatformCALayerClient and GraphicsLayerClient is required to get messages from TileControllers
        through to something that can get to Page.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h:
        (WebCore::Page::performanceLoggingClient):
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:
        * page/PerformanceLoggingClient.cpp: Added.
        (WebCore::PerformanceLoggingClient::synchronousScrollingReasonsAsString):
        * page/PerformanceLoggingClient.h: Added.
        (WebCore::PerformanceLoggingClient::~PerformanceLoggingClient):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reportExposedUnfilledArea):
        (WebCore::AsyncScrollingCoordinator::reportSynchronousScrollingReasonsChanged):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::reportSynchronousScrollingReasonsChanged):
        (WebCore::ScrollingTree::reportExposedUnfilledArea):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::reportSynchronousScrollingReasonsChanged):
        (WebCore::ThreadedScrollingTree::reportExposedUnfilledArea):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::exposedUnfilledArea):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::logExposedUnfilledArea): Deleted.
        (WebCore::logThreadedScrollingMode): Deleted.
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::logFilledVisibleFreshTile):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerLogFilledVisibleFreshTile):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerLogFilledVisibleFreshTile):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::logFilledVisibleFreshTile):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerPaintContents):
        * platform/graphics/ca/TileGrid.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::logFilledVisibleFreshTile):
        * rendering/RenderLayerBacking.h:

2017-06-02  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Cleanup video muting/unmuting when tab visibility changes
        https://bugs.webkit.org/show_bug.cgi?id=172858

        Reviewed by Youenn Fablet.

        Test: platform/ios/mediastream/video-muted-in-background-tab.html

        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged): Call notifyMediaCaptureOfVisibilityChanged.
        (WebCore::Document::notifyMediaCaptureOfVisibilityChanged): Renamed from notifyVisibilityChangedToMediaCapture.
        Set m_videoCaptureMutedForVisibilityChange when capture is muted because the document is hidden,
        and clear it when visibility changes when capture is disabled. Don't unmute when the document
        becomes visible unless this m_videoCaptureMutedForVisibilityChange is still true.
        (WebCore::Document::notifyVisibilityChangedToMediaCapture): Deleted.
        * dom/Document.h:

        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setVideoCaptureMutedForPageVisibility): Renamed from
        setVisibility.
        (WebCore::RealtimeMediaSourceCenter::setVisibility): Deleted.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSourceFactory::setVideoCaptureMutedForPageVisibility): Ditto.
        (WebCore::AVVideoCaptureSourceFactory::setVisibility): Deleted.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSourceFactory::setVideoCaptureMutedForPageVisibility): Ditto.
        (WebCore::MockRealtimeVideoSourceFactory::setVisibility): Deleted.

2017-06-02  Frederic Wang  <fwang@igalia.com>

        [Mac] Include frames in the scrolling tree when ScrollingTreeIncludesFrames=true
        https://bugs.webkit.org/show_bug.cgi?id=172825

        Reviewed by Simon Fraser.

        This commit generalizes RenderLayerCompositor/ScrollingCoordinator so that it handles the
        case of non-main frames. When ScrollingTreeIncludesFrames=true, all the frames will appear
        in the scrolling tree on Mac WK2.

        Test: fast/scrolling/scrolling-tree-includes-frame.html

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView): Do not to restrict to the
        main frame.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking): Do not to restrict to the main frame.
        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer): Make this function a class
        member so it can call hasCoordinatedScrolling and no longer needs a RenderView parameter.
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus): Do not to restrict to the
        main frame.
        * rendering/RenderLayerCompositor.h: Introduce useCoordinatedScrollingForLayer.

2017-06-02  Don Olmstead  <don.olmstead@am.sony.com>

        [WebCore] DragImageRef should correspond to USE(CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=172863

        Reviewed by Carlos Alberto Lopez Perez.

        No new tests. No change in behavior.

        * platform/DragImage.h:

2017-06-02  Frederic Wang  <fwang@igalia.com>

        [Mac] Use compositing for frames when ScrollingTreeIncludesFrames=true
        https://bugs.webkit.org/show_bug.cgi?id=172851

        Reviewed by Simon Fraser.

        When fast frame scrolling is supported on mac (bug 171667), scrollable frames will require
        special composited layer. This commit enables that on mac but only when
        ScrollingTreeIncludesFrames=true, so that the default behavior is unchanged.

        Test: compositing/iframes/compositing-for-scrollable-iframe.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame): Do not enable frame
        compositing when ScrollingTreeIncludesFrames=false.
        Rename ScrollableInnerFrameTrigger to ScrollableNonMainFrameTrigger.
        * page/ChromeClient.h: Rename ScrollableInnerFrameTrigger.

2017-06-02  Simon Fraser  <simon.fraser@apple.com>

        Get <chrono> out of StdLibExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=172744

        Reviewed by Zalan Bujtas.

        Only bring in <chrono> and namespace std::literals::chrono_literals when necessary.

        * fileapi/FileReader.cpp:
        * inspector/InspectorOverlay.cpp:
        * loader/CrossOriginPreflightResultCache.cpp:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::freshnessLifetime):
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::threadBody):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):
        * platform/network/CacheValidation.cpp:
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        * platform/network/CacheValidation.h:

2017-06-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Add a "supportedCountries" property to ApplePayPaymentRequest
        https://bugs.webkit.org/show_bug.cgi?id=172832
        <rdar://problem/30735544>

        Reviewed by Alex Christensen.

        Test: http/tests/ssl/applepay/ApplePaySessionV3.html

        * Modules/applepay/ApplePayPaymentRequest.h:
        * Modules/applepay/ApplePayPaymentRequest.idl:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/PaymentRequest.h:
        (WebCore::PaymentRequest::supportedCountries):
        (WebCore::PaymentRequest::setSupportedCountries):
        * Modules/applepay/PaymentRequestValidator.cpp:
        (WebCore::PaymentRequestValidator::validate):
        * platform/spi/cocoa/PassKitSPI.h:

2017-06-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Should see active Web Sockets when opening Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=172312

        Reviewed by Joseph Pecoraro.

        Test: http/tests/websocket/tests/hybi/inspector/before-load.html

        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::~WebSocket):
        (WebCore::WebSocket::allActiveWebSockets):
        (WebCore::WebSocket::allActiveWebSocketsMutex):
        (WebCore::WebSocket::channel):
        (WebCore::WebSocket::eventTargetInterface):
        Add a static set of all WebSocket objects and provide getters to access web socket metadata.

        * Modules/websockets/ThreadableWebSocketChannel.h:
        (WebCore::ThreadableWebSocketChannel::isWebSocketChannel):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::isWebSocketChannel):
        (WebCore::WebSocketChannel::identifier):
        (WebCore::WebSocketChannel::clientHandshakeRequest):
        (WebCore::WebSocketChannel::serverHandshakeResponse):
        (WebCore::WebSocketChannel::handshakeMode):
        (WebCore::WebSocketChannel::isType):
        Provide getters to access web socket metadata.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::enable):
        Loops over the static set of all WebSocket objects and sends events for each to the frontend.

2017-06-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix linking errors on iOS after r217712.

        * platform/OrientationNotifer.h:
        (WebCore::OrientationNotifier::Observer::setNotifier):

2017-06-02  Chris Dumez  <cdumez@apple.com>

        Crash under OrientationNotifier::Observer::setNotifier()
        https://bugs.webkit.org/show_bug.cgi?id=172847
        <rdar://problem/32519127>

        Reviewed by Youenn Fablet.

        Update OrientationNotifier::Observer::setNotifier() to unregister itself from
        its current notifier if it already has one. This is needed because
        Internals::setCameraMediaStreamTrackOrientation() may be used to override the
        notifier of an observer. If we override the notifier without unregistering
        the observer from its previous notifier, then the previous notifier will not
        get notified when the observer gets destroyed.

        No new tests, already covered by webrtc/video-rotation.html that is currently
        failing on some bots.

        * platform/OrientationNotifer.h:
        (WebCore::OrientationNotifier::Observer::setNotifier):

2017-06-02  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Logical margin incorrectly applied during the tracks sizing algorithm of auto tracks
        https://bugs.webkit.org/show_bug.cgi?id=172836

        Reviewed by Manuel Rego Casasnovas.

        When computing min-content and max-content of the content-sized tracks
        we are using the marginIntrinsicLogicalWidthForChild function, which
        uses the grid's writing-mode to determine wether to use the child's
        margin width or height. This is not correct when the grid item is
        orthogonal.

        This patch changes how we compute the tracks width so we use always
        the item's marginLogicalWidth, which depends only on its own writing
        mode.

        Test: fast/css-grid-layout/grid-track-sizing-with-margins-and-orthogonal-flows.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild):
        (WebCore::GridTrackSizingAlgorithmStrategy::maxContentForChild):

2017-06-02  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Invalidate the shadow subtree style when slotted pseudo rules are present.
        https://bugs.webkit.org/show_bug.cgi?id=172822

        Reviewed by Antti Koivisto.

        No new tests, this is tested by
        fast/shadow-dom/css-scoping-slot-with-id.html, once we don't force an
        Inherit style change for slots. I could add some more tests for stuff
        with descendant combinators and similar I guess, though.

        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::invalidateStyle):
        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::IdChangeInvalidation::invalidateStyle):

2017-06-02  Miguel Gomez  <magomez@igalia.com>

        [GTK+][WPE] Allow TextureMapperShaderProgram to perform colorspace conversions with the source texture pixels
        https://bugs.webkit.org/show_bug.cgi?id=172749

        Reviewed by Žan Doberšek.

        Currently TextureMapperGL is only able to paint properly textures that are in RGBA format. There are
        situations where we will want it to be able to handle other formats (for example BGRA for gstreamer-gl).
        To make this possible without having to perform the color conversion in the CPU, we add a new color
        conversion matrix to TextureMapperShaderProgram. This matrix will perform the color space conversion
        in the GPU, just after sampling the source texture.

        Also, add a new flag to TextureMapperGL to indicate that a color conversion is required to handle a
        texture. This flag will be set to the TextureMapperPlatformLayerBuffers as required, and TextureMapperGL
        will set the appropriate color space matrix to the shader. Initially only the flag for BGRA->RGBA conversion
        is defined, but support for new transformations can be added as needed.

        VideoTextureCopierGStreamer also uses the TextureMapperShaderProgram to perform texture sampling, but for
        the moment it just sets an identity matrix because when using gstreamer-gl, the format of the video frames
        is RGBA. This will be changed soon to use BGRA.

        No new tests.

        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::colorSpaceMatrixForFlags):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2017-06-02  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Margin wrong applied when stretching an orthogonal item in fixed size track
        https://bugs.webkit.org/show_bug.cgi?id=172590

        Reviewed by Sergio Villar Senin.

        We need to consider orthogonality when using the item's logical margin to
        compute the available space for stretching.

        The issue this patch fixes is only reproducible when the grid layout logic
        is executed several times, since probably the item doesn't need to be
        laid out again. In such cases, we just get the cached logical margins
        but we were not taking orthogonality into account.

        Test: fast/css-grid-layout/grid-item-stretching-must-not-depend-on-previous-layouts.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::marginLogicalSizeForChild):
        (WebCore::RenderGrid::availableAlignmentSpaceForChildBeforeStretching):
        * rendering/RenderGrid.h:

2017-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cache RenderThemeGadget hierarchies for rendering themed elements with GTK+ 3.20+
        https://bugs.webkit.org/show_bug.cgi?id=162673

        Reviewed by Michael Catanzaro.

        Because of the way the new theming system works in GTK+ >= 3.20 we are currently creating a gadget hierarchy
        every time we need to render a styled element or get layout information about it. That's happening on every
        repaint, and it's specially problematic for overlay scrollbar indicators that fade in/out when shown/hidden. We
        need to cache the gadgets and simply apply the state before every paint or layout query. When using GtkWidgetPath,
        calling gtk_style_context_save() breaks the gadget hierarchy, and style classes need to be set when building the
        GtkWidgetPath. That means we can't cache RenderThemeGadgets, call save, apply style classes and state, and then
        call restore. We need to cache gadget hierarchies with fixed style classes. Fortunately, setting the state does
        work, so we don't need to also cache a different hierarchy for every possible state. For example, for the
        particular case of scrollbars we would cache VerticalScrollbarRight, VerticalScrollbarLeft, HorizontalScrollbar,
        VerticalScrollIndicatorRight, VerticalScrollIndicatorLeft and HorizontalScrollIndicator. In practice, we will
        only have 4 of those at the same time in the cache.
        This patch adds RenderThemeWidget to represent a hierarchy of gadgets with fixed style classes that can be
        cached and reused to render or query style of those "widgets". It also simplifies the RenderThemeGtk and
        ScrollbarThemeGtk code by removing a lot of duplicated code to build the gadget hierarchies.

        * PlatformGTK.cmake:
        * platform/gtk/RenderThemeGadget.cpp:
        (WebCore::createStyleContext):
        (WebCore::appendElementToPath):
        (WebCore::RenderThemeGadget::state):
        (WebCore::RenderThemeGadget::setState):
        * platform/gtk/RenderThemeGadget.h:
        * platform/gtk/RenderThemeWidget.cpp: Added.
        (WebCore::widgetMap):
        (WebCore::RenderThemeWidget::getOrCreate):
        (WebCore::RenderThemeWidget::clearCache):
        (WebCore::RenderThemeWidget::~RenderThemeWidget):
        (WebCore::RenderThemeScrollbar::RenderThemeScrollbar):
        (WebCore::RenderThemeScrollbar::stepper):
        (WebCore::RenderThemeToggleButton::RenderThemeToggleButton):
        (WebCore::RenderThemeButton::RenderThemeButton):
        (WebCore::RenderThemeComboBox::RenderThemeComboBox):
        (WebCore::RenderThemeEntry::RenderThemeEntry):
        (WebCore::RenderThemeSearchEntry::RenderThemeSearchEntry):
        (WebCore::RenderThemeSpinButton::RenderThemeSpinButton):
        (WebCore::RenderThemeSlider::RenderThemeSlider):
        (WebCore::RenderThemeProgressBar::RenderThemeProgressBar):
        (WebCore::RenderThemeListView::RenderThemeListView):
        (WebCore::RenderThemeIcon::RenderThemeIcon):
        * platform/gtk/RenderThemeWidget.h: Added.
        (WebCore::RenderThemeEntry::entry):
        (WebCore::RenderThemeEntry::selection):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::themeChanged):
        (WebCore::ScrollbarThemeGtk::updateThemeProperties):
        (WebCore::widgetTypeForScrollbar):
        (WebCore::contentsRectangle):
        (WebCore::ScrollbarThemeGtk::trackRect):
        (WebCore::ScrollbarThemeGtk::backButtonRect):
        (WebCore::ScrollbarThemeGtk::forwardButtonRect):
        (WebCore::ScrollbarThemeGtk::paint):
        (WebCore::ScrollbarThemeGtk::scrollbarThickness):
        (WebCore::ScrollbarThemeGtk::minimumThumbLength):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::createStyleContext):
        (WebCore::setToggleSize):
        (WebCore::paintToggle):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::menuListColor):
        (WebCore::RenderThemeGtk::popupInternalPaddingBox):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::adjustTextFieldStyle):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::adjustSearchFieldIconStyle):
        (WebCore::paintSearchFieldIcon):
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::progressBarRectForBounds):
        (WebCore::RenderThemeGtk::paintProgressBar):
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeGtk::paintInnerSpinButton):
        (WebCore::styleColor):
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::paintMediaButton):

2017-06-01  Andreas Kling  <akling@apple.com>

        [Mac] Remove backing store for layers that are outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=170082
        <rdar://problem/31245009>

        Reviewed by Simon Fraser.

        Implement the backingStoreAttached flag in PlatformCALayerCocoa. This means that
        compositing layers outside the tiling coverage rect will no longer have backing
        stores, saving large amounts of memory.

        Also added a canDetachBackingStore flag that is set to false for scroll control
        layers, to avoid complicating coverage rect computations.

        Test: compositing/backing-store-attachment-1.html

        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::backingStoreAttached):
        (WebCore::GraphicsLayer::setCanDetachBackingStore):
        (WebCore::GraphicsLayer::canDetachBackingStore):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::backingStoreAttached):
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        (WebCore::GraphicsLayerCA::updateCoverage):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::setBackingStoreAttached):
        (PlatformCALayerCocoa::backingStoreAttached):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        * testing/Internals.cpp:
        (WebCore::toLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-06-01  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r217691.

        This change broke the Windows build.

        Reverted changeset:

        "Web Inspector: Should see active Web Sockets when opening Web
        Inspector"
        https://bugs.webkit.org/show_bug.cgi?id=172312
        http://trac.webkit.org/changeset/217691

2017-06-01  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix after r217691.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::sendFrame):
        * Modules/websockets/WebSocketChannel.h:
        Disambiguate the Function being used.

2017-06-01  Youenn Fablet  <youenn@apple.com>

        LibWebRTC might crash with frames having a null width or height
        https://bugs.webkit.org/show_bug.cgi?id=172842
        <rdar://problem/32514813>

        Reviewed by Jon Lee.

        Do not send black frames in case the video width or height is zero.
        Also ensure that even if a null buffer is returned by the pool, no crash might actually happen.

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFramesIfNeeded):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):

2017-06-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Should see active Web Sockets when opening Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=172312

        Reviewed by Joseph Pecoraro.

        Test: http/tests/websocket/tests/hybi/inspector/before-load.html

        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::~WebSocket):
        (WebCore::WebSocket::allActiveWebSockets):
        (WebCore::WebSocket::allActiveWebSocketsMutex):
        (WebCore::WebSocket::channel):
        (WebCore::WebSocket::eventTargetInterface):
        Add a static set of all WebSocket objects and provide getters to access web socket metadata.

        * Modules/websockets/ThreadableWebSocketChannel.h:
        (WebCore::ThreadableWebSocketChannel::isWebSocketChannel):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::isWebSocketChannel):
        (WebCore::WebSocketChannel::identifier):
        (WebCore::WebSocketChannel::clientHandshakeRequest):
        (WebCore::WebSocketChannel::serverHandshakeResponse):
        (WebCore::WebSocketChannel::handshakeMode):
        (WebCore::WebSocketChannel::isType):
        Provide getters to access web socket metadata.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::enable):
        Loops over the static set of all WebSocket objects and sends events for each to the frontend.

2017-06-01  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r217296): Dragging a video only shows controls during drag event
        https://bugs.webkit.org/show_bug.cgi?id=172837
        rdar://problem/32434661

        Reviewed by Zalan Bujtas.

        r217296 changed RenderVideo::paintReplaced() from checking paintBehavior() flags on the FrameView
        to paintInfo.paintBehavior flags. However, RenderLayer was stripping the PaintBehaviorFlattenCompositingLayers
        flag from the paintInfo.paintBehavior flags, so fix that.

        Not easily testable.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

2017-06-01  Simon Fraser  <simon.fraser@apple.com>

        Remove the redundant selectionOnly argument from RenderLayer::paintForegroundForFragments()
        https://bugs.webkit.org/show_bug.cgi?id=172835

        Reviewed by Zalan Bujtas.

        The 'selectionOnly' state is already encoded in localPaintingInfo.paintBehavior so there's
        no need to pass it separately.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintForegroundForFragments):
        * rendering/RenderLayer.h:

2017-06-01  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Fix compilation errors in LocalizedStrings.cpp on platform not USE(CF) nor USE(GLIB)
        https://bugs.webkit.org/show_bug.cgi?id=172796

        Reviewed by Alex Christensen.

        No new tests needed. Fixing compilation errors.

        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::imageTitle):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):

2017-06-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r217647.

        No longer needed after r217682

        Reverted changeset:

        "Avoid iterator invalidation bug in
        WebCore::defaultPortForProtocol"
        https://bugs.webkit.org/show_bug.cgi?id=172786
        http://trac.webkit.org/changeset/217647

2017-06-01  Chris Dumez  <cdumez@apple.com>

        Make WebCore::defaultPortForProtocol() thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=172797

        Reviewed by Brent Fulgham.

        Make WebCore::defaultPortForProtocol() thread-safe since it is called from the SecurityOrigin
        constructor and SecurityOrigin objects are constructed from various threads.

        This should not regress the non-testing code paths since we only pay locking costs if
        a default port override has been set by the tests.

        * platform/URL.cpp:
        (WebCore::defaultPortForProtocolMapLock):
        (WebCore::defaultPortForProtocolMapForTesting):
        (WebCore::ensureDefaultPortForProtocolMapForTesting):
        (WebCore::registerDefaultPortForProtocolForTesting):
        (WebCore::clearDefaultPortForProtocolMapForTesting):
        (WebCore::defaultPortForProtocol):

2017-06-01  Andy Estes  <aestes@apple.com>

        REGRESSION (r217626): ENABLE_APPLE_PAY_SESSION_V3 was disabled by mistake
        https://bugs.webkit.org/show_bug.cgi?id=172828

        Reviewed by Beth Dakin.

        * Configurations/FeatureDefines.xcconfig:

2017-06-01  Frederic Wang  <fwang@igalia.com>

        ScrollingCoordinator::updateSynchronousScrollingReasons should consider non-main frames
        https://bugs.webkit.org/show_bug.cgi?id=172806

        Reviewed by Simon Fraser.

        Currently, the scrolling coordinator does not manage scrolling of frames other than the main
        one (bugs 171667 and 149264) and so ScrollingCoordinator::updateSynchronousScrollingReasons
        is only relevant for the main frame. This commit refactors a bit ScrollingCoordinator so that
        updateSynchronousScrollingReasons is considered for all the frames whose scrolling is
        coordinated by the ScrollingCoordinator so non-main frames will be considered in the future.

        No new tests, behavior is unchanged for now.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons): Add an ASSERT to ensure
        that this function is only called for frame whose scrolling is coordinated by this class.
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasonsForAllFrames): Introduce a
        new function to update synchronous scrolling for subframes whose scrolling is coordinated by
        this class.
        (WebCore::ScrollingCoordinator::setForceSynchronousScrollLayerPositionUpdates): Update
        synchronous scrolling reason for non-main frames too.
        (WebCore::ScrollingCoordinator::replaySessionStateDidChange): Update synchronous scrolling
        reason for non-main frames too.
        * page/scrolling/ScrollingCoordinator.h: Define updateSynchronousScrollingReasonsForAllFrames

2017-06-01  Andy Estes  <aestes@apple.com>

        [Cocoa] Upstream support for JCB as a supported payment network
        https://bugs.webkit.org/show_bug.cgi?id=172819

        Reviewed by Tim Horton.

        * Modules/applepay/PaymentRequest.cpp:
        (WebCore::PaymentRequest::isValidSupportedNetwork):
        (WebCore::isAdditionalValidSupportedNetwork): Deleted.

2017-06-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r217660.

        This should not have landed given that the new assertion is
        hit on debug EWS bots

        Reverted changeset:

        "Make sure we don't access WebCore::defaultPortForProtocol
        from non-main thread"
        https://bugs.webkit.org/show_bug.cgi?id=172797
        http://trac.webkit.org/changeset/217660

2017-06-01  Brent Fulgham  <bfulgham@apple.com>

        Make sure we don't access WebCore::defaultPortForProtocol from non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=172797

        Reviewed by Alex Christensen.

        * platform/URL.cpp:
        (WebCore::defaultPortForProtocol): Add an assertion to make sure we don't access the
        DefaultPortForProtocolMapForTesting from multiple threads.

2017-06-01  Konstantin Tokarev  <annulen@yandex.ru>

        Get rid of more HIGH_DPI_CANVAS leftovers
        https://bugs.webkit.org/show_bug.cgi?id=172751

        Reviewed by Simon Fraser.

        Get rid of HTMLCanvasElement::convertLogicalToDevice() and
        HTMLCanvasElement::convertDeviceToLogical() that are no longer needed,
        as canvas doesn't use device scale factor anymore.

        No new tests needed.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer): Use integer width()
        and height() instead of floating-point temporary deviceSize variable.
        (WebCore::HTMLCanvasElement::baseTransform): Return unmodified
        baseTransform of underlying ImageBuffer.
        * html/HTMLCanvasElement.h: Removed declarations of unused methods.

2017-05-31  Brent Fulgham  <bfulgham@apple.com>

        Avoid iterator invalidation bug in WebCore::defaultPortForProtocol
        https://bugs.webkit.org/show_bug.cgi?id=172786
        <rdar://problem/32499586>

        Reviewed by Chris Dumez.

        Create the SecurityOrigin objects on the main thread (rather than the worker queues)
        since defaultPortForProtocol is not threadsafe.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):

2017-05-31  Mark Lam  <mark.lam@apple.com>

        Remove overrides of visitChildren() that do not add any functionality.
        https://bugs.webkit.org/show_bug.cgi?id=172789
        <rdar://problem/32500865>

        Reviewed by Andreas Kling.

        No new tests needed.  Just deleting unneeded code.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::visitChildren): Deleted.
        * bindings/js/JSDOMWindowBase.h:

2017-05-31  Don Olmstead  <don.olmstead@am.sony.com>

        [WebCore] Update AXObjectCache::startOrEndCharacterOffsetForRange signature for !HAVE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=172769

        Reviewed by Yusuke Suzuki.

        No new tests. No change in behavior.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange):
        * platform/Curl.cmake: Added.

2017-05-31  Mark Lam  <mark.lam@apple.com>

        CodeGeneratorJS's InstanceNeedsVisitChildren should not return true just because a class is / extends EventTarget.
        https://bugs.webkit.org/show_bug.cgi?id=172782
        <rdar://problem/32498266>

        Reviewed by Chris Dumez.

        No new tests needed.  This change is covered by existing binding tests.

        InstanceNeedsVisitChildren should also not check the IsJSBuiltinConstructor
        condition, which is not used to emit any additional code in the visitChildren
        override.

        The other conditions for generating visitChildren() are adequate if the class
        needs to override visitChildren.  Currently, we're generating some visitChildren()
        methods that only call its Base::visitChildren().  Removing the "is / extends
        EventTarget" conditions removes those unneeded visitChildren overrides.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceNeedsVisitChildren):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructor::visitChildren): Deleted.
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJIT::visitChildren): Deleted.
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::visitChildren): Deleted.
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructor::visitChildren): Deleted.
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::visitChildren): Deleted.
        * bindings/scripts/test/JS/JSTestNode.h:

2017-05-31  Chris Dumez  <cdumez@apple.com>

        Make QualifiedName cache per thread
        https://bugs.webkit.org/show_bug.cgi?id=172778
        <rdar://problem/32490942>

        Reviewed by Geoffrey Garen.

        Make QualifiedName cache per thread since it is currently used from multiple threads,
        in an unsafe fashion. We started using QualifiedName objects in background threads
        after r190602 which started using a CSSSelectorParser in the ContentExtensionParser.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::QualifiedName):
        (WebCore::QualifiedName::QualifiedNameImpl::~QualifiedNameImpl):
        * dom/QualifiedNameCache.cpp: Added.
        (WebCore::QNameComponentsTranslator::hash):
        (WebCore::QNameComponentsTranslator::equal):
        (WebCore::QNameComponentsTranslator::translate):
        (WebCore::QualifiedNameCache::getOrCreate):
        (WebCore::QualifiedNameCache::remove):
        * dom/QualifiedNameCache.h: Added.
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::qualifiedNameCache):

2017-05-31  Andy Estes  <aestes@apple.com>

        Rename ENABLE_APPLE_PAY_DELEGATE to ENABLE_APPLE_PAY_SESSION_V3 and bump the supported version number
        https://bugs.webkit.org/show_bug.cgi?id=172366

        Reviewed by Daniel Bates.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePayPaymentAuthorizationResult.idl:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/ApplePayShippingContactUpdate.idl:
        * Modules/applepay/ApplePayShippingMethodUpdate.idl:

2017-05-31  Youenn Fablet  <youenn@apple.com>

        PeerConnection should respect tracks that are muted at the time they are added
        https://bugs.webkit.org/show_bug.cgi?id=172771

        Reviewed by Eric Carlson.

        Tests: webrtc/peer-connection-audio-unmute.html
               webrtc/video-unmute.html

        Making sure that muted/enabled state of sources are correctly handled at creation time of the outgoing webrtc sources.
        This should trigger silent audio and black frames.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::setSource):
        (WebCore::RealtimeOutgoingAudioSource::initializeConverter):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::setSource):
        (WebCore::RealtimeOutgoingVideoSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingVideoSource::sourceEnabledChanged):
        (WebCore::RealtimeOutgoingVideoSource::initializeFromSource):
        (WebCore::RealtimeOutgoingVideoSource::AddOrUpdateSink):
        (WebCore::RealtimeOutgoingVideoSource::RemoveSink):
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFramesIfNeeded):
        (WebCore::RealtimeOutgoingVideoSource::setSizeFromSource): Deleted.
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFrames): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

2017-05-31  Antti Koivisto  <antti@apple.com>

        CrashTracer: Regression : com.apple.WebKit.WebContent at STP responsible :: com.apple.WebCore: WebCore::SharedBuffer::data const + 11
        https://bugs.webkit.org/show_bug.cgi?id=172747
        <rdar://problem/32275314>

        Reviewed by Andreas Kling.

        Test: http/tests/subresource-integrity/empty-stylesheet-integrity-crash.html

        * loader/SubresourceIntegrity.cpp:
        (WebCore::matchIntegrityMetadata):

            If the resource body is empty CachedResource::resourceBuffer() may be null.

2017-05-31  Frederic Wang  <fwang@igalia.com>

        ScrollingStateScrollingNode::ChangedProperty::NumScrollingStateNodeBits is wrongly set
        https://bugs.webkit.org/show_bug.cgi?id=172349

        Reviewed by Simon Fraser.

        ScrollingStateScrollingNode::ChangedProperty::NumScrollingStateNodeBits was introduced in
        r133022 so that ScrollingStateFrameScrollingNode and ScrollingStateOverflowScrollingNode
        know the number of bits use for properties in their parent class.

        In r172649, r210560, r185762 and r183702 new properties were added to
        ScrollingStateScrollingNode but NumScrollingStateNodeBits was not increased accordingly. This
        means that there are potential conflicts between these new properties and those of derived
        classes ScrollingStateFrameScrollingNode and ScrollingStateOverflowScrollingNode. It is not
        clear how to write a test case reproducing such conflict, though.

        No new tests, this is a coding mistake but its effect is unclear.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::setPropertyChanged): Use hasChangedProperty and cast to
        64-bits integer before shifting.
        * page/scrolling/ScrollingStateNode.h: Add a comment to make clear NumStateNodeBits must
        remain at the last position. Ensure we have enough bits available.
        (WebCore::ScrollingStateNode::hasChangedProperty): Cast to 64-bits integer before shifting.
        * page/scrolling/ScrollingStateScrollingNode.h: Fix position of NumScrollingStateNodeBits and
        also add a similar comment.

2017-05-31  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r217603.

        This patch broke the internal builds.

        Reverted changeset:

        "Get <chrono> out of StdLibExtras.h"
        https://bugs.webkit.org/show_bug.cgi?id=172744
        http://trac.webkit.org/changeset/217603

2017-05-31  Simon Fraser  <simon.fraser@apple.com>

        Get <chrono> out of StdLibExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=172744

        Reviewed by Saam Barati.

        Only bring in <chrono> and namespace std::literals::chrono_literals when necessary.

        * fileapi/FileReader.cpp:
        * inspector/InspectorOverlay.cpp:
        * loader/CrossOriginPreflightResultCache.cpp:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::freshnessLifetime):
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::threadBody):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):
        * platform/network/CacheValidation.cpp:
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        * platform/network/CacheValidation.h:

2017-05-31  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Use the rare data's RenderStyle for display: contents.
        https://bugs.webkit.org/show_bug.cgi?id=172721

        Reviewed by Antti Koivisto.

        No new tests, no behavior change.

        * dom/Element.cpp:
        (WebCore::Element::hasDisplayContents):
        (WebCore::Element::storeDisplayContentsStyle):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveComposedTree):

2017-05-31  Per Arne Vollan  <pvollan@apple.com>

        LayoutTest media/video-orientation.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=172648
        <rdar://problem/31322425>

        Reviewed by Eric Carlson.

        For videos with rotation tag set, the transform AVAssetTrack.preferredTransform applied to
        AVAssetTrack.naturalSize might return a CGSize instance with negative width or height.

        Covered by existing tests.

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

2017-05-30  Frederic Wang  <fwang@igalia.com>

        Include ScrollingTreeScrollingNode properties in ScrollingTreeFrameScrollingNode::dumpProperties
        https://bugs.webkit.org/show_bug.cgi?id=172287

        Reviewed by Simon Fraser.

        No new tests, only changes in dumped tree.

        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::dumpProperties): Print properties of the parent class.

2017-05-30  Sam Weinig  <sam@webkit.org>

        Update test result after r217585.

        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetter::deleteProperty):
        (WebCore::JSTestNamedDeleterWithIndexedGetter::deletePropertyByIndex):

2017-05-30  Dan Bernstein  <mitz@apple.com>

        Fixed the build after r217588.

        * page/FrameView.h: Stopped exporting a function defined inline.

2017-05-30  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: m_layoutPhase == InPostLayerPositionsUpdatedAfterLayout || m_layoutPhase == OutsideLayout
        https://bugs.webkit.org/show_bug.cgi?id=171501
        <rdar://problem/31977453>

        Reviewed by Simon Fraser.

        We should be able to paint as long as the tree is clean and we are in paintable state.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2017-05-30  Sam Weinig  <sam@webkit.org>

        Revert accidentally checked in change.

        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        * crypto/mac/CryptoDigestAlgorithm.h:

2017-05-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Generate named property deleters
        https://bugs.webkit.org/show_bug.cgi?id=172688

        Reviewed by Chris Dumez.

        Test: js/dom/named-property-deleter.html

        * WebCore.xcodeproj/project.pbxproj:
        Add new file, JSDOMAbstractOperations.h

        * bindings/js/JSDOMAbstractOperations.h: Added.
        (WebCore::isVisibleNamedProperty):
        Add an implementation of the abstract operation WebIDL calls the 'named property visibility algorithm'.
        It is used by many WebIDL algorithms, but currently I am only using this implementation for deleters.
        In the future, we should try and move the other property access generators to use it as well.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::deleteProperty): Deleted.
        (WebCore::JSDOMStringMap::deletePropertyByIndex): Deleted.
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::deleteProperty): Deleted.
        (WebCore::JSStorage::deletePropertyByIndex): Deleted.
        Remove now generated deleteProperty and deletePropertyByIndex implementations.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDeletePropertyCommon):
        (GenerateDeletePropertyDefinition):
        (GenerateDeletePropertyByIndexDefinition):
        (GenerateNamedDeleterDefinition):
        Added generation for named deleters. We generate both deleteProperty and deletePropertyByIndex.

        (InstanceOverridesDelete):
        Add predicate for whether the header should declare deleteProperty and deletePropertyByIndex.

        (GenerateHeader):
        Move property access hook declarations closer to each other. Use new InstanceOverridesDelete
        predicate for deleteProperty and deletePropertyByIndex.
 
        (GenerateImplementation):
        Add call to generate named deleter if one exists.

        (GenerateConstructorHelperMethods):
        Remove an old FIXME that that was no longer true, there are no more interfaces that inherit from
        an interface with [NoInterfaceObject].

        * dom/DOMStringMap.idl:
        Removes CustomDeleteProperty and sorts extended attributes.

        * dom/DatasetDOMStringMap.h:
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::isSupportedPropertyName):
        Added. This is a bindings support function (much like supportedPropertyNames()) that is
        used JSDOMAbstractOperations.h's isVisibleNamedProperty.

        (WebCore::DatasetDOMStringMap::supportedPropertyNames):
        Convert to an early return.

        (WebCore::DatasetDOMStringMap::deleteNamedProperty):
        (WebCore::DatasetDOMStringMap::deleteItem): Deleted.
        Renamed deleteItem to deleteNamedProperty, which is the name the bindings use for deleter
        operations without an identifier.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        Fix incorrect indentation that bothered me.

        * storage/Storage.cpp:
        * storage/Storage.h:
        - Remove isDisabledByPrivateBrowsing(), which had no definition.
        - Add isSupportedPropertyName(), which the deleter code (via the isVisibleNamedProperty algorithm)
          needs.
        
        * storage/Storage.idl:
        Removes CustomDeleteProperty, sorts the extended attributes, adds 'deleter' special 
        to the removeItem operation and adds a commented out 'setter' special to the 'setItem'
        operation.

        * bindings/scripts/test/JS/JSTestObj.h:
        Update result for declarations moving around.

        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h: Added.
        * bindings/scripts/test/TestNamedDeleterNoIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedDeleterThrowingException.idl: Added.
        * bindings/scripts/test/TestNamedDeleterWithIdentifier.idl: Added.
        * bindings/scripts/test/TestNamedDeleterWithIndexedGetter.idl: Added.
        Add new tests for named deleters.

2017-05-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: images dragged from Inspector to Desktop are named "Unknown.png"
        https://bugs.webkit.org/show_bug.cgi?id=141515
        <rdar://problem/9251308>

        Reviewed by Wenson Hsieh.

        * html/HTMLAttributeNames.in:

2017-05-30  Youenn Fablet  <youenn@apple.com>

        Add support for Certificate and IceCandidatePair stats
        https://bugs.webkit.org/show_bug.cgi?id=172734

        Reviewed by Geoff Garen.

        Covered by updated test.

        Adding support for these two stats in the IDL and in the libwebrtc binding code.

        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::IceCandidatePairStats::IceCandidatePairStats):
        (WebCore::RTCStatsReport::CertificateStats::CertificateStats):
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::iceCandidatePairState):
        (WebCore::fillRTCIceCandidatePairStats):
        (WebCore::fillRTCCertificateStats):
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered):

2017-05-30  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, add some comments to HKDF/PBKDF2 Mac implementations

        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):

2017-05-30  Jeremy Jones  <jeremyj@apple.com>

        m_resourceSelectionTaskQueue tasks should be cleared when player is destroyed to prevent invalid state.
        https://bugs.webkit.org/show_bug.cgi?id=172726
        rdar://problem/30867764

        Reviewed by Eric Carlson.

        I haven't found a reproducible way to make a test case for this race condition.

        If m_player is cleared while there is an outstanding task in m_resourceSelectionTaskQueue,
        that task may assume m_player is not null and crash. It is better to cancel that task than
        to perform it part way with null checks.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::clearMediaPlayer):

2017-05-30  Ryosuke Niwa  <rniwa@webkit.org>

        Only include DataDetectorsUI headers in iOS
        https://bugs.webkit.org/show_bug.cgi?id=172633

        Reviewed by David Kilzer.

        Enable data detectors only on iOS and not other variants of iOS.

        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        * page/DragController.cpp:
        (WebCore::isDraggableLink):
        * platform/cocoa/DataDetectorsCoreSoftLink.h:
        * platform/cocoa/DataDetectorsCoreSoftLink.mm:
        * platform/spi/cocoa/DataDetectorsCoreSPI.h:
        * platform/spi/ios/DataDetectorsUISPI.h:
        * platform/spi/mac/DataDetectorsSPI.h:

2017-05-30  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r215946): Can't reference a table cell in Google spreadsheet
        https://bugs.webkit.org/show_bug.cgi?id=172703
        <rdar://problem/32458086>

        Reviewed by Ryosuke Niwa.

        We updated getClientRects() to return an array of DOMRect objects instead of
        a ClientRectList type, to match the latest specification. As it turns out, this
        is not Web-compatible as some content (as Google Spreadsheet) relies on the
        return type having an item() operation.

        This patch re-introduces a DOMRectList type, with an item() operation. The
        DOMRectList name is currently not exposed to the Web as we do not know what's
        going to get specified yet (https://github.com/w3c/csswg-drafts/issues/1479).

        No new tests, updated existing tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMRect.h:
        * dom/DOMRectList.cpp: Copied from Source/WebCore/dom/DOMRect.cpp.
        (WebCore::DOMRectList::DOMRectList):
        (WebCore::DOMRectList::~DOMRectList):
        * dom/DOMRectList.h: Copied from Source/WebCore/dom/DOMRect.cpp.
        (WebCore::DOMRectList::create):
        (WebCore::DOMRectList::length):
        (WebCore::DOMRectList::item):
        * dom/DOMRectList.idl: Renamed from Source/WebCore/dom/DOMRect.cpp.
        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Range.cpp:
        (WebCore::Range::getClientRects):
        * dom/Range.h:
        * dom/Range.idl:
        * page/Page.cpp:
        (WebCore::Page::nonFastScrollableRects):
        (WebCore::Page::touchEventRectsForEvent):
        (WebCore::Page::passiveTouchEventListenerRects):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::touchEventRectsForEvent):
        (WebCore::Internals::passiveTouchEventListenerRects):
        (WebCore::Internals::nonFastScrollableRects):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-30  Ali Juma  <ajuma@chromium.org>

        [CredentialManagement] Incorporate IDL updates from latest spec
        https://bugs.webkit.org/show_bug.cgi?id=172011

        Reviewed by Daniel Bates.

        This patch adds IDL definitions for the CredentialsContainer, CredentialsUserData and
        FederatedCredentials interfaces, the NavigatorCredentials partial interface, and the
        CredentialCreationOptions, CredentialRequestOptions, FederatedCredentialRequestOptions,
        and PasswordCredentialData dictionaries. It also deletes IDL definitions for the
        SiteBoundCredential interface and the SiteBoundCredentialData dictionary.

        Test: credentials/idlharness.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/credentials/BasicCredential.idl:
        * Modules/credentials/CredentialCreationOptions.h: Copied from Source/WebCore/Modules/credentials/PasswordCredential.cpp.
        * Modules/credentials/CredentialCreationOptions.idl: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        * Modules/credentials/CredentialRequestOptions.h: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        * Modules/credentials/CredentialRequestOptions.idl: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        * Modules/credentials/CredentialUserData.h: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        (WebCore::CredentialUserData::~CredentialUserData):
        * Modules/credentials/CredentialUserData.idl: Copied from Source/WebCore/Modules/credentials/SiteBoundCredential.idl.
        * Modules/credentials/CredentialsContainer.cpp: Copied from Source/WebCore/Modules/credentials/PasswordCredential.cpp.
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::store):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::preventSilentAccess):
        * Modules/credentials/CredentialsContainer.h: Copied from Source/WebCore/Modules/credentials/SiteBoundCredential.h.
        (WebCore::CredentialsContainer::create):
        (WebCore::CredentialsContainer::CredentialsContainer):
        * Modules/credentials/CredentialsContainer.idl: Copied from Source/WebCore/Modules/credentials/SiteBoundCredential.idl.
        * Modules/credentials/FederatedCredential.cpp: Copied from Source/WebCore/Modules/credentials/SiteBoundCredential.cpp.
        (WebCore::FederatedCredential::FederatedCredential):
        (WebCore::FederatedCredential::~FederatedCredential):
        * Modules/credentials/FederatedCredential.h: Renamed from Source/WebCore/Modules/credentials/SiteBoundCredential.h.
        (WebCore::FederatedCredential::create):
        (WebCore::FederatedCredential::provider):
        (WebCore::FederatedCredential::protocol):
        * Modules/credentials/FederatedCredential.idl: Copied from Source/WebCore/Modules/credentials/BasicCredential.idl.
        * Modules/credentials/FederatedCredentialInit.h: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        * Modules/credentials/FederatedCredentialInit.idl: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.idl.
        * Modules/credentials/FederatedCredentialRequestOptions.h: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        * Modules/credentials/FederatedCredentialRequestOptions.idl: Added.
        * Modules/credentials/NavigatorCredentials.cpp: Renamed from Source/WebCore/Modules/credentials/SiteBoundCredential.cpp.
        (WebCore::NavigatorCredentials::NavigatorCredentials):
        (WebCore::NavigatorCredentials::~NavigatorCredentials):
        (WebCore::NavigatorCredentials::supplementName):
        (WebCore::NavigatorCredentials::credentials):
        (WebCore::NavigatorCredentials::from):
        * Modules/credentials/NavigatorCredentials.h: Copied from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        * Modules/credentials/NavigatorCredentials.idl: Renamed from Source/WebCore/Modules/credentials/SiteBoundCredential.idl.
        * Modules/credentials/PasswordCredential.cpp:
        (WebCore::PasswordCredential::PasswordCredential):
        (WebCore::PasswordCredential::~PasswordCredential):
        * Modules/credentials/PasswordCredential.h:
        (WebCore::PasswordCredential::create):
        (WebCore::PasswordCredential::password):
        (WebCore::PasswordCredential::setIdName): Deleted.
        (WebCore::PasswordCredential::idName): Deleted.
        (WebCore::PasswordCredential::setPasswordName): Deleted.
        (WebCore::PasswordCredential::passwordName): Deleted.
        (WebCore::PasswordCredential::setAdditionalData): Deleted.
        (WebCore::PasswordCredential::additionalData): Deleted.
        * Modules/credentials/PasswordCredential.idl:
        * Modules/credentials/PasswordCredentialData.h: Renamed from Source/WebCore/Modules/credentials/SiteBoundCredentialData.h.
        * Modules/credentials/PasswordCredentialData.idl: Renamed from Source/WebCore/Modules/credentials/SiteBoundCredentialData.idl.
        * WebCore.xcodeproj/project.pbxproj:

2017-05-30  Alex Christensen  <achristensen@webkit.org>

        Update libwebrtc configuration
        https://bugs.webkit.org/show_bug.cgi?id=172727

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:

2017-05-30  Mark Lam  <mark.lam@apple.com>

        convertEnumerationToJS() should not stash ASCIILiteral strings in NeverDestroyed arrays.
        https://bugs.webkit.org/show_bug.cgi?id=172724
        <rdar://problem/31193201>

        Reviewed by Chris Dumez.

        Use MAKE_STATIC_STRING_IMPL instead, which is guaranteed to be thread-safe and
        satisfies the promise of immortality promised by NeverDestroyed (while ASCIILiteral
        does not always satisfy this promise).

        Also converted the ASSERT in convertEnumerationToJS() to a RELEASE_ASSERT as a
        debugging aid to check if it is ever passed an invalid enumerationValue.

        No new tests because this is a speculative fix for an issue observed in the wild
        whose root cause is not known yet.  This patch also adds a release assert to
        gather more info about the nature of the issue.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumerationImplementationContent):

        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::convertEnumerationToJS):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertEnumerationToJS):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertEnumerationToJS):
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp:
        (WebCore::convertEnumerationToJS):
        - re-baselined these test results.

2017-05-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r216882): No image decoding is needed if the BitmapImage is created with a NativeImage
        https://bugs.webkit.org/show_bug.cgi?id=172670

        Reviewed by Tim Horton.

        Test: fast/images/large-image-webkit-canvas.html

        Check whether the BitmapImage has created an ImageDecoder before trying 
        to decode its image frame.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::shouldUseAsyncDecoding):

2017-05-30  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingVideoSource should not rotate muted frames
        https://bugs.webkit.org/show_bug.cgi?id=172659

        Reviewed by Eric Carlson.

        Test: webrtc/video-rotation.html

        When sending black frames, it is unnecessary to rotate frames.
        Instead, it is better to create frame with the expected width and height.
        Making sure libwebrtc rotated images are not null, as only YUV rotation is supported.

        Adding internals API to test part of that code path.
        Full coverage should be added when mock source is producing YUV images.

        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::applyRotationForOutgoingVideoSources):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::applyRotationForOutgoingVideoSources):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFrames):
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::applyRotationForOutgoingVideoSources):
        (WebCore::Internals::setCameraMediaStreamTrackOrientation):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-30  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed typo correction.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation): I used an extra colon in my comment.

2017-05-30  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r217515): Correct iterator invalidation bug (AGAIN)
        https://bugs.webkit.org/show_bug.cgi?id=172722
        <rdar://problem/32462876>

        Reviewed by Zalan Bujtas.

        Over-enthusiastic clean-up during r217515 re-introduced a bug caused by holding a reference
        to an iterator that gets invalidated while handling the frame navigation. This patch returns
        to the copy/set behavior used prior to r217515. 

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation): Make a copy of the returned value, since
        the iterator will be invalidated during the function call. Then set the copy back in the data
        store with the updated counts.

2017-05-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] TestWebKitAPI: SHOULD NEVER BE REACHED in WebCore::cairoSurfaceSize
        https://bugs.webkit.org/show_bug.cgi?id=172699

        Reviewed by Brent Fulgham.

        Tests: WebCore.BitmapImageEmptyFrameTest in TestWebKitAPI

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::cairoSurfaceSize): Added a case for win32 surface type.

2017-05-30  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE][GSTREAMER_GL] Do not use cairo to copy video textures to an accelerated canvas
        https://bugs.webkit.org/show_bug.cgi?id=172542

        Reviewed by Žan Doberšek.

        When drawing gstreamer-gl video frames into an accelerated canvas, we are currently using cairo to copy
        the video textures into a new texture that will be painted into de destination canvas. While this eases
        the code, it doesn't allow us to control the copy process. This is a problem because in order to use
        gstreamer-gl properly, we will need to perform colorspace transformations during the copy. So, remove
        this cairo copy and use VideoTextureCopierGStreamer instead.

        The usage of VideoTextureCopierGStreamer is pretty much the same than in the webgl case, except that
        no destination texture is provided. For that case, add a custom texture to hold the result that can
        be requested after the copy.

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateGStreamerBase::prepareContextForCairoPaint): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::paintToCairoSurface): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::gstGLDisplay):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::~VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        (WebCore::VideoTextureCopierGStreamer::resultTexture):

2017-05-29  Antti Koivisto  <antti@apple.com>

        Crash on display-contents-replaced-001.html
        https://bugs.webkit.org/show_bug.cgi?id=172596

        Reviewed by Andreas Kling.

        This is crashing because some code can't handle display:contents on form controls. Turns
        out the draft specification tell us to disable it for them in any case.

        See https://drafts.csswg.org/css-display-3/#unbox

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

            For certain HTML elements (replaced elements, form controls) display:contents should
            behave like display:none.
            Also disable it for SVG and MathML elements.

        (WebCore::StyleResolver::adjustRenderStyle):

            Also compute to display:none when there is no associated element (pseudos etc).

2017-05-30  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] RSA-OAEP support
        https://bugs.webkit.org/show_bug.cgi?id=171222

        Reviewed by Michael Catanzaro.

        Add RSA-OAEP support for configurations that use libgcrypt.

        The encryption operation embeds the plain-text data into a data s-expression,
        specifying OAEP as the padding method of choice and also adding information
        about the hash algorithm and any label data. This is then passed to the
        gcry_pk_encrypt() call together with the provided key, returning the enc-val
        s-expression containing the resulting cipher text. That's retrieved from the
        relevant MPI and returned to the caller.

        The decryption operation embeds the cipher-text data into an enc-val
        s-expression, again specifying the hash algorithm and also filling in any
        label data. This is then passed, along with the key, to the gcry_pk_decrypt()
        call. The returned data s-expression contains the decrypted plain-text data
        inside the 'value' MPI, from which this data is extracted and returned to the
        caller.

        No new tests -- the revelant tests are passing and are unskipped, apart from
        the ones using PKSC#8 and SPKI formats.

        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::hashAlgorithmName):
        (WebCore::mpiData):
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):

2017-05-30  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r217546. Address some review comments that I forgot about.

        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        (WebCore::gcryptEncrypt): Use quotations when referencing s-expression names in
        comments to avoid confusion.
        (WebCore::gcryptDecrypt): Ditto.

2017-05-30  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] RSAES-PKCS1-v1_5 support
        https://bugs.webkit.org/show_bug.cgi?id=171219

        Reviewed by Michael Catanzaro.

        Add RSAES-PKCS1-v1_5 support for configurations that use libgcrypt.

        The encryption operation embeds the plain-text data into a data s-expression,
        specifying PKCS#1 as the padding method of choice. That's passed to the
        gcry_pk_encrypt() call together with the specified key. The returned enc-val
        expression contains the 'a' MPI from which the data is extracted and returned.

        The decryption operation goes in reverse -- the cipher-text data is embedded
        into an enc-val s-expression that again also specifies PKCS#1 as the padding
        method. The s-expression is passed to gcry_pk_decrypt() together with the
        specified key. The returned data s-expression contains the decrypted text
        inside the 'value' parameter, so the data is extracted from that and returned
        to the caller.

        No new tests -- the revelant tests are passing and are unskipped, apart from
        the ones using PKCS#8 and SPKI formats.

        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        (WebCore::mpiData):
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):

2017-05-30  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] RSASSA-PKCS1-v1_5 support
        https://bugs.webkit.org/show_bug.cgi?id=171220

        Reviewed by Michael Catanzaro.

        Add RSASSA-PKSC1-V_15 support for configurations that use libgcrypt.

        The signing operation first digests data with the specified hash algorithm.
        That's then embedded in the data s-expression. That's then passed to the
        gcry_pk_sign() call together with the specified key, returning a sig-val
        s-expression containing the signature. The signature data is then retrieved
        from the relevant MPI and returned to the caller.

        The verification operation first digests data with the specified hash
        algorithm. That's then embedded in the data s-expression. A sig-val
        s-expression is constructed, embedding the signature data. The data and
        sig-val s-expressions are passed to the gcry_sexp_verify() call which returns
        the resulting error code. The verification succeeds if the returned value is
        GPG_ERR_NO_ERROR, fails if it's GPG_ERR_BAD_SIGNATURE, or errors out with an
        OperationError otherwise.

        No new tests -- the revelant tests are passing and are unskipped, apart from
        the ones using PKCS#8 and SPKI formats.

        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        (WebCore::hashCryptoDigestAlgorithm):
        (WebCore::hashAlgorithmName):
        (WebCore::mpiData):
        (WebCore::gcryptSign):
        (WebCore::gcryptVerify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):

2017-05-29  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Use the parent box style to adjust RenderStyle for alignment.
        https://bugs.webkit.org/show_bug.cgi?id=172215

        Reviewed by Antti Koivisto.

        The css-flexbox spec defined align-self in terms of the parent
        element, which is what this code did.

        The css-align spec defines these properties in terms of the style of
        the containing box instead, which means display: contents styles
        should not be used for this adjustment, but the parent box style
        instead.

        For example, align-items is defined as:

        > This property specifies the default align-self for all of the boxes
        > (including anonymous boxes) participating in this box’s formatting
        > context.

        Note that the css-align spec was recently updated to align (no pun
        intended) with Gecko, and make the |auto| value compute to itself.
        This patch puts us in a more recent spec than before, but not totally
        up-to-date.

        Tests: imported/w3c/web-platform-tests/css/css-display-3/display-contents-alignment-001.html
               imported/w3c/web-platform-tests/css/css-display-3/display-contents-alignment-002.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::adjustStyleForAlignment):

2017-05-28  Dan Bernstein  <mitz@apple.com>

        [Xcode] ALWAYS_SEARCH_USER_PATHS is set to YES
        https://bugs.webkit.org/show_bug.cgi?id=172691

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Set ALWAYS_SEARCH_USER_PATHS to NO.
        * WebCore.xcodeproj/project.pbxproj: Added DateTimeChooser.h, DateTimeChooserClient.h,
          PerformanceMark.h, PerformanceMeasure.h, SVGUnknownElement.h, and MathMLUnknownElement.h
          to the WebCore target.

2017-05-28  Sam Weinig  <sam@webkit.org>

        [WebIDL] @@iterator should only be accessed once when disambiguating a union type
        https://bugs.webkit.org/show_bug.cgi?id=172684

        Reviewed by Yusuke Suzuki.

        WebIDL specifies that when determining if the value you are converting to a union
        is a sequence, you must get the @@iterator property and, should it exist, use it
        to iterate the sequence. While we correctly accessing the property to make the 
        determination, we were not passing it into the sequence conversion code, and thus
        the sequence conversion code re-accessed it, which is observable and wrong.

        This patch pipes the @@iterator method through the sequence conversion code to avoid
        this.

        Test: js/dom/sequence-in-union-iterator-access.html

        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::Detail::GenericSequenceConverter::convert):
        (WebCore::Detail::NumericSequenceConverter::convertArray):
        (WebCore::Detail::NumericSequenceConverter::convert):
        (WebCore::Detail::SequenceConverter::convertArray):
        (WebCore::Detail::SequenceConverter::convert):
        (WebCore::Detail::SequenceConverter<IDLLong>::convert):
        (WebCore::Detail::SequenceConverter<IDLFloat>::convert):
        (WebCore::Detail::SequenceConverter<IDLUnrestrictedFloat>::convert):
        (WebCore::Detail::SequenceConverter<IDLDouble>::convert):
        (WebCore::Detail::SequenceConverter<IDLUnrestrictedDouble>::convert):
        (WebCore::Converter<IDLSequence<T>>::convert):
        (WebCore::Converter<IDLFrozenArray<T>>::convert):
        Add variants of convert that take a JSObject* (sequence) / JSValue (iterator method)
        rather than just the JSValue (sequence). To avoid too much duplication, split some
        parts of SequenceConverter and NumericSequenceConverter up so they could be reused.

        * bindings/js/JSDOMConvertUnion.h:
        - Fix incorrect step 3 (WebIDL got updated at some point and we didn't notice) to remove
          records.
        - Update sequence and FrozenArray checking/conversion to get the iterator method and pass
          it along, using the new ConditionalSequenceConverter helper which forwards to the new
          sequence converters that accept the iterator method.

2017-05-27  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/html/semantics/forms/form-control-infrastructure/form_attribute.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=172472
        <rdar://problem/32334831>

        Reviewed by Ryosuke Niwa.

        Fix assertion hit when running imported/w3c/web-platform-tests/html/semantics/forms/form-control-infrastructure/form_attribute.html.

        When the form was removed from the document, A descendant would try to find a new form owner in the document. If the descendant had 
        a form content attribute and there was another form in the document with this ID, then we would erroneously associate the descendant with
        that other form, even though that descendant is being disconnected. This is because when the form with the given id is removed, we
        notify the IdTargetObservers of the change. In this case, the form control is an IdTargetObserver and gets notified after
        removedFrom() has been called on the form but *before* removedFrom() has been called on its descendant form control. As a result, the
        form control still thinks it is in the tree (i.e. isConnected() wrongly returns true) and we make the wrong decision and try to
        associate it with another form in the document.

        To address the problem, we leverage the fact that when a form element is being removed, it already notifies its associated form
        controls that it is being removed. When it does, we make sure to clear the control's id observer if the form is its ancestor.
        The ID observer is no longer needed beyond this point since the control is now disconnected from the document, and the ID observer
        callback would erroneously associate it with another form element in the document of the same ID because isConnected() still returns
        true at that point.
        As a result, the control's form owner is kept unchanged, which is the right thing to do here, since it is its ancestor, even
        though both are detached.

        Test: fast/dom/HTMLFormElement/form-removal-duplicate-id-crash.html

        * dom/ContainerNode.h:
        (WebCore::Node::rootNode):
        Inline rootNode to avoid an extra function call in the fast path case. For the slow path, we now
        call traverseToRootNode() to avoid duolicating logic.

        * dom/Node.cpp:
        (WebCore::Node::traverseToRootNode):
        Add a traverseToRootNode() method which gets the root node by traversing the ancestors. This logic was duplicated in 3 places:
        - Slow path in Node::rootNode()
        - computeRootNode() in FormAssociatedElement.cpp
        - findRoot() in HTMLFormElement.cpp
        They are now consolidated in a single place to avoid duplication.

        * dom/Node.h:
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::removedFrom):
        Just simplify the logic a bit:
        - Clear the id observer (i.e. m_formAttributeTargetObserver) no matter what. Since the element is no longer part of the document,
          it is no longer needed. We would previously have checks that would basically avoid resetting m_formAttributeTargetObserver to
          null if it is already null. Settign m_formAttributeTargetObserver to null is cheap so there is no reason for those checks. Those
          checks were also confusing because they made it look like we would sometimes keep on id observer after being removed from the
          document.
        - Use new traverseToRootNode() utility function (no behavior change)
        - Drop unnecessary |element| local variable

        (WebCore::FormAssociatedElement::formOwnerRemovedFromTree):
        - Rename to formOwnerRemovedFromTree() to make it clear that it is the element's form owner that is removed, and not just any form.
        - As we traverse the tree up to find the root, also check if we find the form owner. If we do, clear the id observer since we are
          effectively detached from the document and return early since there is no need to reset our form owner in this case.

        * html/FormAssociatedElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::removedFrom):
        - Use new traverseToRootNode() utility function (no behavior change)

2017-05-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DOMJIT] Move DOMJIT patchpoint infrastructure out of domjit
        https://bugs.webkit.org/show_bug.cgi?id=172260

        Reviewed by Filip Pizlo.

        * ForwardingHeaders/jit/Snippet.h: Renamed from Source/WebCore/ForwardingHeaders/domjit/DOMJITPatchpoint.h.
        * ForwardingHeaders/jit/SnippetParams.h: Renamed from Source/WebCore/ForwardingHeaders/domjit/DOMJITPatchpointParams.h.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * domjit/DOMJITCheckDOM.h:
        (WebCore::DOMJIT::checkDOM):
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::toWrapper):
        * domjit/JSDocumentDOMJIT.cpp:
        (WebCore::checkSubClassSnippetForJSDocument):
        (WebCore::DocumentDocumentElementDOMJIT::callDOMGetter):
        (WebCore::DocumentBodyDOMJIT::callDOMGetter):
        (WebCore::checkSubClassPatchpointForJSDocument): Deleted.
        * domjit/JSDocumentFragmentDOMJIT.cpp:
        (WebCore::checkSubClassSnippetForJSDocumentFragment):
        (WebCore::checkSubClassPatchpointForJSDocumentFragment): Deleted.
        * domjit/JSElementDOMJIT.cpp:
        (WebCore::checkSubClassSnippetForJSElement):
        (WebCore::checkSubClassPatchpointForJSElement): Deleted.
        * domjit/JSEventDOMJIT.cpp:
        (WebCore::checkSubClassSnippetForJSEvent):
        (WebCore::checkSubClassPatchpointForJSEvent): Deleted.
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::checkSubClassSnippetForJSNode):
        (WebCore::createCallDOMGetterForOffsetAccess):
        (WebCore::NodeFirstChildDOMJIT::callDOMGetter):
        (WebCore::NodeLastChildDOMJIT::callDOMGetter):
        (WebCore::NodeNextSiblingDOMJIT::callDOMGetter):
        (WebCore::NodePreviousSiblingDOMJIT::callDOMGetter):
        (WebCore::NodeParentNodeDOMJIT::callDOMGetter):
        (WebCore::NodeNodeTypeDOMJIT::callDOMGetter):
        (WebCore::NodeOwnerDocumentDOMJIT::callDOMGetter):
        (WebCore::checkSubClassPatchpointForJSNode): Deleted.

2017-05-26  Simon Fraser  <simon.fraser@apple.com>

        getComputedStyle returns percentage values for left / right / top / bottom
        https://bugs.webkit.org/show_bug.cgi?id=29084

        Reviewed by Zalan Bujtas.
        
        Fix getComputedStyle() to return pixel values for left / right / top / bottom, per spec.

        This is mostly a merge of https://codereview.chromium.org/13871003/.

        Behavior now matches Chrome and Firefox.

        Test: fast/css/getComputedStyle/getComputedStyle-offsets.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getOffsetComputedLength):
        (WebCore::getOffsetUsedStyleRelative):
        (WebCore::getOffsetUsedStyleAbsolute):
        (WebCore::positionOffsetValue):
        (WebCore::positionOffsetValueIsRendererDependent):
        (WebCore::isNonReplacedInline):
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):

2017-05-27  Zalan Bujtas  <zalan@apple.com>

        enclosingIntRect returns a rect with -1 width/height when the input FloatRect overflows integer.
        https://bugs.webkit.org/show_bug.cgi?id=172676

        Reviewed by Simon Fraser.

        Clamp integer values soon after the enclosing rectangle is resolved.

        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosingIntRect):

2017-05-26  Joseph Pecoraro  <pecoraro@apple.com>

        Simply some NSNumber usage
        https://bugs.webkit.org/show_bug.cgi?id=172677

        Reviewed by Sam Weinig.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _addAccessibilityObject:toTextMarkerArray:]):
        (AXAttributeStringSetFont):
        (AXAttributeStringSetStyle):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        (AXAttributeStringSetSpelling):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::levelIndicatorFor):

2017-05-26  Youenn Fablet  <youenn@apple.com>

        WebRTC stats should be in milliseconds
        https://bugs.webkit.org/show_bug.cgi?id=172644

        Reviewed by Eric Carlson.

        Covered by updated tests.

        * Modules/mediastream/RTCStatsReport.h:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fillRTCStats):

2017-05-26  Sam Weinig  <sam@webkit.org>

        [WebIDL] Overloaded functions should throw this object check exception before argument check exception
        https://bugs.webkit.org/show_bug.cgi?id=172480

        Reviewed by Chris Dumez.

        - Codifies naming for both parts of the operation/attribute function implementation:
          - The 'trampoline' which is the actual host function and simply calls IDLOperation,
            IDLOperationReturningPromise or IDLAttribute.
          - The 'body' which is where argument checking and calling into the implementation
            takes place.
        - Made it so all operations, including static ones, use the trampoline / body model,
          simplifying code generation. The one exception is for overloaded operations, which
          now have a trampoline and body for the dispatcher, and only bodies for all the 
          overloads. This is what fixes the bug, since now that the dispatcher has a trampoline,
          it can do the correct this object checking via IDLOperation / IDLOperationReturningPromise.
        - Split out code generation for trampoline and body into separate subroutines and 
          simplified their implementations.
        - Changed GenerateOverloadDispatcher to only generate the body of the function, leaving it
          up to the caller to generate the signature, braces and conditionals if needed.
        - Made more subroutines take an output array and indent, in support of future endeavors
          that will need that support.
        - Remove unnecessary #includes of <runtime/Error.h>, which gets included already by virtue
          of JSDOMExceptionHandling.h

        Test: js/dom/overloaded-operation-exception-order.html

        * bindings/js/JSDOMOperation.h:
        * bindings/js/JSDOMOperationReturningPromise.h:
        Add no-op static versions of the bouncer functions.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateOverloadDispatcher):
        (GenerateOperationTrampolineDefinition):
        (GenerateOperationBodyDefinition):
        (GenerateOperationDefinition):
        (GenerateSerializerDefinition):
        (GenerateLegacyCallerDefinitions):
        (GenerateLegacyCallerDefinition):
        (GenerateArgumentsCountCheck):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (GenerateImplementationCustomFunctionCall):
        (GenerateConstructorDefinitions):
        (GenerateConstructorDefinition):

        * 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/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/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/JSTestNamedConstructor.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/JSTestPromiseRejectionEvent.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/JSTestTypedefs.cpp:
        Update test results.

2017-05-26  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Address thread safety issues with ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=172519
        <rdar://problem/31707642>

        Reviewed by Chris Dumez.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setStatisticsQueue): Added.
        (WebCore::ResourceLoadObserver::clearInMemoryStore): Only interact with the HashTable on the statistics queue.
        (WebCore::ResourceLoadObserver::clearInMemoryAndPersistentStore): Ditto.
        (WebCore::ResourceLoadObserver::logFrameNavigation): Ditto.
        (WebCore::ResourceLoadObserver::logSubresourceLoading): Ditto.
        (WebCore::ResourceLoadObserver::logWebSocketLoading): Ditto.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution): Ditto.
        (WebCore::ResourceLoadObserver::logUserInteraction): Ditto.
        (WebCore::ResourceLoadObserver::clearUserInteraction): Protect HashTable while reading.
        (WebCore::ResourceLoadObserver::hasHadUserInteraction): Ditto.
        (WebCore::ResourceLoadObserver::setPrevalentResource): Ditto.
        (WebCore::ResourceLoadObserver::isPrevalentResource): Ditto.
        (WebCore::ResourceLoadObserver::clearPrevalentResource): Ditto.
        (WebCore::ResourceLoadObserver::setGrandfathered): Ditto.
        (WebCore::ResourceLoadObserver::isGrandfathered): Ditto.
        (WebCore::ResourceLoadObserver::setSubframeUnderTopFrameOrigin): Only interact with the HashTable on the statistics queue.
        (WebCore::ResourceLoadObserver::setSubresourceUnderTopFrameOrigin): Ditto.
        (WebCore::ResourceLoadObserver::setSubresourceUniqueRedirectTo): Ditto.
        (WebCore::ResourceLoadObserver::fireDataModificationHandler): ASSERT this is only called from the main thread, since this is
        only meant to be used as part of the testing harness.
        (WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler): Ditto.
        (WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler): Ditto.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::isPrevalentResource): Protect HashTable while using it.
        (WebCore::ResourceLoadStatisticsStore::ensureResourceStatisticsForPrimaryDomain): Ditto.
        (WebCore::ResourceLoadStatisticsStore::setResourceStatisticsForPrimaryDomain): Ditto.
        (WebCore::ResourceLoadStatisticsStore::createEncoderFromData): ASSERT this isn't being done on the main thread, and
        protect HashTable while using it.
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder): Ditto.
        (WebCore::ResourceLoadStatisticsStore::clearInMemory): Ditto.
        (WebCore::ResourceLoadStatisticsStore::clearInMemoryAndPersistent): Ditto.
        (WebCore::ResourceLoadStatisticsStore::statisticsForOrigin): Protect HashTable while using it.
        (WebCore::ResourceLoadStatisticsStore::takeStatistics): Ditto.
        (WebCore::ResourceLoadStatisticsStore::mergeStatistics): Ditto.
        (WebCore::ResourceLoadStatisticsStore::setNotificationCallback): Use WTF::Function.
        (WebCore::ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback): Ditto.
        (WebCore::ResourceLoadStatisticsStore::setWritePersistentStoreCallback): Ditto.
        (WebCore::ResourceLoadStatisticsStore::setGrandfatherExistingWebsiteDataCallback): Ditto.
        (WebCore::ResourceLoadStatisticsStore::fireDataModificationHandler): ASSERT this is not called on the main thread,
        but dispatch the registered handler on the main thread.
        (WebCore::ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler): Ditto.
        (WebCore::ResourceLoadStatisticsStore::processStatistics): ASSERT this isn't being done on the main thread, and
        protect the HashTable while using it. Also switch to WTF::Function.
        (WebCore::ResourceLoadStatisticsStore::hasHadRecentUserInteraction): Make const correct.
        (WebCore::ResourceLoadStatisticsStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor): Protect HashTable while using it.
        (WebCore::ResourceLoadStatisticsStore::updateStatisticsForRemovedDataRecords): Ditto.
        (WebCore::ResourceLoadStatisticsStore::handleFreshStartWithEmptyOrNoStore): Ditto.
        (WebCore::ResourceLoadStatisticsStore::shouldRemoveDataRecords): Make const correct. ASSERT this is not being called
        on the main thread.
        (WebCore::ResourceLoadStatisticsStore::dataRecordsBeingRemoved): ASSERT this is not being called on the main thread.
        (WebCore::ResourceLoadStatisticsStore::dataRecordsWereRemoved): Ditto.
        (WebCore::ResourceLoadStatisticsStore::statisticsLock): Added.
        * loader/ResourceLoadStatisticsStore.h:

2017-05-26  Joseph Pecoraro  <pecoraro@apple.com>

        JSContext Inspector: Improve the reliability of automatically pausing in auto-attach
        https://bugs.webkit.org/show_bug.cgi?id=172664
        <rdar://problem/32362933>

        Reviewed by Matt Baker.

        * inspector/InspectorController.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        * page/PageDebuggable.h:
        Pass an immediatelyPause boolean on to the controller.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectAllFrontends):
        Manage should immediately pause state.

        (WebCore::InspectorController::frontendInitialized):
        When initialized, trigger a pause if requested.

2017-05-26  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Consolidate CMake code related to FreeType
        https://bugs.webkit.org/show_bug.cgi?id=172656

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * platform/FreeType.cmake: Added.

2017-05-26  Sam Weinig  <sam@webkit.org>

        [WebIDL] Another bindings cleanup pass, this time focusing on attributes
        https://bugs.webkit.org/show_bug.cgi?id=172619

        Reviewed by Chris Dumez.

        - Moved attribute getter / setter generation into their own subroutines.
        - As was done for operations, moved trampoline functions for attributes
          below their implementation functions to avoid unseemly forward declaration.
        - Changed to place the getter and setter for an attribute next to each other,
          rather than having all the getters and then all the setters.
        - Moved JSFoo::getConstructor and JSFoo::getNamedConstructor up to be with other
          member functions.
        - Fix an issue where we were generating a setJSFooConstructor function and not
          installing it anywhere. Now we always generate either both the getter and setter
          or neither for the constructor property. Also moved their definition to just above
          all the attributes, rather than the odd placements of between the getters and
          setters which is where they had been.
        - Made InstanceNeedsVisitChildren a complete answer, rather than relying on some
          loop of the attributes to update needsVisitChildren bit.
        - Move use of passing conditionals when adding headers.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceNeedsVisitChildren):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateAttributeGetterDefinition):
        (GenerateAttributeSetterDefinition):
        (NeedsConstructorProperty):

        * 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/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/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/JSTestNamedConstructor.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/JSTestPromiseRejectionEvent.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/JSTestTypedefs.cpp:
        Update test results.

2017-05-26  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Wrap CODE_GENERATOR_PREPROCESSOR_EXECUTABLE on Windows hosts
        https://bugs.webkit.org/show_bug.cgi?id=172553

        Reviewed by Brent Fulgham.

        No new tests. No change in behavior.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor): Use shellwords() instead of splitting
        preprocessor command by space. Combine it back in open3() call on
        Windows to work around Cygwin-specific issue.

2017-05-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the build using the latest SDK

        Add deprecation guards around newly introduced (and deprecated) SPI.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]):

2017-05-26  Beth Dakin  <bdakin@apple.com>

        Media documents inside iframes should not get controls in the TouchBar unless the 
        video is playing
        https://bugs.webkit.org/show_bug.cgi?id=172620
        -and corresponding-
        rdar://problem/32165477

        Reviewed by Jon Lee.

        Media documents get to return early with true, but that should only apply to 
        mainframe media documents. 
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager):

2017-05-26  Youenn Fablet  <youenn@apple.com>

        Minor clean-up related to DocumentThreadableLoader redirections
        https://bugs.webkit.org/show_bug.cgi?id=172647

        Reviewed by Chris Dumez.

        No change of behavior.

        Decrementing m_options redirect count directly instead of using an
        additional counter.

        To compare whether two URLs are same-origin, use scheme+host+port check
        as per the spec.
        This is fine as only the initial origin may have specific rules and we
        are using the scheme+host+port checks when already being gone to
        another origin.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        * loader/DocumentThreadableLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):

2017-05-26  Youenn Fablet  <youenn@apple.com>

        Fix memory leaks in MediaSampleAVFObjC::create
        https://bugs.webkit.org/show_bug.cgi?id=172600

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::createImageSample):

2017-05-26  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Add support for orthogonal positioned grid items
        https://bugs.webkit.org/show_bug.cgi?id=172591

        Reviewed by Sergio Villar Senin.

        This patch adds support for positioned grid items with orthogonal flows.
        Basically it just needs to check if the item is orthogonal to use
        the column or row offset as logical left or top depending on the case.

        Tests: imported/w3c/web-platform-tests/css/css-grid-1/abspos/orthogonal-positioned-grid-items-***.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutPositionedObject):

2017-05-25  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Don't reset m_hasDisplayContents on ElementRareData::resetComputedStyle.
        https://bugs.webkit.org/show_bug.cgi?id=172503

        Reviewed by Antti Koivisto.

        We use that bit of information to determine whether we need to tear
        down the renderers of a display: contents subtree, so better for it to
        not change until the render tree is updated.

        In practice, we may want to remove that bit and use ElementRareData's
        RenderStyle instead (keeping it around as appropriate), to ensure they
        don't go out of sync, but that's out of scope of this patch for now.

        Tests: imported/w3c/web-platform-tests/css/css-display-3

        * dom/ElementRareData.h:
        (WebCore::ElementRareData::resetComputedStyle):

2017-05-25  Sam Weinig  <sam@webkit.org>

        Fix MediaDeviceInfo's extended attributes so they make sense
        https://bugs.webkit.org/show_bug.cgi?id=172629

        Reviewed by Daniel Bates.

        MediaDeviceInfo.idl had both a Constructor and NoInterfaceObject, which
        doesn't really make sense. Either way, the spec says it should have 
        neither, so remove both. And, while were there, add missing serializer.

        Test: fast/mediastream/media-device-info.html

        * Modules/mediastream/MediaDeviceInfo.idl:

2017-05-25  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/html/semantics/forms/form-control-infrastructure/form_owner_and_table_2.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=172628
        <rdar://problem/32418707>

        Reviewed by Sam Weinig.

        In the event where a form is removed synchronously by a script during parsing,
        FormAssociatedElement::m_formSetByParser may end up referring to a form that
        is no longer in the document. As a result, we should make sure m_formSetByParser
        is still connected in FormAssociatedElement::insertedInto() before we call
        FormAssociatedElement::setForm(m_formSetByParser).

        Test: fast/dom/HTMLFormElement/form-removed-during-parsing-crash.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedInto):

2017-05-25  Zalan Bujtas  <zalan@apple.com>

        Frame's composited content is visible when the frame has visibility: hidden.
        https://bugs.webkit.org/show_bug.cgi?id=125565
        <rdar://problem/32196849>

        Reviewed by Simon Fraser.

        Do not construct composited layers for hidden RenderWidgets (frameset, iframe, object).
        Note that we still construct layers for the associated renderers as usual. 

        Tests: compositing/visibility/frameset-visibility-hidden.html
               compositing/visibility/iframe-visibility-hidden.html
               compositing/visibility/object-visibility-hidden.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):

2017-05-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix in GTK and WPE ports
        https://bugs.webkit.org/show_bug.cgi?id=172580

        Missing RenderSVGResourceMode declaration in SVGInlineTextBox.h.

        * rendering/svg/SVGInlineTextBox.h:

2017-05-25  Simon Fraser  <simon.fraser@apple.com>

        Use a typedef for SVG resource mode flags union
        https://bugs.webkit.org/show_bug.cgi?id=172580

        Reviewed by Sam Weinig.

        Use an OptionSet<> for RenderSVGResourceModes flags, and use it in render
        SVG resource classes.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        (WebCore::RenderSVGResource::fillPaintingResource):
        (WebCore::RenderSVGResource::strokePaintingResource):
        * rendering/svg/RenderSVGResource.h:
        (WebCore::RenderSVGResource::postApplyResource):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::fillShape):
        (WebCore::RenderSVGShape::strokeShape):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::acquirePaintingResource):
        (WebCore::SVGInlineTextBox::releasePaintingResource):
        (WebCore::SVGInlineTextBox::paintDecoration):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer): Avoid needless IntPoint -> LayoutPoint
        conversion.

2017-05-25  Chris Dumez  <cdumez@apple.com>

        Regression(r215686): Videos sometimes do not load in iBooks
        https://bugs.webkit.org/show_bug.cgi?id=172604
        <rdar://problem/32003717>

        Reviewed by Geoffrey Garen.

        Before r215686, the loop would have a check at the beginning to check if the
        dataRequest's currentOffset was greater than the buffer length and would
        cause the function to return early.

        This check was dropped in r215686, which caused us in some cases to call
        finishLoading / stopLoading() after the loop, even though we did not have
        enough data in the buffer to satisfy the data request.

        To address the issue, we now return early after the loop if remainingLength
        is greater than 0, meaning that we could not satisfy the request. This makes
        sure we do not call finishLoading / stopLoading() prematurely.

        Note that before r215686, the condition of the while loop was 
        "while (remainingLength)" so the only way to get out of the loop was to:
        1. Get remainingLength to 0, in which case we would fall through and
           potentially call finishLoading / stopLoading() after the loop.
        2. Fail the "(data->size() <= [dataRequest currentOffset] - responseOffset)"
           check at the beginning of the loop, meaning that we ran out of data in
           the buffer. This would cause us to return from the function, not fall
           through, so we would not call finishLoading / stopLoading().

        No new tests, I do not know how to write a test for this.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):

2017-05-25  Sam Weinig  <sam@webkit.org>

        [WebIDL] Use the term 'operation' more consistently
        https://bugs.webkit.org/show_bug.cgi?id=172601

        Reviewed by Chris Dumez.

        We were using the term 'operation', a WebIDL term for function-like
        constructs, inconsistently in the code generator. Now, when we use
        'operation' when referring to the IDL concept (usually the object the
        parser produces) and 'function' when referring to code being generated.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/generate-bindings.pl:

2017-05-25  Jer Noble  <jer.noble@apple.com>

        System sleeps while playing to wireless target, ending stream.
        https://bugs.webkit.org/show_bug.cgi?id=172541

        Reviewed by Eric Carlson.

        API test: Tests/mac/MediaPlaybackSleepAssertion.mm

        Keep the system from sleeping (but allow the display to sleep) while playing media to a wireless target.

        Give the SleepDisabler a Type, either System or Display, which indicates what kind of sleep to disable.
        Update HTMLMediaElement::shouldDisableSleep() to differentiate between a video which is playing locally,
        one that is playing but not visible, and one that is playing remotely.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::HTMLMediaElement::updateSleepDisabling):
        (WebCore::HTMLMediaElement::shouldDisableSleep):
        * html/HTMLMediaElement.h:
        * platform/SleepDisabler.cpp:
        (WebCore::SleepDisabler::create):
        (WebCore::SleepDisabler::SleepDisabler):
        * platform/SleepDisabler.h:
        (WebCore::SleepDisabler::type):
        * platform/cocoa/SleepDisablerCocoa.cpp:
        (WebCore::SleepDisabler::create):
        (WebCore::SleepDisablerCocoa::SleepDisablerCocoa):
        (WebCore::SleepDisablerCocoa::~SleepDisablerCocoa):
        * platform/cocoa/SleepDisablerCocoa.h:
        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController updatePowerAssertions]):
        * platform/spi/cocoa/IOPMLibSPI.h:

2017-05-25  Chris Dumez  <cdumez@apple.com>

        DocumentThreadableLoader::redirectReceived() should not rely on the resource's loader
        https://bugs.webkit.org/show_bug.cgi?id=172578
        <rdar://problem/30754582>

        Reviewed by Youenn Fablet.

        DocumentThreadableLoader::redirectReceived() should not rely on the resource's loader. The rest of the methods do not.
        It is unsafe for it to rely on the resource's loader because it gets cleared when the load completes. A CachedRawresource
        may be reused from the memory cache once its load has completed.

        This would cause crashes in CachedRawResource::didAddClient() when replaying the redirects because it would call
        DocumentThreadableLoader::redirectReceived() and potentially not have a loader anymore. To hit this exact code path,
        you would need to make repeated XHR to a cacheable simple cross-origin resource that has cacheable redirect.

        Test: http/tests/xmlhttprequest/cacheable-cross-origin-redirect-crash.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        * loader/DocumentThreadableLoader.h:

2017-05-25  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: !needsStyleRecalc() || !document().childNeedsStyleRecalc()
        https://bugs.webkit.org/show_bug.cgi?id=172576
        <rdar://problem/32181979>

        Reviewed by Brent Fulgham.

        Ensure that we clean the subframe's document before start searching for a focusable element.

        Covered by existing test.

        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusableElementDescendingDownIntoFrameDocument):

2017-05-24  Jiewen Tan  <jiewen_tan@apple.com>

        Crash on WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance + 1195
        https://bugs.webkit.org/show_bug.cgi?id=172555
        <rdar://problem/32004724>

        Reviewed by Ryosuke Niwa.

        setSelectionWithoutUpdatingAppearance could dispatch a synchronous focusin event,
        which could invoke an event handler that deteles the frame. Therefore, add a
        protector before the call.

        Test: editing/selection/select-iframe-focusin-document-crash.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):

2017-05-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Ensure ImageFrameCache does not access its BitmapImage after it is deleted
        https://bugs.webkit.org/show_bug.cgi?id=172563

        Reviewed by Simon Fraser.

        A crash may happen if the BitmapImage is deleted while the decoding thread
        is still active. Once the current frame finishes decoding, the decoding
        thread will make a callOnMainThread() which will access the deleted BitmapImage.

        We need to ensure if BitmapImage is deleted, the raw pointer which references
        it in ImageFrameCache is cleared. If this is done, nothing else is needed.
        All all the accesses to container BitmapImage in ImageFrameCache are guarded
        by checking m_image is not null.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::~BitmapImage): Make sure the decoding thread will
        not have access to the deleted BitmapImage when it finishes decoding and
        make its callOnMainThread().
        (WebCore::BitmapImage::destroyDecodedData): Use the function new name.
        (WebCore::BitmapImage::internalStartAnimation): Ditto.
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::startAsyncDecodingQueue): Protect the sourceURL
        for the decoding thread. ImageFrameCache::sourceURL() checks for the value
        of m_image which now may change from the main thread.
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::clearImage): Add a new function to clear the 
        raw pointer m_image when its is deleted.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::resetData): Rename clear() to resetData() for better
        code readability. This function deletes the ImageDecoder and creates a new
        one if data is not null. The purpose is to delete the decoder raster data.
        (WebCore::ImageSource::clear): Deleted.
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::clearImage): Wrapper for the ImageFrameCache function.

2017-05-25  youenn fablet  <youenn@apple.com>

        Add some release logging for media elements
        https://bugs.webkit.org/show_bug.cgi?id=172581

        Reviewed by Eric Carlson.

        No change of behavior.

         Adding logging for getUserMedia, video autoplay and incoming/outgoing webrtc video tracks.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::deny):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):
        * platform/Logging.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::OnFrame):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendOneBlackFrame):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

2017-05-25  Sam Weinig  <sam@webkit.org>

        [WebIDL] Do a pass of cleanup in the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=172566

        Reviewed by Chris Dumez.

        - Split JSDOMBindingCaller.h into four new files to allow for less 
          header inclusion (one includes a bunch of promise stuff that usually
          isn't needed): 
            - JSDOMCastedThisErrorBehavior (with shared casting enum)
            - JSDOMAttribute (for attribute getting / setting)
            - JSDOMOperation (for normal operations)
            - JSDOMOperationReturningPromise (for operations returning promises, obviously).

          In addition to separating the files, rename to be more consistent with modern
          bindings conventions (new classes are IDLAttribute, IDLOperation, and 
          IDLOperationReturningPromise) and simplify function names
            - 'callOperation' becomes 'call'
            - 'attribute' becomes 'get'
            - 'setAttribute' becomes 'set'

        - Remove extra generated trampoline function for operations returning promises
          by making JSDOMOperationReturningPromise handle all the promise related overhead.

        - Make [Custom] operations returning promises go through the normal IDLOperationReturningPromise
          code path (simplifying JSReadableStreamSource and JSSubtleCrypto). Added [ReturnsOwnPromise]
          extended attribute to allow some functions that want to retain specialized behavior to do so

        - Swap order of trampoline and implementation of operation, to avoid the need for
          a forward declaration and make reading more straightforward.

        * WebCore.xcodeproj/project.pbxproj:
        Add / remove files.

        * bindings/js/JSDOMBindingCaller.h: Removed.

        * bindings/js/JSDOMCastedThisErrorBehavior.h: Added.
        Shared header for enum needed by JSDOMAttribute, JSDOMOperation and JSDOMOperationReturningPromise.

        * bindings/js/JSDOMAttribute.h: Added.
        * bindings/js/JSDOMOperation.h: Added.
        * bindings/js/JSDOMOperationReturningPromise.h: Added.
        Split out JSDOMBindingCaller implementations into own classes / files. Simplify
        naming.
    
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::callPromiseFunction):
        Add a variant of callPromiseFunction that takes a lambda.

        * bindings/js/JSEventTargetCustom.h:
        (WebCore::IDLOperation<JSEventTarget>::call):
        Update operation specialization to use new class.

        * bindings/js/JSReadableStreamSourceCustom.cpp:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        Simplify now that the callPromiseFunction is called for us.

        * crypto/WebKitSubtleCrypto.idl:
        * css/FontFace.idl:
        * dom/CustomElementRegistry.idl:
        Add [ReturnsOwnPromise] to retain custom promise behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        Update header generation to account for custom functions that return promises now
        having a Ref<DeferredPromise>&& parameter.

        (GenerateImplementation):
        - Update for new naming of cast functions.
        - Use AddToImplIncludes (and pass in conditional) rather than using $implIncludes
          directly, #includes to be grouped correctly.
        - Remove dead $inAppleCopyright code (it was moved to GenerateOperationDefinition 
          earlier).

        (GenerateOperationDefinition):
        - Use $codeGenerator->IsPromiseType() rather than directly comparing to "Promise" string.
        - Restructure code to allow trampoline (the code that calls IDLOperation) to come after
          the main operation implementation (the part that calls into the impl).
        - Support custom functions returning promises (and the [ReturnsOwnPromise] variant).

        (GenerateImplementationIterableFunctions):
        Update for name change to IDLOperation.

        * bindings/scripts/IDLAttributes.json:
        Add [ReturnsOwnPromise].

        * 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/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/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/JSTestNamedConstructor.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/JSTestPromiseRejectionEvent.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/JSTestTypedefs.cpp:
        Update test results.

        * bindings/scripts/test/TestObj.idl:
        Add additional test cases for operations returning promises.

2017-05-25  Simon Fraser  <simon.fraser@apple.com>

        Some <chrono> and ProgressTracker cleanup
        https://bugs.webkit.org/show_bug.cgi?id=172582

        Reviewed by Sam Weinig.

        Remove some unnecessary <chrono> includes.
        Convert some std::chrono to use MonotonicTime/Seconds.
        Clean up ProgressTracker.
        Some #pragma once.

        * dom/Document.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:
        * page/Settings.h:
        * platform/SearchPopupMenu.h:
        * platform/Timer.h:
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::markOlderSurfacesPurgeable):
        * platform/graphics/cg/IOSurfacePool.h:
        (WebCore::IOSurfacePool::CachedSurfaceDetails::resetLastUseTime):
        * platform/network/PlatformCookieJar.h:

2017-05-25  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Expose doc-footnote ARIA role with ATK_ROLE_FOOTNOTE
        https://bugs.webkit.org/show_bug.cgi?id=172355

        Reviewed by Chris Fleizach.

        Add a new FootnoteRole accessibility role to WebCore and map it to
        ATK_ROLE_FOOTNOTE for WebKitGtk and NSAccessibilityGroupRole with
        a subrole of AXApplicationGroup for the Mac port.

        No new tests because we already have coverage for this role.
        The existing test expectations were updated to reflect the
        new mapping of doc-footnote to ATK_ROLE_FOOTNOTE.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::computedRoleString):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):

2017-05-25  youenn fablet  <youenn@apple.com>

        [macOS WK2 Debug] Layout Test webrtc/video.html is crashing.
        https://bugs.webkit.org/show_bug.cgi?id=172560
        <rdar://problem/32392611>

        Reviewed by Eric Carlson.

        webrtc/multiple-video.html is no longer crashing.

        Allow autoplay only from going to not capture to capture, and not the reverse.
        Renamed HTMLMediaElement::mediaStreamCaptureStateChanged to mediaStreamCaptureStarted.

        * dom/Document.cpp:
        (WebCore::Document::mediaStreamCaptureStateChanged):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaStreamCaptureStateChanged): Deleted.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaStreamCaptureStarted):

2017-05-25  Dave Hyatt  <hyatt@apple.com>

        Baseline of number inputs not right.
        https://bugs.webkit.org/show_bug.cgi?id=172237

        Reviewed by Dean Jackson.

        Added fast/forms/baseline-of-number-inputs.html

        * css/html.css:
        (input::-webkit-inner-spin-button):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::computeLogicalHeightLimit): Deleted.
        (WebCore::RenderSearchField::centerContainerIfNeeded): Deleted.
        * rendering/RenderSearchField.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::centerRenderer):
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::computeLogicalHeightLimit): Deleted.
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlSingleLine::centerContainerIfNeeded): Deleted.

2017-05-25  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Fix behavior of positioned items without specific dimensions
        https://bugs.webkit.org/show_bug.cgi?id=172117

        Reviewed by Sergio Villar Senin.

        Currently positioned items that doesn't have specific dimensions
        are not properly sized. This patch fixes the issues with them.

        The patch removes the extraInline|BlockOffsets from RenderBox,
        so now RenderGrid is responsible of setting the location of the positioned item.
        This will be useful to add alignment support for positioned items later.
        It also removes grid specific logic from RenderBox.

        RenderBox::computeInlineStaticDistance() was modified too.
        The problem here was that the containing block of the positioned gird items
        is the grid area (and not the grid container). The method didn't know
        anything about grid, so it was using the grid container causing wrong values
        when resolving "auto" in both left and right offset properties.

        Note that after this patch we match Chrome and Firefox behavior on these cases.

        Test: fast/css-grid-layout/positioned-grid-items-sizing.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::computeInlineStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        * rendering/RenderBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutPositionedObject):
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):

2017-05-25  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Build fix after r217404

        Unreviewed

        * PlatformWPE.cmake: Include missing cairo cmake file.

2017-05-24  Chris Dumez  <cdumez@apple.com>

        ResourceResponses for data URLs have their Source marked as Unknown
        https://bugs.webkit.org/show_bug.cgi?id=172573
        <rdar://problem/31786198>

        Reviewed by Geoffrey Garen.

        ResourceResponses for data URLs have their Source marked as Unknown.

        Now set their source to Network to maintain previous behavior when
        we used to decode those data URLs on Network process side.

        Test: fast/url/data-url-source.html

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

2017-05-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] An assertion fails if the custom cursor image isn't loaded yet
        https://bugs.webkit.org/show_bug.cgi?id=172209

        Reviewed by Said Abou-Hallawa.

        Test: fast/css/crash-on-custom-cursor-when-loading.html

        A custom cursor image can be zero dimension if it is loading or
        decoding. Cursor::ensurePlatformCursor of Windows port should
        handle such case properly.

        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::ensurePlatformCursor): Load a stock cursor if
        the custom cursor image has zero dimension. Do not do null-check
        of the return value of createSharedCursor() because it never
        returns null.

2017-05-24  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Consolidate CMake code related to Cairo
        https://bugs.webkit.org/show_bug.cgi?id=172568

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * PlatformWinCairo.cmake:
        * config.h:
        * platform/Cairo.cmake: Added.
        * platform/GStreamer.cmake:
        * platform/ImageDecoders.cmake:

2017-05-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r206481): Don't assume frameCount() is larger than or equal to the size of the image frame cache
        https://bugs.webkit.org/show_bug.cgi?id=172552

        Reviewed by Geoffrey Garen.

        If an image with many cached ImageFrames is cached but its encoded data is
        freed, then the same image is reused, the encoded data will be fetched.
        But the initial frameCount() might be less than the current size of the
        ImageFrames cache.

        This was causing an assertion in the debug build and crash in the release
        build. Vector::grow() does not handle the case where the new size is smaller
        than the current size safely.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::growFrames):

2017-05-24  Sergey Shekyan  <shekyan@gmail.com>

        navigator.webdriver should return false if the page is not controlled by automation
        https://bugs.webkit.org/show_bug.cgi?id=171997

        Reviewed by Chris Dumez.

        Per WebDriver Specification at https://www.w3.org/TR/webdriver/#interface

        Test: js/dom/navigator-webdriver.html
        Rebaseled fast/dom/navigator-detached-no-crash.html

        * Modules/webdriver/NavigatorWebDriver.cpp:
        (WebCore::NavigatorWebDriver::NavigatorWebDriver):
        (WebCore::NavigatorWebDriver::isControlledByAutomation):
        (WebCore::NavigatorWebDriver::from):
        (WebCore::NavigatorWebDriver::webdriver):
        (WebCore::JSNavigator::webdriver): Deleted.
        * Modules/webdriver/NavigatorWebDriver.h:
        * Modules/webdriver/NavigatorWebDriver.idl:

2017-05-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, suppress deprecation warnings to fix the build.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::linearRGBColorSpaceRef):

2017-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Plumb additional image metadata to item providers when beginning data interaction on an image
        https://bugs.webkit.org/show_bug.cgi?id=172536
        <rdar://problem/32371300>

        Reviewed by Beth Dakin.

        Plumb suggestedName (the last path component of the image's source URL) and size (the actual size of the image)
        to item providers when beginning data interaction on an image.

        Augments existing unit tests to cover these changes -- see DataInteractionTests.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard):
        * platform/Pasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::writeObjectRepresentations):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList init]):
        (-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]):
        (temporaryFileURLForDataInteractionContent):

2017-05-24  Eric Carlson  <eric.carlson@apple.com>

        CoreAudioCaptureSource is ducking system sound
        https://bugs.webkit.org/show_bug.cgi?id=172512

        Reviewed by Youenn Fablet.

        Manual testing.

        * Configurations/WebCore.xcconfig: Adding CoreAudio as framework for iOS.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::defaultOutputDevice):
        * platform/spi/cf/CoreAudioSPI.h: Added.

2017-05-24  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Change grandfathering default to one hour
        https://bugs.webkit.org/show_bug.cgi?id=172524
        <rdar://problem/32360462>

        Reviewed by Brent Fulgham.

        Covered by existing test.

        * loader/ResourceLoadStatisticsStore.cpp:

2017-05-24  Jer Noble  <jer.noble@apple.com>

        Rename DisplaySleepDisabler -> SleepDisabler
        https://bugs.webkit.org/show_bug.cgi?id=172478

        Reviewed by Sam Weinig.

        Rename DisplaySleepDisabler to SleepDisabler so that different (i.e., non-Display) sleep types can be
        added in a future change.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateSleepDisabling):
        * html/HTMLMediaElement.h:
        * platform/SleepDisabler.cpp: Renamed from Source/WebCore/platform/DisplaySleepDisabler.cpp.
        (WebCore::SleepDisabler::create):
        (WebCore::SleepDisabler::SleepDisabler):
        (WebCore::SleepDisabler::~SleepDisabler):
        * platform/SleepDisabler.h: Renamed from Source/WebCore/platform/DisplaySleepDisabler.h.
        * platform/cocoa/SleepDisablerCocoa.cpp: Renamed from Source/WebCore/platform/cocoa/DisplaySleepDisablerCocoa.cpp.
        (WebCore::SleepDisabler::create):
        (WebCore::SleepDisablerCocoa::SleepDisablerCocoa):
        (WebCore::SleepDisablerCocoa::~SleepDisablerCocoa):
        * platform/cocoa/SleepDisablerCocoa.h: Renamed from Source/WebCore/platform/cocoa/DisplaySleepDisablerCocoa.h.
        * platform/mac/WebVideoFullscreenController.h:
        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController updatePowerAssertions]):
        * CMakeLists.txt:
        * PlatformMac.cmake:
        * WebCore.order:

2017-05-24  Per Arne Vollan  <pvollan@apple.com>

        [Win] Create unique network storage session for each DRT.
        https://bugs.webkit.org/show_bug.cgi?id=172540

        Reviewed by Brent Fulgham.

        During layout testing, each DRT instance should have its own network storage session.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::switchToNewTestingSession):

2017-05-24  Sam Weinig  <sam@webkit.org>

        [WebIDL] Overloaded functions unnecessarily duplicate argument checks
        https://bugs.webkit.org/show_bug.cgi?id=172481

        Reviewed by Chris Dumez.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePropertiesHashTable):
        Update for rename of GetConditionalForFunctionConsideringOverloads.

        (AreTypesDistinguishableForOverloadResolution):
        Remove unnecessary subroutine isDictionary that can be replaced by
        a direct call to $codeGenerator->IsDictionaryType().

        (GetConditionalForFunctionConsideringOverloads):
        Renamed from getConditionalForFunctionConsideringOverloads.

        (GenerateOverloadDispatcher):
        Renamed from GenerateOverloadedFunctionOrConstructor. Moved Constructor/Operation/LegacyCaller
        specific code out, and into parameters.

        (GenerateImplementation):
        Moved operation generation out into its own subroutine.

        (GenerateOperationDefinition): Added.
        Moved from GenerateImplementation.

        (GenerateLegacyCallerDefinitions):
        Pass function name and signature to GenerateOverloadDispatcher.

        (GenerateArgumentsCountCheck):
        Don't generate an argument check if this is an overloaded function. The argument
        checks happen in the overload dispatcher.

        (NeedsExplicitPropagateExceptionCall):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        Replace IsReturningPromise with more direct check.

        (GenerateConstructorDefinitions):
        Pass function name and signature to GenerateOverloadDispatcher.

        (getConditionalForFunctionConsideringOverloads): Renamed to GetConditionalForFunctionConsideringOverloads.
        (GenerateOverloadedFunctionOrConstructor): Renamed to GenerateOverloadDispatcher.
        (IsReturningPromise): Deleted.

        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestInterface.idl:
        Update test results.

2017-05-24  Commit Queue  <commit-queue@webkit.org>

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

        This patch broke iOS Simulator Debug build (Requested by fredw
        on #webkit).

        Reverted changeset:

        "CoreAudioCaptureSource is ducking system sound"
        https://bugs.webkit.org/show_bug.cgi?id=172512
        http://trac.webkit.org/changeset/217319

2017-05-24  Antoine Quint  <graouts@apple.com>

        [mac-wk1] LayoutTest media/modern-media-controls/airplay-button/airplay-button.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=168409

        Unreviewed.

        Remove temporary logging which prevents performance bots from reporting useful data.

        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):

2017-05-24  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Ignore collapsed tracks on content-distribution alignment
        https://bugs.webkit.org/show_bug.cgi?id=172493

        Reviewed by Manuel Rego Casasnovas.

        The CSS Box Alignment spec states that we should ignore the collapsed
        tracks when computing the Distribution Alignment space to assign to the
        different grid tracks.

        No new tests, just unskipping the web-platform-tests imported to verify this use case.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::populateGridPositionsForDirection):

2017-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Respect image UTIs when writing to item providers when beginning data interaction on an image
        https://bugs.webkit.org/show_bug.cgi?id=172436
        <rdar://problem/31786569>

        Reviewed by Beth Dakin.

        Previously, when beginning writing images to the WebItemProviderPasteboard, we would create a new UIImage and
        use standard UIImage UIItemProviderWriting utilities to register the image to the pasteboard. This is lossy for
        gifs, since UIImage doesn't inherently know how to represent gifs. Instead, register the raw image data directly
        to the UTI type corresponding to the MIME type of the image, and use UIImage's item provider writing capability
        as a fallback when the raw resourceData is unavailable.

        Augments existing unit tests, and also adds a new unit test:
        DataInteractionTests.ImageDoesNotUseElementSizeAsEstimatedSize

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

2017-05-23  Eric Carlson  <eric.carlson@apple.com>

        CoreAudioCaptureSource is ducking system sound
        https://bugs.webkit.org/show_bug.cgi?id=172512

        Reviewed by Youenn Fablet.

        Manual testing.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::defaultOutputDevice):

2017-05-23  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] Speculative fix for a PLT regression
        <rdar://problem/32361890>

        Unreviewed.

        Make sure CGImageSourceGetTypeWithData() is called with a buffer which is
        32 bytes or more.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::ImageDecoder):

2017-05-22  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Support RSA-PSS
        https://bugs.webkit.org/show_bug.cgi?id=170869
        <rdar://problem/31640672>

        Reviewed by Brent Fulgham.

        This patch implements RSA-PSS according to the spec: https://www.w3.org/TR/WebCryptoAPI/#rsa-pss.
        Supported operations include sign, verify, generateKey, importKey and exportKey.

        Tests: crypto/subtle/rsa-pss-generate-export-key-jwk-sha1.html
               crypto/subtle/rsa-pss-generate-export-key-jwk-sha224.html
               crypto/subtle/rsa-pss-generate-export-key-jwk-sha256.html
               crypto/subtle/rsa-pss-generate-export-key-jwk-sha384.html
               crypto/subtle/rsa-pss-generate-export-key-jwk-sha512.html
               crypto/subtle/rsa-pss-generate-export-key-pkcs8.html
               crypto/subtle/rsa-pss-generate-export-key-spki.html
               crypto/subtle/rsa-pss-generate-key.html
               crypto/subtle/rsa-pss-import-jwk-private-key.html
               crypto/subtle/rsa-pss-import-jwk-public-key-empty-usages.html
               crypto/subtle/rsa-pss-import-jwk-public-key-sha1.html
               crypto/subtle/rsa-pss-import-jwk-public-key-sha224.html
               crypto/subtle/rsa-pss-import-jwk-public-key-sha256.html
               crypto/subtle/rsa-pss-import-jwk-public-key-sha384.html
               crypto/subtle/rsa-pss-import-jwk-public-key-sha512.html
               crypto/subtle/rsa-pss-import-key-sign-large-salt.html
               crypto/subtle/rsa-pss-import-key-sign.html
               crypto/subtle/rsa-pss-import-key-verify.html
               crypto/subtle/rsa-pss-import-pkcs8-key.html
               crypto/subtle/rsa-pss-import-spki-key-empty-usages.html
               crypto/subtle/rsa-pss-import-spki-key.html
               crypto/workers/subtle/rsa-pss-import-key-sign.html
               crypto/workers/subtle/rsa-pss-import-key-verify.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp: Added.
        (WebCore::CryptoAlgorithmRSA_PSS::create):
        (WebCore::CryptoAlgorithmRSA_PSS::identifier):
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        (WebCore::CryptoAlgorithmRSA_PSS::generateKey):
        (WebCore::CryptoAlgorithmRSA_PSS::importKey):
        (WebCore::CryptoAlgorithmRSA_PSS::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h: Added.
        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        (WebCore::cryptoDigestAlgorithm): Deleted.
        Extract function cryptoDigestAlgorithm to a separate file.
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::cryptoDigestAlgorithm): Deleted.
        Extract function cryptoDigestAlgorithm to a separate file.
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp: Added.
        (WebCore::signRSA_PSS):
        (WebCore::verifyRSA_PSS):
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/mac/CryptoDigestAlgorithm.h: Added.
        (WebCore::cryptoDigestAlgorithm):
        Have cryptoDigestAlgorithm in a separate file.
        * crypto/parameters/CryptoAlgorithmRsaPssParams.h: Added.
        * crypto/parameters/RsaPssParams.idl: Added.

2017-05-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow transition from autoplay to play when a capture stream begins.
        https://bugs.webkit.org/show_bug.cgi?id=172391
        <rdar://problem/32304934>

        Reviewed by Youenn Fablet.

        Manual testing. Regression testing to be added as a follow-up.

        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia): Call mediaStreamCaptureStateChanged when capture
        state changes.
        (WebCore::Document::registerForMediaStreamStateChangeCallbacks):
        (WebCore::Document::unregisterForMediaStreamStateChangeCallbacks):
        (WebCore::Document::mediaStreamCaptureStateChanged): Call all registered elements.
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument): Register for capture state changes.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Unregister for capture state changes.
        (WebCore::HTMLMediaElement::mediaStreamCaptureStateChanged): Attempt autoplay as necessary.
        * html/HTMLMediaElement.h:

2017-05-15  Matt Rajca  <mrajca@apple.com>

        Replace autoplay events that fire at navigation with a DidAutoplayMediaPastThreshold event.
        https://bugs.webkit.org/show_bug.cgi?id=172138

        Reviewed by Alex Christensen.

        The current autoplay signals that are fired at navigation may not get delivered to the UIProcess if the WebPage is close()'ed around
        this time. This patch simplifies this and just notifies clients if a media element has played past a threshold.

        Updated API tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playbackProgressTimerFired):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
        (WebCore::HTMLMediaElement::userDidInterfereWithAutoplay):
        * page/AutoplayEvent.h:

2017-05-23  Dean Jackson  <dino@apple.com>

        checkGPUStatus needs to exercise instancing calls
        https://bugs.webkit.org/show_bug.cgi?id=172520
        <rdar://problem/23118395>

        Reviewed by Brent Fulgham.

        The checkGPUStatus method (formerly checkGPUStatusIfNecessary) was
        not being called after the drawArrays/Elements instancing calls.

        I also added a test case to exercise the recovery logic.

        Test: fast/canvas/webgl/lose-context-on-status-failure.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::setFailNextGPUStatusCheck): Force
        the next checkGPUStatus on the GC3D to fail.
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContext3D.h: Rename a function, and make
        the number of calls we wait before checking per instance, rather than
        static (which might have meant we're only ever checking after one canvas on
        a page with multiple contexts).
        (WebCore::GraphicsContext3D::setFailNextGPUStatusCheck):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::checkGPUStatus): Renamed.
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary): Deleted.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::checkGPUStatus): Improve the logic.
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary): Deleted.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::drawArraysInstanced): Add a call to checkGPUStatus.
        (WebCore::GraphicsContext3D::drawElementsInstanced): Ditto.
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::checkGPUStatus):
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary): Deleted.
        * testing/Internals.cpp: Implement the internal call to cause the next
        check to fail.
        (WebCore::Internals::failNextGPUStatusCheck):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-23  Sam Weinig  <sam@webkit.org>

        [WebIDL] Further cleanup enumeration handling
        https://bugs.webkit.org/show_bug.cgi?id=172516

        Reviewed by Chris Dumez.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GeneratePutByIndex):
        (GenerateDictionaryImplementationContent):
        (GenerateParametersCheck):
        (GenerateCallbackImplementationContent):
        Update now that JSValueToNative doesn't have a second return value.

        (GenerateImplementation):
        Add enumeration special casing to attribute setting code, where it is special
        cased in the standard

        (PassArgumentExpression):
        Stop special casing enumerations.
        
        (IsValidContextForJSValueToNative):
        Assert that enums are never passed to JSValueToNative in an attribute context.

        (JSValueToNative):
        Remove enumeration special case and second return value (which was always 1).

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjEnumAttrFunction):
        (WebCore::setJSTestObjImplementationEnumAttrFunction):
        (WebCore::setJSTestObjAttributeWithReservedEnumTypeFunction):
        Update results.

2017-05-22  Simon Fraser  <simon.fraser@apple.com>

        Snapshotting via -renderInContext: should do synchronous image decodes
        https://bugs.webkit.org/show_bug.cgi?id=172485
        rdar://problem/32276146

        Reviewed by Tim Horton.

        When UIWebView clients snapshot the view via -renderInContext: on the UIView's layer,
        WebKit should do synchronous image decodes so that the images show in the snapshot.

        Fix by plumbing through a "snapshotting" paint behavior flag from two source locations:
        WebSimpleLayer, used by compositing layers, and LegacyTileLayer, used for the WK1 tile cache.
        On WebSimpleLayer the flag propagates through PlatformCALayer to GraphicsLayer, and on LegacyTileLayer
        it sets some state on the WAKWindow, which is detected by -[WebFrame _paintBehaviorForDestinationContext:].
        In both cases, the flag becomes PaintBehaviorSnapshotting which is passed down through painting
        in PaintInfo.paintBehavior.

        Fix code that was checking paintBehavior on the FrameView to just looking at PaintInfo.paintBehavior,
        which required passing PaintInfo along in RenderImage::paintIntoRect().

        We can't just use the PaintBehaviorFlattenCompositingLayers flag, because that triggers
        a flattening paint of compositing layers, and we don't want that behavior for -renderInContext:,
        since CoreAnimation calls -renderInContext: on each of our layers and we need to avoid double-painting.
        So PaintBehaviorSnapshotting is now added to the call sites that also set PaintBehaviorFlattenCompositingLayers
        in most cases.

        Tested by SnapshotViaRenderInContext API test.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::paintContentsForSnapshot):
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::paintContents):
        * page/PageOverlayController.h:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::paintContents):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::paintContents):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::platformCALayerPaintContents):
        * platform/graphics/ca/TileCoverageMap.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerPaintContents):
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer renderInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/ios/LegacyTileCache.h: Use initializers.
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::LegacyTileCache):
        (WebCore::LegacyTileCache::drawWindowContent):
        (WebCore::LegacyTileCache::drawLayer):
        * platform/ios/LegacyTileLayer.h:
        * platform/ios/LegacyTileLayer.mm:
        (-[LegacyTileHostLayer renderInContext:]):
        (-[LegacyTileLayer renderInContext:]):
        (-[LegacyTileLayer drawInContext:]):
        (+[LegacyTileLayer layerBeingPainted]): Deleted. There were no callers.
        * platform/ios/wak/WAKView.mm:
        (-[WAKView _drawRect:context:lockFocus:]): bool -> BOOL
        * platform/ios/wak/WAKWindow.h:
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow setIsInSnapshottingPaint:]):
        (-[WAKWindow isInSnapshottingPaint]):
        * rendering/PaintPhase.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintForegroundForFragments):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):

2017-05-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove dead ENABLE(FONT_LOAD_EVENTS) code
        https://bugs.webkit.org/show_bug.cgi?id=172517

        Rubber-stamped by Simon Fraser.

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSFontFaceLoadEvent.cpp: Removed.
        * css/CSSFontFaceLoadEvent.h: Removed.
        * css/CSSFontFaceLoadEvent.idl: Removed.
        * dom/EventNames.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setFontLoadEventsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::fontLoadEventsEnabled): Deleted.

2017-05-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r215229

        It caused CachedScripts in MemoryCache to be reused with different encodings
        even though CachedScript potentially has already decoded data or cached hash
        with a previous encoding.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::setEncoding):
        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::sawError):
        (WebCore::TextResourceDecoder::encodingSet): Deleted.
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::setEncoding):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::hasUnknownEncoding):
        (WebCore::CachedResource::setHasUnknownEncoding):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):

2017-05-23  Zalan Bujtas  <zalan@apple.com>

        ASSERTION FAILED: !renderer().view().needsLayout() while running media/video-main-content-autoplay.html
        https://bugs.webkit.org/show_bug.cgi?id=172476

        Reviewed by Simon Fraser.

        This patch decouples the layout call logic from the post layout task timer setup.
        Just because we are switching over to asynchronous performPostLayoutTasks() it should not stop us from
        running layout on a dirty tree (we could encounter a forced layout (which sets m_postLayoutTasksTimer active)
        and a subsequent tree mutation during performPostLayoutTasks()). 

        There are a few different ways to end up here:
        root layout is done -> call performPostLayoutTasks() synchronously -> 
        1. tree stays clean -> no action needed.
        2. tree gets dirty -> setup performPostLayoutTasks timer -> run nested layout -> since m_postLayoutTasksTimer is active()
        we don't try to run performPostLayoutTasks() while in the nested layout and we return with a clean tree.         

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2017-05-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Multiple links should be inserted separately when performing data interaction
        https://bugs.webkit.org/show_bug.cgi?id=172489
        <rdar://problem/31510832>

        Reviewed by Dan Bernstein.

        In WebContentReader, URLs are currently always inserted inline. When inserting multiple items, this causes
        adjacent links to be inserted on a single line with no break, which is undesirable. To address this, when
        appending links from additional items to the existing document fragment in WebContentReader, insert a new space
        prior to inserting the anchor element.

        New unit test: DataInteractionTests.ExternalSourceMultipleURLsToContentEditable

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::addFragment):

        Tweak to add all children of the new fragment, rather than just the first child.

        (WebCore::Editor::WebContentReader::readURL):

2017-05-23  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove some unnecessary specialization for enum types
        https://bugs.webkit.org/show_bug.cgi?id=172482

        Reviewed by Chris Dumez.

        - Removes convertEnumeration template function and generated specialization.
          convert<IDLEnumeration<T>> now does the entire check, and can have specialized
          exceptions.
        - Treats enums more like all other types, removing enum specific code in the
          generator.

        Also fixes some order of exception bugs as the convertEnumeration<T> implementations
        were not correctly catching exceptions thrown in parseEnumeration<T>.

        * bindings/js/JSDOMConvertEnumeration.h:
        (WebCore::Converter<IDLEnumeration<T>>::convert):
        Remove convertEnumeration and move implementation to convert. Add ExceptionThrower
        parameter to retain argument conversion exception specialization and allow future
        specialization for other contexts.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::jsSubtleCryptoFunctionImportKeyPromise):
        (WebCore::jsSubtleCryptoFunctionExportKeyPromise):
        (WebCore::jsSubtleCryptoFunctionWrapKeyPromise):
        (WebCore::jsSubtleCryptoFunctionUnwrapKeyPromise):
        Switch from convertEnumeration<T> to convert<IDLEnumeration<T>>.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetArgumentExceptionFunction):
        Add (really move from GenerateParametersCheck) enum specific argument conversion exception.

        (PassArgumentExpression):
        Allow the enum specific code for attributes to remain by explicitly checking the context.
        Attribute setters use parseEnumeration<T> explicitly, as WebIDL mandates slightly different
        behavior, specially that they don't throw.

        (GenerateEnumerationImplementationContent):
        (GenerateEnumerationHeaderContent):
        Remove convertEnumeration<T>.

        (GenerateParametersCheck):
        Remove entire branch devoted to enums. The main parameter check is now mature enough
        to handle them.

        (JSValueToNative):
        Like in PassArgumentExpression, we need to retain the specialize behavior for attributes.
        Before, JSValueToNative was only called for enums with a context of IDLAttribute or IDLDictionaryMember,
        but now that we use if IDLArguments as well, it makes more sense to make this check in terms
        of the odd man out, IDLAttribute.

        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.h:
        Update test results.

2017-05-23  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Align respondInClosedState with spec
        https://bugs.webkit.org/show_bug.cgi?id=172288

        Reviewed by Chris Dumez.

        Two changes are implemented in this patch:
        - Change #1: An issue was reported to GH [1] while working on respondInClosedState 
        implementation. This issue has now been fixed, and this patch aligns implementation 
        with spec [2].
        - Change #2: In addition, this patch also fixes a bug that went unnoticed as code 
        is not yet reachable (usage of controller.@reader is not valid and is therefore 
        replaced by controller.@controlledReadableStream.@reader).

        [1] https://github.com/whatwg/streams/issues/686
        [2] https://streams.spec.whatwg.org/#readable-byte-stream-controller-respond-in-closed-state

        No added test as:
        - Change #1 does not change behavior;
        - Change #2 is not testable as the code is not yet reachable.

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerRespondInClosedState): Aligned with spec.

2017-05-22 Emilio Cobos Álvarez  <ecobos@igalia.com>

        Add a RuntimeEnabledFeature for display: contents, defaulted to false.
        https://bugs.webkit.org/show_bug.cgi?id=171984

        Reviewed by Antti Koivisto.

        The "defaulted to false" is not only because there are spec issues,
        but because I ran the WPT suite, and there was a fair amount of
        crashes and messed render trees.

        Tests: imported/w3c/web-platform-tests/innerText/getter.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDisplayContentsEnabled):
        (WebCore::RuntimeEnabledFeatures::displayContentsEnabled):

2017-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Update font-style's implementation in the font selection algorithm
        https://bugs.webkit.org/show_bug.cgi?id=169453

        Reviewed by Simon Fraser.

        Previously, we were treating "font-style: oblique" exactly the same as "font-style: italic".
        These values were parsed to the same internal data type. However, variation fonts may have two
        distinct axes: 'slnt' and 'ital'. Therefore, we need to keep a bool of state which represents
        which of these two axes we should be setting when we apply font variations. We can do this by
        making the "font-style" parser a "custom" parser. The implementation of these custom functions
        will set both the italic value on the FontDescription as well as this extra bool.

        We don't, however, want to treat these values as distinct for the purposese of font selection.
        The fact that we treat oblique fonts the same as italic fonts is a feature, not a bug. Therefore,
        the font selection algorithm is not made aware of this distinction. This is why we don't want to
        package up the bool and FontSelectionValue into a class: font selection only cares about the
        FontSelectionValue, so conceptually they shouldn't be joined. (The FontSelectionValue already
        exists within a collection of all the things font selection needs to know about.)

        Now that there is this extra bit of state on the FontDescription, we can do a little better when
        computing the result of getComputedStyle(). Previously, we were always returning "italic" even
        when "oblique" was specified. Now, we can return the correct one. However, this extra bit of
        state is not kept on the CSSFontFace (because it doesn't need to be), which means we can only
        improve the computed style of an element, rather than the cssText of an @font-face rule.

        Test: fast/text/font-style-parse.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::fontStyleFromStyleValue):
        (WebCore::fontStyleFromStyle):
        (WebCore::fontShorthandValueForSelectionProperties):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFontFaceSet.h:
        * css/CSSProperties.json:
        * css/FontFace.cpp:
        (WebCore::FontFace::style):
        * css/FontSelectionValueInlines.h:
        (WebCore::fontStyleKeyword):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontStyle): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialFontStyle):
        (WebCore::StyleBuilderCustom::applyInheritFontStyle):
        (WebCore::StyleBuilderCustom::applyValueFontStyle):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagsKey):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::shouldUseItalicVariationAxis):
        (WebCore::FontDescription::setShouldUseItalicVariationAxis):
        (WebCore::FontDescription::operator==):
        (WebCore::FontCascadeDescription::initialShouldUseItalicVariationAxis):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2017-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Support calc() in font-variation-settings and font-feature-settings
        https://bugs.webkit.org/show_bug.cgi?id=171032

        Reviewed by David Hyatt.

        Tests: css3/font-feature-settings-calc.html
               fast/text/variations/calc.html

        We can use the convenience functions in CSSPropertyParserHelpers.cpp.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontFeatureTag):
        (WebCore::consumeFontVariationTag):

2017-05-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, attempt to fix test runner by removing Unicode character from stderr output
        https://bugs.webkit.org/show_bug.cgi?id=168409

        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):

2017-05-22  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Avoid moving to the second frame of an animated image before the first frame has finished decoding
        https://bugs.webkit.org/show_bug.cgi?id=172461

        Reviewed by Simon Fraser.

        Sometimes the frameCount of an animated image gets changed when more data
        is received. The problem is we may start decoding the image as if it were
        a static large image and the decoding of this first frame finishes after 
        the image starts animating.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):

2017-05-20  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r215686): O(n^2) algorithm in CachedRawResource::addDataBuffer
        https://bugs.webkit.org/show_bug.cgi?id=172406
        <rdar://32109532>

        Reviewed by Brady Eidson.

        CachedRawResource::calculateIncrementalDataChunk was calling SharedBuffer::data each time the data
        was appended to the SharedBuffer. This causes the data to be copied from two segments to one segment,
        which causes the O(n^2) behavior I was worried about in r215686. These append/data/append/data calls
        used to cause O(1) copies per byte which was amortized because of the exponential growth of the buffer.
        After this change, there should be 0 copies per byte here, and instead a O(log(n)) binary search in the
        call to std::upper_bound to find the next segment of data with a given starting location in the SharedBuffer.
        We need to store the additional information of the offsets of the beginnings of the segments in a
        SharedBuffer. This doesn't asymptotically increase our memory usage, but it does allow us to asymptotically
        decrease the amount of time it takes to find data at a given offset in a SharedBuffer from O(n) to O(log(n)).

        This allows us to complete http://speedtest.xfinity.com and new functionality in SharedBuffer is covered by API tests.

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::calculateIncrementalDataChunk):
        (WebCore::CachedRawResource::addDataBuffer):
        (WebCore::CachedRawResource::finishLoading):
        * loader/cache/CachedRawResource.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::combineIntoOneSegment):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::getSomeData):
        (WebCore::SharedBuffer::tryCreateArrayBuffer):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::copy):
        (WebCore::SharedBuffer::internallyConsistent):
        (WebCore::SharedBuffer::hintMemoryNotNeededSoon):
        (WebCore::SharedBufferDataView::SharedBufferDataView):
        (WebCore::SharedBufferDataView::size):
        (WebCore::SharedBufferDataView::data):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData):
        (WebCore::SharedBuffer::hintMemoryNotNeededSoon):
        (WebCore::SharedBuffer::append):
        * platform/cocoa/SharedBufferCocoa.mm:
        (WebCore::SharedBuffer::createNSData):
        (WebCore::SharedBuffer::createCFData):
        (WebCore::SharedBuffer::createNSDataArray):

2017-05-22  Chris Dumez  <cdumez@apple.com>

        Resources in cached parsed stylesheets may bypass content blockers
        https://bugs.webkit.org/show_bug.cgi?id=172468
        <rdar://problem/31972693>

        Reviewed by Geoffrey Garen.

        Resources in cached parsed stylesheets could bypass content blockers when they were in the memory cache and
        they did not need revalidation.

        To address the issue, I made StyleSheetContents::subresourcesAllowReuse() to check content blockers.
        If a subresource in the cached stylesheet is blocked, then we return false in subresourcesAllowReuse() and
        the cached parsed stylesheet will not be used.

        No new tests, not currently testable.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::subresourcesAllowReuse):
        * css/StyleSheetContents.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:

2017-05-22  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: tokens.find(item) == notFound in WebCore::DOMTokenList::replace
        https://bugs.webkit.org/show_bug.cgi?id=172473

        Reviewed by Ryosuke Niwa.

        Fix bad assertion in DOMTokenList::replace(). If item == replacement, then the
        assertion was wrong.

        No new tests, unskipped existing test.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::replace):

2017-05-22  Youenn Fablet  <youenn@apple.com>

        Remove AVAudioCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=172360

        Reviewed by Sam Weinig.

        No change of behavior, this class is no longer used by default as it does not support echo cancellation.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Settings.cpp:
        (WebCore::Settings::setMediaCaptureRequiresSecureConnection):
        (WebCore::Settings::useAVFoundationAudioCapture): Deleted.
        (WebCore::Settings::setUseAVFoundationAudioCapture): Deleted.
        * page/Settings.h:
        * platform/mediastream/mac/AVAudioCaptureSource.h: Removed.
        * platform/mediastream/mac/AVAudioCaptureSource.mm: Removed.
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenterMac::setUseAVFoundationAudioCapture): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

2017-05-22  Brian Burg  <bburg@apple.com>

        Web Inspector: webkit reload policy should match default behavior
        https://bugs.webkit.org/show_bug.cgi?id=171385
        <rdar://problem/31871515>

        Reviewed by Joseph Pecoraro.

        Add an option to PageAgent.reload that tells the backend to use the old
        behavior that revalidates unexpired cached subresources. This used by tests.

        Covered by existing network/memory/disk cache tests.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):

2017-05-22  Yoav Weiss  <yoav@yoav.ws>

        [preload] Add media and type attribute support.
        https://bugs.webkit.org/show_bug.cgi?id=171720

        Reviewed by Youenn Fablet.

        Tests: http/wpt/preload/media-attribute.html
               http/wpt/preload/type-attribute.html
               http/tests/preload/viewport/meta-viewport-link-headers.php

        * css/MediaQueryEvaluator.cpp: Move the mediaAttributeMatches code from HTMLResourcePreloader to a central location.
        (WebCore::MediaQueryEvaluator::mediaAttributeMatches):
        * css/MediaQueryEvaluator.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement): Use isSupportedImageOrSVGMIMEType() instead of checking SVG MIME type specifically.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Call loadLink() with the media and type attributes.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer): Trigger Link header based preload for links that have the media attribute.
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest): Avoid preloading link resources with non-matching type.
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Collect the type attribute for link resources.
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::HTMLResourcePreloader::preload): Use MediaQueryEvaluator::mediaAttributeMatches instead of the local one.
        (WebCore::mediaAttributeMatches): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData): Indicate that only link preloads with no media attribute should be loaded here.
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader): Load only links with or without media attributes, according to mode. Also send media and
        type attributes to preloadIfNeeded().
        (WebCore::LinkLoader::isSupportedType): Check if the MIME type is supported for the CachedResource::Type.
        (WebCore::LinkLoader::preloadIfNeeded): Get the media and type attributes and only trigger a preload if media matches and type is supported.
        (WebCore::LinkLoader::loadLink): Pass along the media and type attributes.
        * loader/LinkLoader.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageOrSVGMIMEType): Check if MIME type is supported for an image, or is an SVG mime type.
        (WebCore::MIMETypeRegistry::isSupportedStyleSheetMIMEType): Check if MIME type is supported for a stylesheet.
        (WebCore::MIMETypeRegistry::isSupportedFontMIMEType): Check if MIME type is supported for a font.
        (WebCore::MIMETypeRegistry::isSupportedTextTrackMIMEType): Check if MIME type is supported for a text track.
        * platform/MIMETypeRegistry.h:

2017-05-22  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Use the SPI CGImageSourceGetTypeWithData() to get the typeIdentifierHint of an image
        https://bugs.webkit.org/show_bug.cgi?id=172405

        Reviewed by Simon Fraser.

        Use CGImageSourceGetTypeWithData() to get the typeIdentifierHint which will
        be passed to CGImageSourceCreateIncremental(). If data is insufficient to
        guess typeIdentifierHint, that means the image size is still not available.
        In this case, CachedImage::addIncrementalDataBuffer() will call error()
        which will call clear() which will call Image::destroyDecodedData()
        which will delete the current ImageDecoder and creates a new one. So we
        don't need to check the return value insufficientData.

        * platform/graphics/DecodingOptions.h: Fix the header file dependencies.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ensureDecoderAvailable): No need for the URL parameter.
        * platform/graphics/ImageTypes.h: Move a typedef from ImageDecoderCG.h to ImageTypes.h.
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::ImageDecoder): Pass the SharedBuffer data to the constructor.
        * platform/graphics/cg/ImageDecoderCG.h:
        (WebCore::ImageDecoder::create): No need for the URL argument.
        * platform/graphics/win/ImageDecoderDirect2D.h:
        (WebCore::ImageDecoder::create): Remove the URL argument from the function signature.
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create): Remove the URL argument from the function signature.
        * platform/image-decoders/ImageDecoder.h:
        * platform/spi/cg/ImageIOSPI.h: Add the prototype of CGImageSourceGetTypeWithData().

2017-05-22  Zalan Bujtas  <zalan@apple.com>

        SameSizeAsInlineBox mismatch on ARMV7.
        https://bugs.webkit.org/show_bug.cgi?id=172459

        Reviewed by Simon Fraser.

        Due to the ARMV7/i386 padding behaviour mismatch, forcing m_bitfields to be 32bits does not always
        produce the desired padding.
        Move the bool to the end of the member list and let m_deletionSentinel (4bytes) force
        padding.

        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:

2017-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Enable the woff2-variations @font-face format identifier
        https://bugs.webkit.org/show_bug.cgi?id=172425

        Reviewed by Andreas Kling.

        We support woff2, and woff-variations, but not woff2-variations.
        https://github.com/w3c/csswg-drafts/commit/5c914a8a0382734bd420090a89bc19b32e6c302d

        Test: fast/text/variations/font-face-format-woff2.html

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat):

2017-05-22  Antoine Quint  <graouts@apple.com>

        [mac-wk1] LayoutTest media/modern-media-controls/airplay-button/airplay-button.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=168409

        Reviewed by Simon Fraser.

        Remove all the custom logging code we wrote to diagnose why this specific test failed and instead
        log the backtrace when the ScriptedAnimationController gets suspended, which should allow us to
        identify which test actually leads to suspension and affects this particular test.

        * Modules/modern-media-controls/controls/scheduler.js:
        (const.scheduler.new.prototype.scheduleLayout):
        (const.scheduler.new.prototype.unscheduleLayout):
        (const.scheduler.new.prototype._requestFrameIfNeeded):
        (const.scheduler.new.prototype._frameDidFire):
        (const.scheduler.new.prototype._layout):
        * dom/Document.cpp:
        (WebCore::Document::requestAnimationFrame):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::suspend):
        (WebCore::ScriptedAnimationController::resume):
        (WebCore::ScriptedAnimationController::addThrottlingReason):
        (WebCore::ScriptedAnimationController::removeThrottlingReason):
        (WebCore::ScriptedAnimationController::registerCallback):
        (WebCore::ScriptedAnimationController::cancelCallback):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::dispatchLoggingEventIfRequired): Deleted.
        * dom/ScriptedAnimationController.h:
        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):
        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::shouldDispatchRequestAnimationFrameEvents): Deleted.
        (WebCore::InternalSettings::setShouldDispatchRequestAnimationFrameEvents): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-05-22  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Don't unconditionally reset TextIterator::m_handledChildren for display: contents nodes.
        https://bugs.webkit.org/show_bug.cgi?id=172443

        This avoids an infinite hang when enabling display: contents in bug 171984.

        Reviewed by Antti Koivisto.

        No new tests. Relanding bug 171984 will add test coverage for this.

        * editing/TextIterator.cpp:
        (WebCore::hasDisplayContents):
        (WebCore::fullyClipsContents):
        (WebCore::TextIterator::advance):

2017-05-22  Sam Weinig  <sam@webkit.org>

        [WebIDL] Support callbacks with arbitrary return types
        https://bugs.webkit.org/show_bug.cgi?id=172407

        Reviewed by Chris Dumez.

        - Adds and adopts CallbackResult<> template class that encapsulates a return value
          and status from a javascript callback.
        - Updates NodeIterator/TreeWalker to explicitly propagate exceptions thrown from
          a JSNodeFilter, rather than relying on the JSNodeFilter to catch them (seemingly
          accidentally).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Update file lists.

        * Modules/geolocation/PositionCallback.h:
        * Modules/geolocation/PositionErrorCallback.h:
        * Modules/notifications/NotificationPermissionCallback.h:
        * Modules/webaudio/AudioBufferCallback.h:
        * Modules/webdatabase/DatabaseCallback.h:
        * dom/RequestAnimationFrameCallback.h:
        * dom/StringCallback.h:
        * dom/Traversal.cpp:
        * fileapi/BlobCallback.h:
        * html/VoidCallback.h:
        * page/IntersectionObserverCallback.h:
        * page/PerformanceObserverCallback.h:
        * css/MediaQueryListListener.h:
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLStatementCallback.h:
        * Modules/webdatabase/SQLStatementErrorCallback.h:
        * Modules/webdatabase/SQLTransaction.cpp:
        * Modules/webdatabase/SQLTransactionCallback.h:
        * Modules/webdatabase/SQLTransactionErrorCallback.h:
        * inspector/InspectorDatabaseAgent.cpp:
        Adopt CallbackResult.

        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        Remove Custom extended attribute annotation.

        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::performCallback):
        Adopt CallbackResult, migrating logic from JSSQLStatementErrorCallbackCustom
        into the implementation, by way of the status enum.

        * bindings/IDLTypes.h:
        Add IDLVoid type.

        * bindings/js/JSNodeFilterCustom.cpp: Removed.
        * bindings/js/JSSQLStatementErrorCallbackCustom.cpp: Removed.
        Remove now unneeded custom bindings.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateIndexedGetter):
        (GenerateNamedGetter):
        (GenerateImplementation):
        (GenerateImplementationFunctionCall):
        Update for new NativeToJSValue arguments.

        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        Remove requirement of only void return types and update return type to use CallbackFunction.
        Also adds necessary conversion of return value.

        (GetBaseIDLType):
        Add void IDL type mapping.

        (IsValidContextForJSValueToNative):
        Add operation as valid context, as that is what the callback return type's context is.

        (NativeToJSValueUsingReferences):
        (NativeToJSValueUsingPointers):
        (NativeToJSValue):
        Rework NativeToJSValueUsingReferences/NativeToJSValueUsingPointers to take a global object reference
        accessor rather than a thisObject accessor, as a thisObject is not always available, and what the function
        actually wants is the global object.

        * bindings/scripts/IDLAttributes.json:
        Add new RethrowException attribute to instruct the callback function to re-throw, rather than
        just report, exceptions thrown in the callback and SkipCallbackInvokeCheck which instructs the
        callback function to not check canInvokeCallback() before calling. These will both be needed to retain
        the behavior of NodeFilter, and should be investigated further.

        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunction.h:
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp: Added.
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.h: Added.
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.h:
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.h:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp: Added.
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.h: Added.
        * bindings/scripts/test/TestCallbackFunction.idl:
        * bindings/scripts/test/TestCallbackInterface.idl:
        * bindings/scripts/test/TestVoidCallbackFunction.idl: Copied from Source/WebCore/bindings/scripts/test/TestCallbackFunction.idl.
        Update test results and add some additional test cases for callback functions and callback interface functions that return
        non-void and use the RethrowExceptions.

        * dom/CallbackResult.h: Added.
        (WebCore::CallbackResult<ReturnType>::CallbackResult):
        (WebCore::CallbackResult<ReturnType>::type):
        (WebCore::CallbackResult<void>::CallbackResult):
        (WebCore::CallbackResult<void>::type):
        New class to encapsulate the return value and status of a callback function. Modeled loosely on
        ExceptionOr, but is simpler since it does not need to handle complex exception objects.

        * dom/NativeNodeFilter.cpp:
        * dom/NativeNodeFilter.h:
        Adopt CallbackResult, matching other NodeFiltering code by using
        unsigned short rather than short, remove unused functions, and convert 
        condition member to a Ref, allowing us to get rid of the branch acceptNode.

        * dom/NodeFilter.h:
        Adopt CallbackResult.

        * dom/NodeFilter.idl:
        Replace Custom extended attribute with SkipCallbackInvokeCheck and RethrowException.

        * dom/NodeFilterCondition.cpp:
        * dom/NodeFilterCondition.h:
        Modernize to take a Node reference and match other filtering code
        by returning an unsigned short.

        * dom/Traversal.cpp:
        * dom/Traversal.h:
        Adopt CallbackResult and match other node filtering code by using unsigned short 
        rather than short.

        * dom/NodeIterator.cpp:
        * dom/NodeIterator.h:
        * dom/NodeIterator.idl:
        * dom/TreeWalker.cpp:
        * dom/TreeWalker.h:
        * dom/TreeWalker.idl:
        Change functions that callout to javascript via the NodeFilter to 
        return ExceptionOr<Node>. Check the result of CallbackResult for a
        thrown exception, and bail, returning Exception { ExistingExceptionError }
        which acts as an indicator to the bindings that an exception was thrown.
        (In actuality, the specific exception code does not matter. All that matters
        is that an ExceptionOr<> is returned, which triggers, via overload, a path
        in toJS() that calls propagateException(), which in turn, checks to see if
        an exception is on the stack. But, having an explicit code here helps debugging).

2017-05-22  Simon Fraser  <simon.fraser@apple.com>

        Support transform-box to switch sizing box in SVG
        https://bugs.webkit.org/show_bug.cgi?id=145783

        Reviewed by Dean Jackson.

        Add support for the CSS "transform-box" property, as described at
        <https://drafts.csswg.org/css-transforms/#transform-box>.
        
        This changes the behavior of percentage values in transform-origin in SVG.
        When these were added in r110532, percentage values in transform-origin were made
        relative to the bounding box, but absolute values relative to the view box.
        <https://github.com/w3c/csswg-drafts/issues/895> has concluded that this behavior
        is confusing. The new behavior is that, for SVG elements, both absolute and
        percentage values are relative to the reference box, which is specified by the
        new transform-box property.

        The initial value for transform-box is border-box, with the svg.css UA stylesheet
        supplying a default of view-box for the relevant SVG elements per
        <https://www.w3.org/TR/SVG2/styling.html#UAStyleSheet>.

        For non-SVG elements, the used value is always border-box, so there is no change
        in behavior.

        Tests: fast/css/transform-box-parsing.html
               svg/transforms/svg-transform-box.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TransformBox):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * css/svg.css:
        (*:not(svg),):
        (*): Deleted.
        (html|* > svg): Deleted.
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::computeTransformedExtentViaTransformList):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform): The transformOriginX().isPercent() tests
        were added to support the weird "% values are relative to bounding box" in SVG. Now
        it's up to the caller to pass a non-zero origin when that matters, and
        SVGGraphicsElement::animatedLocalTransform() is the only caller that does so.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasTransform):
        (WebCore::RenderStyle::transformBox):
        (WebCore::RenderStyle::setTransformBox):
        (WebCore::RenderStyle::initialTransformBox):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleTransformData.cpp:
        (WebCore::StyleTransformData::StyleTransformData):
        (WebCore::StyleTransformData::operator==):
        * rendering/style/StyleTransformData.h:
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform): Consult the transform-box
        style to compute the reference box as the bounding box, or the view box.

2017-05-22  Chris Dumez  <cdumez@apple.com>

        Add support for [LegacyWindowAlias] IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=172451

        Reviewed by Sam Weinig.

        Add support for [LegacyWindowAlias] IDL extended attribute as per:
        - https://heycam.github.io/webidl/#LegacyWindowAlias

        Use it for our legacy window aliases, such as webKitURL.

        No new tests, there should be no Web-exposed behavior change.

        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttributes):
        * css/DOMMatrix.idl:
        * dom/MutationObserver.idl:
        * dom/XMLDocument.idl:
        * html/DOMURL.idl:
        * page/DOMWindow.idl:

2017-05-22  Jer Noble  <jer.noble@apple.com>

        ASSERTION FAILED: m_boundThread == currentThread() in WTF::WeakReference<WebCore::WebCoreDecompressionSession>::clear()
        https://bugs.webkit.org/show_bug.cgi?id=172457
        <rdar://problem/32329436>

        Reviewed by Eric Carlson.

        Remove vestigal WeakPtrFactory that was entirely unused.

        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        (WebCore::WebCoreDecompressionSession::createWeakPtr): Deleted.
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::WebCoreDecompressionSession):

2017-05-22  Antti Koivisto  <antti@apple.com>

        Crash in WebCore::StyleRuleKeyframes::findKeyframeIndex
        https://bugs.webkit.org/show_bug.cgi?id=170756
        <rdar://problem/31573157>

        Reviewed by Andreas Kling.

        Using a malformed key with CSSKeyframesRule.findRule crashes because
        CSSParser::parseKeyframeKeyList returns null which is then dereferenced.

        * css/CSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::findKeyframeIndex): Null test.

2017-05-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove unused documentIsHandlingNonDefaultDrag plumbing for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=172453

        Reviewed by Tim Horton.

        Removes unused plumbing that was originally added to support file uploads. No new tests, since there is no
        change in behavior.

        * page/DragController.h:
        (WebCore::DragController::documentIsHandlingNonDefaultDrag): Deleted.

2017-05-22  Jer Noble  <jer.noble@apple.com>

        Media element thinks its hidden when in PiP mode and tab is backgrounded.
        https://bugs.webkit.org/show_bug.cgi?id=172221

        Reviewed by Eric Carlson.

        The element should not be considered hidden when in legacy fullscreen mode or PiP mode.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        (WebCore::HTMLMediaElement::fullscreenModeChanged):

2017-05-22  Zan Dobersek  <zdobersek@igalia.com>

        NavigatorEME: null RefPtr<> dereference due to different calling conventions
        https://bugs.webkit.org/show_bug.cgi?id=172352

        Reviewed by Carlos Garcia Campos.

        * Modules/encryptedmedia/NavigatorEME.cpp:
        (WebCore::tryNextSupportedConfiguration): Avoid crashes when constructing
        the MediaKeySystemAccess::create() arguments that can occur for targets with
        calling conventions that might release the implementation RefPtr<> before it's
        dereferenced to retrieve the key system string. Simply acquire the reference
        to the key system String object before the MediaKeySystem::create() call
        expression that releases the problematic RefPtr<>.

2017-05-22  Gwang Yoon Hwang  <yoon@igalia.com>

        [CoordinatedGraphics] Clear UpdateAtlases for each tests
        https://bugs.webkit.org/show_bug.cgi?id=172119

        Reviewed by Carlos Garcia Campos.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Clears update atlases
        while resetting states of the test runner.

2017-05-22  Gwang Yoon Hwang  <yoon@igalia.com>

        [CoordinatedGraphics] BitmapTexturePool does not release textures properly
        https://bugs.webkit.org/show_bug.cgi?id=172428

        Reviewed by Žan Doberšek.

        No new tests because no behavior change.

        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::BitmapTexturePool):
        Use the RunLoopTimer instead of Timer, because BitmapTexturePool would
        run on the compositing thread in Coordinated Graphics case.
        (WebCore::BitmapTexturePool::releaseUnusedTexturesTimerFired):
        We should check not only the last used time but also the refcounts of the
        texture when selecting textures to remove.
        * platform/graphics/texmap/BitmapTexturePool.h:
        (WebCore::BitmapTexturePool::Entry::canBeReleased): Added.

2017-05-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Use surfaceless context for sharing and offscreen context if available
        https://bugs.webkit.org/show_bug.cgi?id=172268

        Reviewed by Žan Doberšek.

        Like GTK+ port does, WPE should use surfaceless contexts when possible, and only create a native offscreen
        context as a fallback. We don't need to do anything special in WPE port, just to make it consistent with the
        Wayland and X11 implementations. We should also avoid including EGL.h in headers, we added
        GLContextEGLWayland.cpp and GLContextEGLX11.cpp to avoid that. PlatformDisplayWPE::EGLOffscreenTarget is quite
        simple and only used by GLContextEGLWPE, so we could move it there like we do for Wayland and X11.

        * platform/graphics/GLContext.h: Remove EGL header includes.
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext): Use createWindowSurfaceWPE() in WPE.
        (WebCore::GLContextEGL::createContext): Use createWPEContext in WPE.
        (WebCore::GLContextEGL::createSharingContext): Move the WPE code below to ensure we try
        createSurfacelessContext() first.
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/egl/GLContextEGLWPE.cpp:
        (WebCore::GLContextEGL::GLContextEGL): Add constructor for WPE that receives a struct wpe_renderer_backend_egl_offscreen_target*
        (WebCore::GLContextEGL::createWindowSurfaceWPE): Added implementation here because eglCreateWindowSurface needs
        the platform specific EGL includes and definitions.
        (WebCore::GLContextEGL::createWPEContext): Create a GLContext using WPE backend API directly here.
        (WebCore::GLContextEGL::destroyWPETarget): Add null check.
        * platform/graphics/wpe/PlatformDisplayWPE.cpp: Remove EGLOffscreenTarget.
        * platform/graphics/wpe/PlatformDisplayWPE.h:

2017-05-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Remove Firefox user agent quirk for Google domains
        https://bugs.webkit.org/show_bug.cgi?id=171941

        Reviewed by Carlos Garcia Campos.

        * platform/UserAgentQuirks.cpp:
        (WebCore::UserAgentQuirks::quirksForURL):
        (WebCore::UserAgentQuirks::stringForQuirk):
        (WebCore::urlRequiresFirefoxBrowser): Deleted.
        (WebCore::UserAgentQuirks::firefoxRevisionString): Deleted.
        * platform/UserAgentQuirks.h:
        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::buildUserAgentString):

2017-05-21  Antti Koivisto  <antti@apple.com>

        matchMedia('print').addListener() fires in WK1 but never in WK2 when printing (breaks printing Google maps, QuickLooks)
        https://bugs.webkit.org/show_bug.cgi?id=172361
        <rdar://problem/28777408>

        Reviewed by Sam Weinig.

        Test: fast/media/matchMedia-print.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

            Evaluate matchMedia queries unconditionally. No idea why it wasn't like that.

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

            Add testing support. The existing ways to do printing testing were unable to hit this bug as
            they had too much additional gunk.

        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-21  Zalan Bujtas  <zalan@apple.com>

        Remove redundant FrameView ref in FrameView::performPostLayoutTasks
        https://bugs.webkit.org/show_bug.cgi?id=172422

        Reviewed by Antti Koivisto.

        This was added to protect FrameView from getting destroyed in updateEmbeddedObjects(), but r169475 changed
        the embedded object update to be asynchronous.  

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):

2017-05-20  Chris Dumez  <cdumez@apple.com>

        Drop [NoInterfaceObject] from RTCDTMFSender and RTCStatsReport
        https://bugs.webkit.org/show_bug.cgi?id=172418

        Reviewed by Youenn Fablet.

        Drop [NoInterfaceObject] from RTCDTMFSender and RTCStatsReport to match the specification:
        - https://www.w3.org/TR/webrtc/#rtcdtmfsender
        - https://www.w3.org/TR/webrtc/#rtcstatsreport-object

        Firefox exposes both RTCDTMFSender and RTCStatsReport. Chrome exposes RTCStatsReport only.
        RTCDTMFSender seems to be currently disabled at build time currently so the change to
        its interface does not currently impact Web-exposed behavior, only the change to the
        RTCStatsReport interface currently does.

        No new tests, rebaselined existing test.

        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        Drop [NoInterfaceObject].

        * Modules/mediastream/RTCIceCandidateEvent.cpp: Removed.
        * Modules/mediastream/RTCIceCandidateEvent.h: Removed.
        * Modules/mediastream/RTCIceCandidateEvent.idl: Removed.
        Drop class and IDL that are no longer used. They were not even part of any project files.
        RTCIceCandidateEvent has been renamed to RTCPeerConnectionIceEvent, which we support.

2017-05-20  Chris Dumez  <cdumez@apple.com>

        Value for iterator property is wrong for maplike interfaces
        https://bugs.webkit.org/show_bug.cgi?id=172410

        Reviewed by Sam Weinig.

        Value for iterator property was wrong for maplike interfaces. The iterator property is
        supposed to have the same value as the 'entries' property but we were using the value
        of the 'values' property.

        Specification:
        - https://heycam.github.io/webidl/#es-map-entries
        - https://heycam.github.io/webidl/#es-iterator

        This impacts the iterator of the RTCStatsReport interface.

        No new tests, updated existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::JSMapLikePrototype::finishCreation):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::JSReadOnlyMapLikePrototype::finishCreation):

2017-05-20  Chris Dumez  <cdumez@apple.com>

        Drop superfluous iterator property setting in addValueIterableMethods()
        https://bugs.webkit.org/show_bug.cgi?id=172409

        Reviewed by Youenn Fablet.

        Drop superfluous iterator setting in addValueIterableMethods(). The bindings already take care of
        adding the iterator property before calling addValueIterableMethods().

        No new tests, no Web-facing behavior change.

        * bindings/js/JSDOMIterator.cpp:
        (WebCore::addValueIterableMethods):

2017-05-20  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Support painting MSE video-element to canvas
        https://bugs.webkit.org/show_bug.cgi?id=125157
        <rdar://problem/23062016>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-paint-to-canvas.html

        In order to have access to decoded video data for painting, decode the encoded samples manually
        instead of adding them to the AVSampleBufferDisplayLayer. To facilitate doing so, add a new
        utility class WebCoreDecompressionSession, which can decode samples and store them.

        For the purposes of this patch, to avoid double-decoding of video data and to avoid severe complication
        of our sample delivery pipeline, we will only support painting of decoded video samples when the video is
        not displayed in the DOM.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::seekToTime): Always send waitForSeekCompleted() to give private a chance to delay seek completion.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateReenqueSamples): Added.
        * Modules/mediasource/SourceBuffer.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cf/CoreMediaSoftLink.cpp: Added new soft link macros.
        * platform/cf/CoreMediaSoftLink.h: Ditto.
        * platform/cocoa/CoreVideoSoftLink.cpp: Ditto.
        * platform/cocoa/CoreVideoSoftLink.h: Ditto.
        * platform/graphics/SourceBufferPrivateClient.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sampleBufferDisplayLayer): Simple accessor.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::decompressionSession): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load): Update whether we should be displaying in a layer or decompression session..
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitForSeekCompleted): m_seeking is now an enum.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seeking): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekCompleted): Ditto. If waiting for a video frame, delay completing seek.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::nativeImageForCurrentTime): Call updateLastImage() and return result.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastImage): Fetch the image for the current time.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint): Pass to paintCurrentFrameInCanvas.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext): Get a native image, and render it.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged): Create or destroy a layer or decompression session as appropriate.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer): Creates a layer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer): Destroys a layer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureDecompressionSession): Creates a decompression session.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyDecompressionSession): Destroys a decompression session.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableVideoFrame): If seek completion delayed, complete now. Ditto for ready state change.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState): If waiting for a video frame, delay ready state change.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer): Deleted.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::hasVideo): Promote to a class function.
        (WebCore::MediaSourcePrivateAVFObjC::hasSelectedVideo): Return whether any of the active source buffers have video and are selected.
        (WebCore::MediaSourcePrivateAVFObjC::hasSelectedVideoChanged): Call setSourceBufferWithSelectedVideo().
        (WebCore::MediaSourcePrivateAVFObjC::setVideoLayer): Set (or clear) the layer on the selected buffer.
        (WebCore::MediaSourcePrivateAVFObjC::setDecompressionSession): Ditto for decompression session.
        (WebCore::MediaSourcePrivateAVFObjC::setSourceBufferWithSelectedVideo): Remove the layer and decompression session from the unselected

                buffer and add the decompression session or layer to the newly selected buffer.
        (WebCore::MediaSourcePrivateAVFObjCHasVideo): Deleted.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers): Clear the videoLayer and decompressionSession.
        (WebCore::SourceBufferPrivateAVFObjC::hasSelectedVideo): Return whether the buffer has a selected video track.
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): The media player now manages the video layer and decompression session lifetimes.
        (WebCore::SourceBufferPrivateAVFObjC::flush): Flush the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Enqueue to the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): As the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples): Tell the decompression session to stop requesting data, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Request media data from the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::setVideoLayer): Added.
        (WebCore::SourceBufferPrivateAVFObjC::setDecompressionSession): Added.
        * platform/graphics/cocoa/WebCoreDecompressionSession.h: Added.
        (WebCore::WebCoreDecompressionSession::create):
        (WebCore::WebCoreDecompressionSession::isInvalidated):
        (WebCore::WebCoreDecompressionSession::createWeakPtr):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm: Added.
        (WebCore::WebCoreDecompressionSession::WebCoreDecompressionSession): Register for media data requests.
        (WebCore::WebCoreDecompressionSession::invalidate):  Unregister for same.
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaDataCallback): Pass to maybeBecomeReadyForMoreMediaData.
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaData): Check in-flight decodes, and decoded frame counts.
        (WebCore::WebCoreDecompressionSession::enqueueSample): Pass the sample to be decoded on a background queue.
        (WebCore::WebCoreDecompressionSession::decodeSample): Decode the sample.
        (WebCore::WebCoreDecompressionSession::decompressionOutputCallback): Call handleDecompressionOutput.
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput): Pass decoded sample to be enqueued on the main thread.
        (WebCore::WebCoreDecompressionSession::getFirstVideoFrame):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample): Enqueue the frame (if it's a displayed frame).
        (WebCore::WebCoreDecompressionSession::isReadyForMoreMediaData): Return whether we've hit our high water sample count.
        (WebCore::WebCoreDecompressionSession::requestMediaDataWhenReady):
        (WebCore::WebCoreDecompressionSession::stopRequestingMediaData): Unset the same.
        (WebCore::WebCoreDecompressionSession::notifyWhenHasAvailableVideoFrame): Set a callback to notify when a decoded frame has been enqueued.
        (WebCore::WebCoreDecompressionSession::imageForTime): Successively dequeue images until reaching one at or beyond the requested time.
        (WebCore::WebCoreDecompressionSession::flush): Synchronously empty the producer and consumer queues.
        (WebCore::WebCoreDecompressionSession::getDecodeTime): Utility method.
        (WebCore::WebCoreDecompressionSession::getPresentationTime): Ditto.
        (WebCore::WebCoreDecompressionSession::getDuration): Ditto.
        (WebCore::WebCoreDecompressionSession::compareBuffers): Ditto.
        * platform/cocoa/VideoToolboxSoftLink.cpp: Added.
        * platform/cocoa/VideoToolboxSoftLink.h: Added.

2017-05-19  Joseph Pecoraro  <pecoraro@apple.com>

        WebAVStreamDataParserListener String leak
        https://bugs.webkit.org/show_bug.cgi?id=172395

        Reviewed by Chris Dumez.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
        (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]):
        Use an isolated String in a lambda used across threads.

2017-05-19  Chris Dumez  <cdumez@apple.com>

        Consider not exposing webkitURL in workers
        https://bugs.webkit.org/show_bug.cgi?id=172166

        Reviewed by Geoffrey Garen.

        Drop webkitURL alias for URL in workers, to match other browsers. The risk should
        be low given that this only impacts workers, we expose URL to workers and Blink
        does not have this alias. We still support the webkitURL alias for URL on Window.

        No new tests, rebaselined existing test.

        * workers/WorkerGlobalScope.idl:

2017-05-19  Youenn Fablet  <youenn@apple.com>

        Add RTCPeerConnection connection state change logging
        https://bugs.webkit.org/show_bug.cgi?id=172314

        Reviewed by Eric Carlson.

        No change of behavior.
        Adding some release logging of connection state changes.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::rtcIceGatheringStateToString):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::rtcIceConnectionStateToString):
        (WebCore::RTCPeerConnection::updateIceConnectionState):

2017-05-19  Jeremy Jones  <jeremyj@apple.com>

        webkitSupportsFullscreen and webkitSupportsPresentationMode('fullscreen') disagree.
        https://bugs.webkit.org/show_bug.cgi?id=172329
        rdar://problem/32260891

        Reviewed by Darin Adler.

        Updated tests:
        * media/media-fullscreen-inline-expected.txt:
        * media/media-fullscreen-not-in-document-expected.txt:
        * media/media-fullscreen.js:

        webkitSupportsPresentationMode('fullscreen') should delegate to webkitSupportsFullscreen.
        The additional mediaSession().fullscreenPermitted() check causes it to return false when
        not handling a user gesture, which isn't helpful to deciding to show a button in controls
        or not.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitSupportsPresentationMode):

2017-05-19  Jeremy Jones  <jeremyj@apple.com>

        Prevent javascript interface from activating picture-in-picture for video elements that are showing capture camera on ios.
        https://bugs.webkit.org/show_bug.cgi?id=172328

        Reviewed by Eric Carlson.

        This change allows MediaPlayers to decide if they support pictureInPicture.
        And check this from supportsFullscreen().

        In MediaPlayerPrivateMediaStreamAVFObjC disable pip if there is a capture video track.
        Elsewhere, leave it enabled.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen): Added Check.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsPictureInPicture): Added.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsPictureInPicture): Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsPictureInPicture): Added
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::supportsFullscreen): Deleted. Moved inline.

2017-05-19  Chris Dumez  <cdumez@apple.com>

        Do not fire load event for SVGElements that are detached or in frameless documents
        https://bugs.webkit.org/show_bug.cgi?id=172289
        <rdar://problem/32275689>

        Reviewed by Ryosuke Niwa.

        We should not fire load event for SVGElements that are detached or in frameless
        documents.

        Test: svg/load-event-detached.html

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):

2017-05-19  Chris Dumez  <cdumez@apple.com>

        Option() named constructor is not per spec
        https://bugs.webkit.org/show_bug.cgi?id=172185

        Reviewed by Sam Weinig.

        Align the behavior of the Option() named constructor with the HTML specification:
        - https://html.spec.whatwg.org/#dom-option

        In particular, we no longer create an empty Text child node if the input text is the empty string.
        This also aligns our behavior with Firefox.

        Test: imported/w3c/web-platform-tests/html/semantics/forms/the-option-element/option-element-constructor.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::createForJSConstructor):
        * html/HTMLOptionElement.h:
        * html/HTMLOptionElement.idl:

2017-05-19  Chris Dumez  <cdumez@apple.com>

        URLSearchParams / Headers objects @@iterator is not as per Web IDL spec
        https://bugs.webkit.org/show_bug.cgi?id=172218

        Reviewed by Youenn Fablet.

        Both URLSearchParams and Headers interfaces are iterable as per their
        respective specification, and they both have a pair iterator:
        - https://url.spec.whatwg.org/#interface-urlsearchparams
        - https://fetch.spec.whatwg.org/#headers-class

        As per the WebIDL specification for 'entries'[1], "If the interface has a pair
        iterator, then the Function object is the value of the @@iterator property",
        the value of @@iterator being defined at [2]. In WebKit, we were using
        different values/functions for 'entries' and @@iterator, although those
        functions were doing the same thing (and the right thing).

        Also, as per [2], the name of the @@iterator function should be "entries",
        which I also implemented in this patch. Previously, we were using
        "[Symbol.Iterator]" as function name.

        [1] https://heycam.github.io/webidl/#es-iterable-entries
        [2] https://heycam.github.io/webidl/#es-iterator

        No new tests, rebaselined existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateImplementationIterableFunctions):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterablePrototype::finishCreation):
        (WebCore::jsTestIterablePrototypeFunctionEntriesCaller):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodePrototype::finishCreation):
        (WebCore::jsTestNodePrototypeFunctionEntriesCaller):

2017-05-19  Zalan Bujtas  <zalan@apple.com>

        Redundant ellipsis box triggers ASSERT_WITH_SECURITY_IMPLICATION in InlineBox::parent().
        https://bugs.webkit.org/show_bug.cgi?id=172309
        <rdar://problem/32262357>

        Reviewed by Simon Fraser.

        This patch stops the redundant ellipsis box trigger ASSERT_WITH_SECURITY_IMPLICATION.

        In RootInlineBox::placeEllipsis we construct an ellipsis box and append it to a static HashMap which
        keeps track of the ellipsis boxes on each line. However when the line already has an ellipsis, we
        re-use the existing one and this newly constructed (but redundant) box gets destroyed as we return from this function.
        In InlineBox's d'tor, we let the parent know that now it has a dangling child and we assert on it
        later, while accessing the children list. However this redundant ellipsis box was never added to the line,
        so the assertion hits incorrectly.

        Test: fast/inline/redundant-ellipsis-triggers-assert-incorrectly.html

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.cpp: This needs 32bits padding.
        (WebCore::InlineBox::invalidateParentChildList):
        * rendering/InlineBox.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):

2017-05-19  Matt Rajca  <mrajca@apple.com>

        Inherit media user gestures from the top document when autoplay quirks are allowed.
        https://bugs.webkit.org/show_bug.cgi?id=172375

        Reviewed by Eric Carlson.

        Added API test.

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

2017-05-19  Youenn Fablet  <youenn@apple.com>

        Align MockRealtimeMediaSourceCenter with RealtimeMediaSourceCenter
        https://bugs.webkit.org/show_bug.cgi?id=172324

        Reviewed by Eric Carlson.

        No change of behavior.
        Remove most of MockRealtimeMediaSourceCenter implementation.
        Next step should be to remove it entirely and use the factory setters instead.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::RealtimeMediaSourceCenter):
        (WebCore::RealtimeMediaSourceCenter::createMediaStream):
        (WebCore::RealtimeMediaSourceCenter::getMediaStreamDevices):
        (WebCore::RealtimeMediaSourceCenter::setDeviceEnabled):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::supportedConstraints):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::MockCaptureDeviceManager::captureDevices):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2017-05-19  Zalan Bujtas  <zalan@apple.com>

        Update SameSizeAsInlineBox with the correct InlineBoxBitfields bits.
        https://bugs.webkit.org/show_bug.cgi?id=172377

        Reviewed by Tim Horton.

        * rendering/InlineBox.cpp:

2017-05-19  Daniel Bates  <dabates@apple.com>

        Bindings: Support runtime-enabled features in specific worlds
        https://bugs.webkit.org/show_bug.cgi?id=172235

        Reviewed by Chris Dumez.

        Currently a function, attribute, or interface can be annotated with either EnabledAtRuntime
        or EnabledForWorld (not both) to expose/conceal it depending on the state of a runtime
        feature flag or the DOM world associated with the running JavaScript code, respectively.
        Even though we do not have any functions, attributes, or interfaces that are annotated
        with both EnabledAtRuntime and EnabledForWorld at the time of writing, it seems reasonable
        to support such a combination of annotations. This also has the benefit of making it
        straightforward to support the extended attribute SecureContext by generalizing the logic
        that generates the code to expose/conceal a function, attribute, or interface.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalString): Use an array to build up all the conjuncts in
        the conditional expression.
        (GenerateImplementation): Substitute GenerateRuntimeEnableConditionalString() and $runtimeEnableConditionalString
        for GetRuntimeEnableFunctionName() and $enable_function_result, respectively.
        (GetRuntimeEnableFunctionName): Deleted.

        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
         (WebCore::JSTestGlobalObject::finishCreation):
         (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled):
         (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledCaller):
         (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabled):
         (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabledCaller):
         Update expected results.

         * bindings/scripts/test/JS/JSTestObj.cpp:
         (WebCore::JSTestObjPrototype::finishCreation):
         (WebCore::jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled):
         (WebCore::jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledCaller):
         Ditto.

         * bindings/scripts/test/TestGlobalObject.idl: Added test cases.
         * bindings/scripts/test/TestObj.idl: Added test case.

2017-05-19  Jeremy Jones  <jeremyj@apple.com>

        Fix macos build after r217143
        https://bugs.webkit.org/show_bug.cgi?id=172380

        unreviewed.

        Remove reference to WebVideoFullscreenInterface for mac build.

        * html/HTMLMediaElement.cpp:
        * platform/mac/WebVideoFullscreenInterfaceMac.h:

2017-05-19  Jeremy Jones  <jeremyj@apple.com>

        Remove defunct WebVideoFullscreenInterface
        https://bugs.webkit.org/show_bug.cgi?id=172254

        Reviewed by Jon Lee.

        No new tests because no behavior change.

        WebVideoFullscreenInterface has long since been replaced by WebVideoFullscreenModelClient.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        * html/HTMLVideoElement.cpp:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        * platform/cocoa/WebVideoFullscreenInterface.h: Removed.
        * platform/cocoa/WebVideoFullscreenModel.h:
        * platform/cocoa/WebVideoFullscreenModelVideoElement.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/mac/WebVideoFullscreenInterfaceMac.h:

2017-05-19  Jeremy Jones  <jeremyj@apple.com>

        HTMLVideoElement::webkitSupportsPresentationMode allowsPictureInPicture() check is redundant.
        https://bugs.webkit.org/show_bug.cgi?id=172330
        rdar://problem/32285443

        Reviewed by Eric Carlson.

        No new tests because no behavior change.

        This removes a redundant call to allowsPictureInPicture() to make it
        more clear that webkitSupportsPresentationMode gives the same result as 
        webkitSupportsFullscreen(pipMode)

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitSupportsPresentationMode):

2017-05-19  Jeremy Jones  <jeremyj@apple.com>

        [WebRTC] Remove PiP support for video elements that are showing camera capture
        https://bugs.webkit.org/show_bug.cgi?id=172336

        Reviewed by Eric Carlson.

        No new tests because no effect on the DOM. This just changes a value sent to the platform interface layer.

        Ask video element if it supports picture-in-picture instead of asking the mediaSession directly.
        This allows the video element to give a more robust answer.

        * html/HTMLVideoElement.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::setUpFullscreen):

2017-05-18  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove the need for the generator to know about native type mapping
        https://bugs.webkit.org/show_bug.cgi?id=172310

        Reviewed by Darin Adler.

        Replace the use of explicit typename to native type mappings in CodeGeneratorJS.pm
        with use of IDLTypes and Converter, which already need the mapping. This allows us
        to have the information in only one spot.

        Also, callback generation to account for nullability and update the IDLs to correctly
        annotate only the types that need to be nullable. 

        * Modules/geolocation/GeoNotifier.cpp:
        * Modules/geolocation/GeoNotifier.h:
        * Modules/geolocation/Geolocation.cpp:
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.h:
        Use references where possible in the Geolocation code. It was almost possible
        to make PositionCallback take a non-nullable position, but some odd logic in
        Geolocation::makeCachedPositionCallbacks() implies that there is a path where
        passing null is possible, though it would assert. Added FIXME's to return to
        this in a follow up.

        * Modules/webaudio/AudioBufferCallback.idl:
        Add nullable annotation and FIXME explaining that the latest spec splits the callback
        into two separate ones.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::runTransaction):
        * Modules/webdatabase/DatabaseCallback.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::performCallback):
        * Modules/webdatabase/SQLStatementCallback.h:
        * Modules/webdatabase/SQLStatementErrorCallback.h:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        * Modules/webdatabase/SQLTransactionCallback.h:
        * Modules/webdatabase/SQLTransactionErrorCallback.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * bindings/js/JSSQLStatementErrorCallbackCustom.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        Update to pass callback parameters as references, since they are never null.

        * bindings/IDLTypes.h:
        Add NullableParameterType to allow customization of nullable parameters (in much
        the same way we allow customization of the nullable implementation type).

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        Use Converter<>::ReturnType{ } for default values rather than ${GetNativeType..}().

        (GenerateHeader):
        Remove use of GetNativeType for toWrapped by using the impl type, since this will never
        be a complex type.

        (GenerateImplementation):
        Simplify DOMJIT UnsafeToNative by merging two identical paths and using auto.

        (GenerateParametersCheck):
        Rework parameter checks to use more specific variable names, make branches more clear,
        and use Converter<>::ReturnType rather than GetNativeType.

        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        Switch to using typename ${IDLType}::ParameterType as the parameters for callback functions. Also
        add final and override to make sure the generated function matches the user provided base class.
        (GetNativeType): Deleted.
        (GetNativeInnerType): Deleted.
        (GetNativeTypeForCallbacks): Deleted.
        Remove native type mappings.

        * css/MediaQueryListListener.h:
        * css/MediaQueryListListener.idl:
        * css/MediaQueryMatcher.cpp:
        Update MediaQueryListListener to take a non-nullable MediaQueryList.
        
        * dom/NativeNodeFilter.cpp:
        * dom/NativeNodeFilter.h:
        * dom/NodeFilter.h:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.cpp:
        * dom/Traversal.cpp:
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        * bindings/js/JSNodeFilterCustom.cpp:
        Update acceptNode to be non-nullable and pass the Node by reference.

        * dom/StringCallback.cpp:
        * dom/StringCallback.h:
        Pass the ScriptExecutionContext by reference.

        * page/IntersectionObserverCallback.h:
        Update to match new parameter types and pass IntersectionObserver by reference.

        * page/PerformanceObserver.cpp:
        * page/PerformanceObserverCallback.h:
        Update to pass PerformanceObserverEntryList and PerformanceObserver by reference.

        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunction.h:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.h:
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Update test results.

        * bindings/scripts/test/TestCallbackInterface.idl:
        Update test to refer to actual interfaces as we now do lookup on these parameter 
        types rather than blindly assuming they are interfaces.

2017-05-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r217098, r217111, r217113, and
        r217114.
        https://bugs.webkit.org/show_bug.cgi?id=172367

        These changes broke the Windows build and introduced
        LayoutTest failures (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[MSE][Mac] Support painting MSE video-element to canvas"
        https://bugs.webkit.org/show_bug.cgi?id=125157
        http://trac.webkit.org/changeset/217098

        "[MSE][Mac] Support painting MSE video-element to canvas"
        https://bugs.webkit.org/show_bug.cgi?id=125157
        http://trac.webkit.org/changeset/217111

        "Unreviewed build fix; add undefined functions and constants
        to the CoreMediaSoftLink.h, and use the"
        http://trac.webkit.org/changeset/217113

        "[MSE][Mac] Support painting MSE video-element to canvas"
        https://bugs.webkit.org/show_bug.cgi?id=125157
        http://trac.webkit.org/changeset/217114

2017-05-19  Andy Estes  <aestes@apple.com>

        REGRESSION (r217078): window.ApplePaySession is undefined on macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=172344

        Reviewed by Tim Horton.

        r213673 mistakenly changed the ApplePaySession interface from being conditional on
        APPLE_PAY to being conditional on APPLE_PAY_DELEGATE, so when r217078 disabled
        APPLE_PAY_DELEGATE on Sierra and earlier it disabled ApplePaySession.

        Fix this by reverting ApplePaySession to being conditional on APPLE_PAY.

        Fixes http/tests/ssl/applepay/ApplePaySession.html

        * Modules/applepay/ApplePaySession.idl:

2017-05-19  Chris Dumez  <cdumez@apple.com>

        CSSOM insertRule() index argument is optional with default 0
        https://bugs.webkit.org/show_bug.cgi?id=172219

        Reviewed by Sam Weinig.

        Index parameter to CSSSupportsRule.insertRule() and CSSStyleSheet.insertRule() should
        be optional with a default value of 0, as per the latest specification:
        - https://github.com/w3c/csswg-drafts/commit/7949d41a2d86107f8ad4624c055b4b0c9c28ad0d
        - https://www.w3.org/Bugs/Public/show_bug.cgi?id=27384

        Tests: imported/w3c/web-platform-tests/cssom/insertRule-charset-no-index.html
               imported/w3c/web-platform-tests/cssom/insertRule-import-no-index.html
               imported/w3c/web-platform-tests/cssom/insertRule-namespace-no-index.html
               imported/w3c/web-platform-tests/cssom/insertRule-no-index.html

        * css/CSSStyleSheet.cpp:
        * css/CSSStyleSheet.h:
        * css/CSSStyleSheet.idl:
        * css/CSSSupportsRule.idl:

2017-05-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Remove platform ifdefs from threaded compositor implementation
        https://bugs.webkit.org/show_bug.cgi?id=172265

        Reviewed by Žan Doberšek.

        Remove PlatformDisplayWPE::EGLTarget.

        * platform/graphics/wpe/PlatformDisplayWPE.cpp:
        * platform/graphics/wpe/PlatformDisplayWPE.h:

2017-05-19  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; add undefined functions and constants to the CoreMediaSoftLink.h, and use the
        correct (and previously soft-linked) method in WebCoreDecompressionSession.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::imageForTime):

2017-05-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][DFG][DOMJIT] Extend CheckDOM to CheckSubClass
        https://bugs.webkit.org/show_bug.cgi?id=172098

        Reviewed by Saam Barati.

        Add DOMJIT interface IDL attribute. Which allows us to define checkSubClassPatchpointFor${className}
        function for that ClassInfo. And we move CheckSubClass patchpoint implementation to ClassInfo's member

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowProperties.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateImplementationIterableFunctions):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/IDLAttributes.json:
        * 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/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/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/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.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/JSTestTypedefs.cpp:
        * bridge/c/CRuntimeObject.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_method.cpp:
        * bridge/runtime_object.cpp:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/Node.idl:
        * domjit/JSDocumentDOMJIT.cpp:
        (WebCore::checkSubClassPatchpointForJSDocument):
        (WebCore::DocumentDocumentElementDOMJIT::checkDOM): Deleted.
        (WebCore::DocumentBodyDOMJIT::checkDOM): Deleted.
        * domjit/JSDocumentFragmentDOMJIT.cpp: Copied from Source/JavaScriptCore/runtime/JSMap.cpp.
        (WebCore::checkSubClassPatchpointForJSDocumentFragment):
        * domjit/JSElementDOMJIT.cpp: Copied from Source/JavaScriptCore/tools/JSDollarVM.cpp.
        (WebCore::checkSubClassPatchpointForJSElement):
        * domjit/JSEventDOMJIT.cpp: Copied from Source/JavaScriptCore/tools/JSDollarVM.cpp.
        (WebCore::checkSubClassPatchpointForJSEvent):
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::checkSubClassPatchpointForJSNode):
        (WebCore::NodeFirstChildDOMJIT::checkDOM): Deleted.
        (WebCore::NodeLastChildDOMJIT::checkDOM): Deleted.
        (WebCore::NodeNextSiblingDOMJIT::checkDOM): Deleted.
        (WebCore::NodePreviousSiblingDOMJIT::checkDOM): Deleted.
        (WebCore::NodeParentNodeDOMJIT::checkDOM): Deleted.
        (WebCore::NodeNodeTypeDOMJIT::checkDOM): Deleted.
        (WebCore::NodeOwnerDocumentDOMJIT::checkDOM): Deleted.

2017-05-18  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Support painting MSE video-element to canvas
        https://bugs.webkit.org/show_bug.cgi?id=125157
        <rdar://problem/23062016>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-paint-to-canvas.html

        In order to have access to decoded video data for painting, decode the encoded samples manually
        instead of adding them to the AVSampleBufferDisplayLayer. To facilitate doing so, add a new
        utility class WebCoreDecompressionSession, which can decode samples and store them.

        For the purposes of this patch, to avoid double-decoding of video data and to avoid severe complication
        of our sample delivery pipeline, we will only support painting of decoded video samples when the video is
        not displayed in the DOM.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::seekToTime): Always send waitForSeekCompleted() to give private a chance to delay seek completion.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateReenqueSamples): Added.
        * Modules/mediasource/SourceBuffer.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cf/CoreMediaSoftLink.cpp: Added new soft link macros.
        * platform/cf/CoreMediaSoftLink.h: Ditto.
        * platform/cocoa/CoreVideoSoftLink.cpp: Ditto.
        * platform/cocoa/CoreVideoSoftLink.h: Ditto.
        * platform/graphics/SourceBufferPrivateClient.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sampleBufferDisplayLayer): Simple accessor.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::decompressionSession): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load): Update whether we should be displaying in a layer or decompression session..
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::waitForSeekCompleted): m_seeking is now an enum.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seeking): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekCompleted): Ditto. If waiting for a video frame, delay completing seek.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::nativeImageForCurrentTime): Call updateLastImage() and return result.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastImage): Fetch the image for the current time.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint): Pass to paintCurrentFrameInCanvas.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext): Get a native image, and render it.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged): Create or destroy a layer or decompression session as appropriate.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer): Creates a layer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer): Destroys a layer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureDecompressionSession): Creates a decompression session.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyDecompressionSession): Destroys a decompression session.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableVideoFrame): If seek completion delayed, complete now. Ditto for ready state change.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState): If waiting for a video frame, delay ready state change.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer): Deleted.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::hasVideo): Promote to a class function.
        (WebCore::MediaSourcePrivateAVFObjC::hasSelectedVideo): Return whether any of the active source buffers have video and are selected.
        (WebCore::MediaSourcePrivateAVFObjC::hasSelectedVideoChanged): Call setSourceBufferWithSelectedVideo().
        (WebCore::MediaSourcePrivateAVFObjC::setVideoLayer): Set (or clear) the layer on the selected buffer.
        (WebCore::MediaSourcePrivateAVFObjC::setDecompressionSession): Ditto for decompression session.
        (WebCore::MediaSourcePrivateAVFObjC::setSourceBufferWithSelectedVideo): Remove the layer and decompression session from the unselected

                buffer and add the decompression session or layer to the newly selected buffer.
        (WebCore::MediaSourcePrivateAVFObjCHasVideo): Deleted.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers): Clear the videoLayer and decompressionSession.
        (WebCore::SourceBufferPrivateAVFObjC::hasSelectedVideo): Return whether the buffer has a selected video track.
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): The media player now manages the video layer and decompression session lifetimes.
        (WebCore::SourceBufferPrivateAVFObjC::flush): Flush the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Enqueue to the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): As the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples): Tell the decompression session to stop requesting data, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Request media data from the decompression session, if it exists.
        (WebCore::SourceBufferPrivateAVFObjC::setVideoLayer): Added.
        (WebCore::SourceBufferPrivateAVFObjC::setDecompressionSession): Added.
        * platform/graphics/cocoa/WebCoreDecompressionSession.h: Added.
        (WebCore::WebCoreDecompressionSession::create):
        (WebCore::WebCoreDecompressionSession::isInvalidated):
        (WebCore::WebCoreDecompressionSession::createWeakPtr):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm: Added.
        (WebCore::WebCoreDecompressionSession::WebCoreDecompressionSession): Register for media data requests.
        (WebCore::WebCoreDecompressionSession::invalidate):  Unregister for same.
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaDataCallback): Pass to maybeBecomeReadyForMoreMediaData.
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaData): Check in-flight decodes, and decoded frame counts.
        (WebCore::WebCoreDecompressionSession::enqueueSample): Pass the sample to be decoded on a background queue.
        (WebCore::WebCoreDecompressionSession::decodeSample): Decode the sample.
        (WebCore::WebCoreDecompressionSession::decompressionOutputCallback): Call handleDecompressionOutput.
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput): Pass decoded sample to be enqueued on the main thread.
        (WebCore::WebCoreDecompressionSession::getFirstVideoFrame):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample): Enqueue the frame (if it's a displayed frame).
        (WebCore::WebCoreDecompressionSession::isReadyForMoreMediaData): Return whether we've hit our high water sample count.
        (WebCore::WebCoreDecompressionSession::requestMediaDataWhenReady):
        (WebCore::WebCoreDecompressionSession::stopRequestingMediaData): Unset the same.
        (WebCore::WebCoreDecompressionSession::notifyWhenHasAvailableVideoFrame): Set a callback to notify when a decoded frame has been enqueued.
        (WebCore::WebCoreDecompressionSession::imageForTime): Successively dequeue images until reaching one at or beyond the requested time.
        (WebCore::WebCoreDecompressionSession::flush): Synchronously empty the producer and consumer queues.
        (WebCore::WebCoreDecompressionSession::getDecodeTime): Utility method.
        (WebCore::WebCoreDecompressionSession::getPresentationTime): Ditto.
        (WebCore::WebCoreDecompressionSession::getDuration): Ditto.
        (WebCore::WebCoreDecompressionSession::compareBuffers): Ditto.
        * platform/cocoa/VideoToolboxSoftLink.cpp: Added.
        * platform/cocoa/VideoToolboxSoftLink.h: Added.

2017-05-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [REGRESSION](r216901): Delete ImageDecoder if BitmapImage::destroyDecodedData() was called to destroy all the decoded frames
        https://bugs.webkit.org/show_bug.cgi?id=172325

        Reviewed by Simon Fraser.

        When calling BitmapImage::destroyDecodedData() with destroyAll = true, the
        current ImageDecoder has to be deleted regardless the current frame needs
        to be cached or not. This is true except when the image is animating.
        Creating a new ImageDecoder for the animated image will lead to decoding
        all the frames from frame-zero till the current frame.

        Deleting the current ImageDecoder has the benefit of releasing its raster
        data. We also must delete the current ImageDecoder when the CachedImage
        switched its data SharedBuffer.

        The fix is return the condition in BitmapImage::destroyDecodedData() to 
        be as it was before r216901.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2017-05-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r217079.

        This change broke internal builds.

        Reverted changeset:

        "Redundant ellipsis box triggers
        ASSERT_WITH_SECURITY_IMPLICATION in InlineBox::parent()."
        https://bugs.webkit.org/show_bug.cgi?id=172309
        http://trac.webkit.org/changeset/217079

2017-05-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Release InjectedScripts when frontends close
        https://bugs.webkit.org/show_bug.cgi?id=172313

        Reviewed by Andreas Kling.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):
        Release inspector resources together, including discarding injected
        scripts so that they may be collected.

        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::disconnectAllFrontends):
        Move the disconnect call inside of disconnectAllFrontends to establish
        a pattern of releasing web inspector resources together.

2017-05-18  Simon Fraser  <simon.fraser@apple.com>

        Add a newline after the URL in showLayerTree output.

        Reviewed by Zalan Bujtas.

        * rendering/RenderLayer.cpp:
        (WebCore::showLayerTree):

2017-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Attachment drag preview should not have the attachment outline
        https://bugs.webkit.org/show_bug.cgi?id=172327
        <rdar://problem/32282831>

        Reviewed by Tim Horton.

        When creating a drag image for an attachment element, don't include borders around the attachment.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * rendering/RenderAttachment.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintAttachment):

2017-05-18  Youenn Fablet  <youenn@apple.com>

        Make WebRTC logging happen in Release
        https://bugs.webkit.org/show_bug.cgi?id=172307

        Reviewed by Eric Carlson.

        No change of behavior.
        Move from LOG(WebRTC...) to RELEASE_LOG(WebRTC...).

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        (WebCore::PeerConnectionBackend::newICECandidate):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::queuedCreateOffer):
        (WebCore::RTCPeerConnection::queuedCreateAnswer):
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):

2017-05-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] do not cache gUM permissions
        https://bugs.webkit.org/show_bug.cgi?id=172245

        Reviewed by Youenn Fablet.

        No new tests, updated fast/mediastream/MediaDevices-getUserMedia.html.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Add salt parameter.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

2017-05-18  Zalan Bujtas  <zalan@apple.com>

        Redundant ellipsis box triggers ASSERT_WITH_SECURITY_IMPLICATION in InlineBox::parent().
        https://bugs.webkit.org/show_bug.cgi?id=172309
        <rdar://problem/32262357>

        Reviewed by Simon Fraser.

        This patch stops the redundant ellipsis box trigger ASSERT_WITH_SECURITY_IMPLICATION.

        In RootInlineBox::placeEllipsis we construct an ellipsis box and append it to a static HashMap which
        keeps track of the ellipsis boxes on each line. However when the line already has an ellipsis, we
        re-use the existing one and this newly constructed (but redundant) box gets destroyed as we return from this function.
        In InlineBox's d'tor, we let the parent know that now it has a dangling child and we assert on it
        later, while accessing the children list. However this redundant ellipsis box was never added to the line,
        so the assertion hits incorrectly.

        Test: fast/inline/redundant-ellipsis-triggers-assert-incorrectly.html

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::invalidateParentChildList):
        * rendering/InlineBox.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis): Use the newly created ellipsis box instead.

2017-05-18  Andy Estes  <aestes@apple.com>

        ENABLE(APPLE_PAY_DELEGATE) should be NO on macOS Sierra and earlier
        https://bugs.webkit.org/show_bug.cgi?id=172305

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2017-05-18  Dean Jackson  <dino@apple.com>

        Transform misplaces element 50% of the time
        https://bugs.webkit.org/show_bug.cgi?id=172300

        Reviewed by Simon Fraser.

        A hardware-accelerated animation of the transform property
        requires layout to happen if it contains a translate operation
        using percentages, otherwise it may create an incorrect
        animation. The "50% of the time" comes in to play because
        the layout timer may sometimes fire before the animation
        timer. The test case contains a example that is much more
        likely to fail without this fix.

        Test: animations/needs-layout.html

        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::animationTimerFired): If
        we've been told that we need a layout, and we have one pending, then
        force it before doing the rest of the animation logic.
        (WebCore::CSSAnimationController::updateAnimations): Check if the
        CompositeAnimation depends on layout, and tell the private controller
        that it should check for the necessity of a layout as the animation
        timer fires.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate): Ask the keyframes if this
        animation depends on layout.

        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::hasAnimationThatDependsOnLayout):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::computeLayoutDependency): Look at all
        the keyframe properties for something that is a translation using
        percentages.

        * page/animation/KeyframeAnimation.h:

2017-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Selection around attachment elements should not persist when beginning a drag
        https://bugs.webkit.org/show_bug.cgi?id=172319
        <rdar://problem/32283008>

        Reviewed by Tim Horton.

        When beginning to drag an attachment element, save and restore the visible selection when calling out to the
        injected bundle for additional data, and when creating the drag image.

        Augmented an existing API test: DataInteractionTests.AttachmentElementItemProviders.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2017-05-18  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove unused functions from RuntimeEnabledFeatures
        https://bugs.webkit.org/show_bug.cgi?id=172315

        Reviewed by Jer Noble.

        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::htmlMediaElementEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::htmlVideoElementEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::htmlSourceElementEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::mediaControllerEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::mediaErrorEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::timeRangesEnabled): Deleted.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDOMIteratorEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::domIteratorEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::setGeolocationEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::geolocationEnabled): Deleted.

2017-05-18  Daniel Bates  <dabates@apple.com>

        Improve error message for Access-Control-Allow-Origin violation due to misconfigured server
        https://bugs.webkit.org/show_bug.cgi?id=162819
        <rdar://problem/28575938>

        Reviewed by Joseph Pecoraro.

        Inspired by Blink change:
        <https://src.chromium.org/viewvc/blink?view=revision&revision=163406>

        At most one Access-Control-Allow-Origin header may be in an HTTP response. Improve the
        error message emitted on a CORS failure when Access-Control-Allow-Origin contains more
        than one origin, indicated by the presence of a ',', as a way to help web developers/server
        administrators differentiate between a misconfigured Access-Control-Allow-Origin header
        and a misconfigured server.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck): Defined a local variable to hold the value of securityOrigin.toString()
        and referenced this variable throughout the code to avoid computing the stringified security
        origin more than once. Switched to using makeString() to concatenate error message when the
        origin of the page does not match the value of the Access-Control-Allow-Origin header.

2017-05-18  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Grandfather domains for existing data records
        https://bugs.webkit.org/show_bug.cgi?id=172155
        <rdar://problem/24913532>

        Reviewed by Alex Christensen.

        Test: http/tests/loading/resourceLoadStatistics/grandfathering.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setGrandfathered):
        (WebCore::ResourceLoadObserver::isGrandfathered):
        (WebCore::ResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval):
        (WebCore::ResourceLoadObserver::setGrandfatheringTime):
            Functions for testing and configuration.
            ResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval() changed as a result of moving
            WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval() here.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::createEncoderFromData):
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):
            Now contains endOfGrandfatheringTimestamp.
        (WebCore::ResourceLoadStatisticsStore::clearInMemoryAndPersistent):
            Now makes a call to m_grandfatherExistingWebsiteDataHandler().
        (WebCore::ResourceLoadStatisticsStore::setGrandfatherExistingWebsiteDataCallback):
        (WebCore::ResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval):
            Changed as a result of moving
            WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval() here.
        (WebCore::ResourceLoadStatisticsStore::setGrandfatheringTime):
        (WebCore::ResourceLoadStatisticsStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor):
            Renamed since it now also takes grandfathering into account.
        (WebCore::ResourceLoadStatisticsStore::updateStatisticsForRemovedDataRecords):
            Fixed typo in local variable name.
        (WebCore::ResourceLoadStatisticsStore::handleFreshStartWithEmptyOrNoStore):
        (WebCore::ResourceLoadStatisticsStore::shouldRemoveDataRecords):
            Convenience function added.
        (WebCore::ResourceLoadStatisticsStore::dataRecordsBeingRemoved):
            Convenience function added.
        (WebCore::ResourceLoadStatisticsStore::dataRecordsWereRemoved):
            Convenience function added.
        (WebCore::ResourceLoadStatisticsStore::prevalentResourceDomainsWithoutUserInteraction): Deleted.
            Replaced by ResourceLoadStatisticsStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor().
        * loader/ResourceLoadStatisticsStore.h:

2017-05-18  Daniel Bates  <dabates@apple.com>

        Bindings: Require value for extended attributes EnabledAtRuntime and EnabledForWorld
        https://bugs.webkit.org/show_bug.cgi?id=172252

        Reviewed by Sam Weinig.

        According to Sam Weinig it is an anti-feature that EnabledAtRuntime can be specified
        without a value. We should make it require a value for the name of the RuntimeEnabledFeatures
        function to use in the generated code. For similar reasons we should also require
        a value for the extended attribute EnabledForWorld.

        * Modules/websockets/WebSocket.idl: Substitute EnabledAtRuntime=WebSocket for EnabledAtRuntime.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetRuntimeEnableFunctionName):
        * html/HTMLAudioElement.idl: Substitute EnabledAtRuntime=Audio for EnabledAtRuntime.
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::audioEnabled):
        (WebCore::RuntimeEnabledFeatures::htmlAudioElementEnabled): Deleted. This function duplicated
        the functionality of RuntimeEnabledFeatures::audioEnabled(). Instead we explicitly
        write EnabledAtRuntime=Audio in HTMLAudioElement.idl to use RuntimeEnabledFeatures::audioEnabled()
        to determine whether to expose/conceal the HTMLAudioElement global constructor at runtime.
        * page/RuntimeEnabledFeatures.h:

2017-05-18  Jer Noble  <jer.noble@apple.com>

        Allow nested timers to propagate user gestures so long as the total nested interval is less than 1s.
        https://bugs.webkit.org/show_bug.cgi?id=172173

        Reviewed by Andy Estes.

        Test: media/restricted-audio-playback-with-multiple-settimeouts.html

        Store the current nested timer interval in DOMTimerFireState, and use that value to propagate the
        nested interval through multiple invocations of setTimeout().

        Drive-by fix: instead of manually resetting the nesting level in DOMTimer::fired(), add the
        nesting level to the DOMTimerFireState, and reset the nesting level on the state's destruction.
        This fixes one place in DOMTimer::fire() where an early return lead to the timer's nesting level
        not being reset.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::DOMTimerFireState):
        (WebCore::DOMTimerFireState::~DOMTimerFireState):
        (WebCore::DOMTimerFireState::nestedTimerInterval):
        (WebCore::shouldForwardUserGesture):
        (WebCore::userGestureTokenToForward):
        (WebCore::currentNestedTimerInterval):
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::fired):
        * page/DOMTimer.h:

2017-05-18  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingAudioSource should use the source sample rate
        https://bugs.webkit.org/show_bug.cgi?id=172297

        Reviewed by Eric Carlson.

        Covered by manual tests.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable): Using the audio source sample rate so that the converter does the right conversion.

2017-05-18  Andy Estes  <aestes@apple.com>

        Add "countryCode" to ApplePayErrorContactField
        https://bugs.webkit.org/show_bug.cgi?id=172264
        <rdar://problem/32004909>

        Reviewed by Anders Carlsson.

        Added ApplePayError tests to http/tests/ssl/applepay/ApplePaySession.html

        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/PaymentRequest.h:

2017-05-18  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove unnecessary call to AddToImplIncludes("RuntimeEnabledFeatures.h") in GenerateImplementation()
        https://bugs.webkit.org/show_bug.cgi?id=172236

        Reviewed by Chris Dumez.

        It is unnecessary for GenerateImplementation() to explicitly call AddToImplIncludes("RuntimeEnabledFeatures.h")
        to add the header RuntimeEnabledFeatures.h to the list of headers in the generated implementation
        as this header is added when GetRuntimeEnableFunctionName() is called. And GenerateImplementation()
        calls GetRuntimeEnableFunctionName().

        No functionality changed. So, no new tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2017-05-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r209608): Cross-origin plugin document opened in child window blocked by parent
        window CSP when object-src 'none' is set
        https://bugs.webkit.org/show_bug.cgi?id=172038
        <rdar://problem/32258262>

        Reviewed by Andy Estes.

        Fixes an issue where a cross-origin plugin document opened in a child window would inherit
        the Content Security Policy (CSP) of its opener. In particular, a cross-origin plugin
        document opened in a child window would be blocked when the CSP of its opener disallows
        plugins (e.g. object-source 'none').

        Prior to r209608 a document opened in a child window never inherited the CSP from its opener
        and a plugin document loaded in a subframe would unconditionally inherit the CSP from its
        parent frame. So, a plugin document opened in a child window would be allowed to load
        regardless of whether its opener had a CSP that prevented plugins. Following r209608 a
        document opened in a child window would inherit its CSP from its opener if and only if it
        would inherit the security origin from its opener (e.g. about:blank) or was a plugin
        document. The latter condition makes plugin documents opened in a child window unconditionally
        inherit the CSP from their opener and is the cause of this bug. It seems reasonable to exempt
        cross-origin plugin documents opened in a child window from the CSP inheritance rule because
        such documents cannot compromise the origin of their opener. Same-origin plugin documents
        opened in a child window will continue to inherit the CSP from their opener because such
        documents can compromise the origin of their opener.

        Tests: http/tests/security/contentSecurityPolicy/cross-origin-plugin-document-allowed-in-child-window.html
               http/tests/security/contentSecurityPolicy/plugin-blocked-in-about-blank-window.html
               http/tests/security/contentSecurityPolicy/same-origin-plugin-document-blocked-in-child-window.html

        * dom/Document.cpp:
        (WebCore::Document::shouldInheritContentSecurityPolicyFromOwner): Added.
        (WebCore::Document::initContentSecurityPolicy):
        * dom/Document.h:

2017-05-18  Keith Miller  <keith_miller@apple.com>

        WebAssembly API: test with neutered inputs
        https://bugs.webkit.org/show_bug.cgi?id=163899

        Reviewed by JF Bastien.

        Make it not possible to transfer an ArrayBuffer that is backed by a
        wasm memory.

        Test: workers/wasm-mem-post-message.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):

2017-05-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r217031, r217032, and r217037.
        https://bugs.webkit.org/show_bug.cgi?id=172293

        cause linking errors in Windows (Requested by yusukesuzuki on
        #webkit).

        Reverted changesets:

        "[JSC][DFG][DOMJIT] Extend CheckDOM to CheckSubClass"
        https://bugs.webkit.org/show_bug.cgi?id=172098
        http://trac.webkit.org/changeset/217031

        "Unreviewed, rebaseline for newly added ClassInfo"
        https://bugs.webkit.org/show_bug.cgi?id=172098
        http://trac.webkit.org/changeset/217032

        "Unreviewed, fix debug and non-JIT build"
        https://bugs.webkit.org/show_bug.cgi?id=172098
        http://trac.webkit.org/changeset/217037

2017-05-18  Per Arne Vollan  <pvollan@apple.com>

        Protect MediaDeviceRequest instance during context destruction.
        https://bugs.webkit.org/show_bug.cgi?id=172285
        <rdar://problem/30369017>

        Reviewed by Brent Fulgham.

        In MediaDevicesRequest::contextDestroyed(), the call to m_enumerationRequest->cancel() might
        end up deleting itself (MediaDevicesRequest). The std::function member m_completionHandler
        in MediaDevicesEnumerationRequest contains a captured variable of type
        RefPtr<MediaDevicesRequest>. When m_completionHandler is set to null in the cancel() method,
        the MediaDevicesRequest object will be deleted if the m_completionHandler member is holding
        the last reference.

        No new tests, since I am unable to reproduce.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::contextDestroyed):

2017-05-18  Antti Koivisto  <antti@apple.com>

        Design mode should not affect UA shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=171854
        <rdar://problem/32071037>

        Reviewed by Zalan Bujtas.

        Test: editing/deleting/search-shadow-tree-delete.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::editabilityFromContentEditableAttr):

            Ignore design mode for UA shadow trees.

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::~SearchInputType):
        (WebCore::SearchInputType::createShadowSubtree):
        (WebCore::SearchInputType::resultsButtonElement):
        (WebCore::SearchInputType::cancelButtonElement):
        * html/SearchInputType.h:

            Use RefPtr.

2017-05-18  Vanessa Chipirrás Navalón  <vchipirras@igalia.com>

        [GTK][GStreamer][MSE] Crash on youtube when MSE is enabled but gstreamer cant find the decoder element.
        https://bugs.webkit.org/show_bug.cgi?id=167120

        Reviewed by Žan Doberšek.

        This is because supportCodecs() doesn't check in runtime which plugins the player has.
        So, a static function which returns a map with the plugins has been created. That map is later
        used in the supportsCodecs() method to check if the requested codec matches any of the map.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializeGStreamerAndRegisterWebKitElements):
        The declaration is moved into this class.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::isAvailable): This function calls the implementation of
        initializeGstreamerAndRegisterWebKitElements function.
        (WebCore::MediaPlayerPrivateGStreamer::load): Ditto
        (WebCore::mimeTypeSet): Ditto
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h: It is static type to expose
        initializeGStreamerAndRegisterWebKitElements() function to be called from internal function
        "which runs before MediaPlayerPrivateGStreamerBase initialization but needs to have GStreamer initialized".
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::codecSet): It returns a map with the plugins has been created.
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsCodecs): To check if the requested codec
        matches any of the map from codecSet().

2017-05-18  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Align getDesiredSize with spec
        https://bugs.webkit.org/show_bug.cgi?id=172220

        Reviewed by Chris Dumez.

        Aligned implementation of getDesiredSize operation for both controllers:
        - https://streams.spec.whatwg.org/#readable-stream-default-controller-get-desired-size
        - https://streams.spec.whatwg.org/#readable-byte-stream-controller-get-desired-size

        Implementation slightly differs from spec as queueTotalSize refactoring is not
        yet implemented, but behavior is now similar.

        No new tests (already covered by WPT tests, corresponding expectations have been updated).

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerGetDesiredSize): Updated.
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamDefaultControllerGetDesiredSize): Updated.

2017-05-18  Tim Horton  <timothy_horton@apple.com>

        More WebKit2 header cleanup
        https://bugs.webkit.org/show_bug.cgi?id=172214

        Reviewed by Simon Fraser.

        * Modules/mediastream/UserMediaController.cpp:
        * Modules/mediastream/UserMediaController.h:

2017-05-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][DFG][DOMJIT] Extend CheckDOM to CheckSubClass
        https://bugs.webkit.org/show_bug.cgi?id=172098

        Reviewed by Saam Barati.

        Add DOMJIT interface IDL attribute. Which allows us to define checkSubClassPatchpoint function
        for that ClassInfo. And we move CheckSubClass patchpoint implementation to ClassInfo's member.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowProperties.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateImplementationIterableFunctions):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/IDLAttributes.json:
        * 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/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/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/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.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/JSTestTypedefs.cpp:
        * bridge/c/CRuntimeObject.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_method.cpp:
        * bridge/runtime_object.cpp:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/Node.idl:
        * domjit/JSDocumentDOMJIT.cpp:
        (WebCore::JSDocument::checkSubClassPatchpoint):
        (WebCore::DocumentDocumentElementDOMJIT::checkDOM): Deleted.
        (WebCore::DocumentBodyDOMJIT::checkDOM): Deleted.
        * domjit/JSDocumentFragmentDOMJIT.cpp: Copied from Source/JavaScriptCore/runtime/JSMap.cpp.
        (WebCore::JSDocumentFragment::checkSubClassPatchpoint):
        * domjit/JSElementDOMJIT.cpp: Copied from Source/JavaScriptCore/tools/JSDollarVM.cpp.
        (WebCore::JSElement::checkSubClassPatchpoint):
        * domjit/JSEventDOMJIT.cpp: Copied from Source/JavaScriptCore/tools/JSDollarVM.cpp.
        (WebCore::JSEvent::checkSubClassPatchpoint):
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::JSNode::checkSubClassPatchpoint):
        (WebCore::NodeFirstChildDOMJIT::checkDOM): Deleted.
        (WebCore::NodeLastChildDOMJIT::checkDOM): Deleted.
        (WebCore::NodeNextSiblingDOMJIT::checkDOM): Deleted.
        (WebCore::NodePreviousSiblingDOMJIT::checkDOM): Deleted.
        (WebCore::NodeParentNodeDOMJIT::checkDOM): Deleted.
        (WebCore::NodeNodeTypeDOMJIT::checkDOM): Deleted.
        (WebCore::NodeOwnerDocumentDOMJIT::checkDOM): Deleted.

2017-05-17  Youenn Fablet  <youenn@apple.com>

        r216999 broke win build
        https://bugs.webkit.org/show_bug.cgi?id=172257

        Unreviewed.

        * testing/Internals.cpp:
        (WebCore::Internals::setPageVisibility): Moving setPageVisibility out of MEDIA_STREAM compilation flag.

2017-05-17  Andy Estes  <aestes@apple.com>

        [Cocoa] errors are not propagated to PassKit when calling ApplePaySession.completePayment()
        https://bugs.webkit.org/show_bug.cgi?id=172253
        <rdar://problem/32258020>

        Reviewed by Dan Bernstein.

        In ApplePaySession::completePayment(), releaseReturnValue() was being called twice on the
        same convertedResult. Since the first call moved the errors vector out of convertedResult,
        the vector is empty in the second call. It's the second call that sends the result to the
        UI process, so we end up with an empty arary when we call PassKit's delegate completion
        handler.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::completePayment):

2017-05-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r217014.

        This change caused mac-wk2 LayoutTests to exit early due to
        crashes.

        Reverted changeset:

        "Resource Load Statistics: Grandfather domains for existing
        data records"
        https://bugs.webkit.org/show_bug.cgi?id=172155
        http://trac.webkit.org/changeset/217014

2017-05-17  Zalan Bujtas  <zalan@apple.com>

        Tighten TextIterator::handleTextNode run-renderer mapping logic.
        https://bugs.webkit.org/show_bug.cgi?id=172174

        Reviewed by Antti Koivisto.

        This patch ensure that when runs and renderers are getting out of sync
        we don't run into problems like webkit.org/b/172113 (where we end up
        using incorrect content start/end positions).

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):

2017-05-17  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Grandfather domains for existing data records
        https://bugs.webkit.org/show_bug.cgi?id=172155
        <rdar://problem/24913532>

        Reviewed by Alex Christensen.

        Test: http/tests/loading/resourceLoadStatistics/grandfathering.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setGrandfathered):
        (WebCore::ResourceLoadObserver::isGrandfathered):
        (WebCore::ResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval):
        (WebCore::ResourceLoadObserver::setGrandfatheringTime):
            Functions for testing and configuration.
            ResourceLoadObserver::setMinimumTimeBetweeenDataRecordsRemoval() changed as a result of moving
            WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval() here.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::createEncoderFromData):
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):
            Now contains endOfGrandfatheringTimestamp.
        (WebCore::ResourceLoadStatisticsStore::clearInMemoryAndPersistent):
            Now makes a call to m_grandfatherExistingWebsiteDataHandler().
        (WebCore::ResourceLoadStatisticsStore::setGrandfatherExistingWebsiteDataCallback):
        (WebCore::ResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval):
            Changed as a result of moving
            WebKit::WebResourceLoadStatisticsStore::setMinimumTimeBetweeenDataRecordsRemoval() here.
        (WebCore::ResourceLoadStatisticsStore::setGrandfatheringTime):
        (WebCore::ResourceLoadStatisticsStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor):
            Renamed since it now also takes grandfathering into account.
        (WebCore::ResourceLoadStatisticsStore::updateStatisticsForRemovedDataRecords):
            Fixed typo in local variable name.
        (WebCore::ResourceLoadStatisticsStore::handleFreshStartWithEmptyOrNoStore):
        (WebCore::ResourceLoadStatisticsStore::shouldRemoveDataRecords):
            Convenience function added.
        (WebCore::ResourceLoadStatisticsStore::dataRecordsBeingRemoved):
            Convenience function added.
        (WebCore::ResourceLoadStatisticsStore::dataRecordsWereRemoved):
            Convenience function added.
        (WebCore::ResourceLoadStatisticsStore::prevalentResourceDomainsWithoutUserInteraction): Deleted.
            Replaced by ResourceLoadStatisticsStore::topPrivatelyControlledDomainsToRemoveWebsiteDataFor().
        * loader/ResourceLoadStatisticsStore.h:

2017-05-17  Zalan Bujtas  <zalan@apple.com>

        Debug ASSERT: WebCore::RenderImageResource::shutdown
        https://bugs.webkit.org/show_bug.cgi?id=172238
        <rdar://problem/30064601>

        Reviewed by Simon Fraser.

        While constructing new renderers, as part of the render tree update, we check if the insertion point is valid for them. 
        When this newly constructed child renderer can't be injected to a specific place, we destroy it right away.
        This assert was added with the assumption that the image resource object gets initialized
        (through RenderObject::initializeStyle) even when the renderer turns out to be invalid.

        Test: fast/images/assert-when-insertion-point-is-incorrect.html

        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::RenderImageResource):
        (WebCore::RenderImageResource::shutdown):
        * rendering/RenderImageResource.h:

2017-05-17  Per Arne Vollan  <pvollan@apple.com>

        Crash under WebCore::AudioSourceProviderAVFObjC::process().
        https://bugs.webkit.org/show_bug.cgi?id=172101
        rdar://problem/27446589

        Reviewed by Jer Noble.

        Calling the function MTAudioProcessingTapGetSourceAudio when the value of the
        MTAudioProcessingTapRef parameter is null, will lead to a null dereference.
        This can for example happen if MediaPlayerPrivateAVFoundationObjC::cancelLoad()
        is called on the main thread while MediaToolbox is calling the
        WebCore::AudioSourceProviderAVFObjC::processCallback function on a secondary
        thread. MediaPlayerPrivateAVFoundationObjC::cancelLoad() will then call
        AudioSourceProviderAVFObjC::setPlayerItem(nullptr), which will call
        AudioSourceProviderAVFObjC::destroyMix(), which will set m_tap to null. When
        AudioSourceProviderAVFObjC::process is called on the secondary thread, using
        the m_tap member in the call to MTAudioProcessingTapGetSourceAudio, the process
        will crash.

        No new tests since I am not able to reproduce.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::initCallback):
        (WebCore::AudioSourceProviderAVFObjC::process):

2017-05-17  Chris Dumez  <cdumez@apple.com>

        Setting URL.search to '' results in a stringified URL ending in '?'
        https://bugs.webkit.org/show_bug.cgi?id=162345
        <rdar://problem/31800441>

        Reviewed by Alex Christensen.

        As per the specification for the URL.search setter [1], if the given value is
        the empty string, then we should set the URL's query to null. We would
        previously set the URL's query to the empty string in this case. This aligns
        our behavior with Firefox and Chrome.

        [1] https://url.spec.whatwg.org/#dom-url-search

        No new tests, updated existing tests.

        * html/URLUtils.h:
        (WebCore::URLUtils<T>::setSearch):

2017-05-17  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] videoWidth and videoHeight should be set when 'loadedmetadata' event fires
        https://bugs.webkit.org/show_bug.cgi?id=172223
        <rdar://problem/31899755>

        Reviewed by Jer Noble.

        Test: fast/mediastream/get-user-media-on-loadedmetadata.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): If a stream has
        a video track, return HaveNothing until we have a sample.
       
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::tick): Optionally delay the next sample.
        (WebCore::MockRealtimeAudioSource::delaySamples):
        * platform/mock/MockRealtimeAudioSource.h:

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::delaySamples):
        (WebCore::MockRealtimeVideoSource::generateFrame): Optionally delay the next sample.
        * platform/mock/MockRealtimeVideoSource.h:

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

2017-05-17  Youenn Fablet  <youenn@apple.com>

        iOS WebRTC Media Capture should not allow camera capture from background tab
        https://bugs.webkit.org/show_bug.cgi?id=172200

        Reviewed by Eric Carlson.

        Test: platform/ios/mediastream/getUserMedia-disabled-in-background-tabs.html and manual tests.

        Making Video Capture Factory aware of Document visibility changes.
        On iOS, muting/unmuting the current video source according Document visibility.
        Not using Document visibility change observer as factories are platform and cannot implement
        the visibility observer interface without moving the visibility observer interface.

        Introducing internals API to switch on/off the page visibility.

        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        (WebCore::Document::notifyVisibilityChangedToMediaCapture):
        * dom/Document.h:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setVisibility):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSourceFactory::setVisibility):
        * testing/Internals.cpp:
        (WebCore::Internals::setPageVisibility):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        When the image decoding thread makes a callOnMainThread(), ensure all the objects it needs are protected
        https://bugs.webkit.org/show_bug.cgi?id=171614

        Reviewed by David Kilzer.

        The asynchronous image decoding was designed to not block the main thread if
        the image is deleted. To achieve that we allow decoding the current frame
        even if it is not going to be used after closing the decoding queue. We 
        protect all the objects which the decoding thread uses. But when a frame
        finishes decoding the native image frame is cached on the main thread. Not
        all of the objects are protected when the callOnMainThread() is dispatched.
        The ImageFrameCache and the ImageDecoder objects are not protected.

        This might lead to two kinds of crashes:
        1. A segfault inside the ImageDecoder trying to access one of its member
        2. A segfault inside the ImageFrameCache trying to access one of its frames

        The fix is to protect the ImageFrameCache and the ImageDecoder when the
        decoding thread makes a callOnMainThread(). Also switch all the pointers
        the decoding threads protect to be ThreadSafeRefCounted.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::startAsyncDecodingQueue):
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/image-decoders/ImageDecoder.h:

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

        A URL type is vended for a non-URL plain text string when starting data interaction
        https://bugs.webkit.org/show_bug.cgi?id=172228
        <rdar://problem/32166729>

        Reviewed by Andy Estes.

        Previously, when writing a plain text string to WebItemProviderPasteboard, we would write an NSString directly
        to the item provider by using built-in functionality in NSString+UIItemProvider. However, this causes plain
        strings such as "apple" to be considered URLs, since -[NSURL URLWithString:] creates a non-null NSURL. To fix
        this, we instead write the string as UTF8 data, for the UTI kUTTypeUTF8PlainText, if the plain text is not a
        URL. If the plain text is clearly a URL (determined by constructing a new WebCore URL with no base URL and the
        plaintext string as the absolute URL) then we additionally write an NSURL to the pasteboard.

        2 new API tests:
        DataInteractionTests.SinglePlainTextWordTypeIdentifiers
        DataInteractionTests.SinglePlainTextURLTypeIdentifiers

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::addRepresentationsForPlainText):
        (WebCore::PlatformPasteboard::writeObjectRepresentations):

2017-05-15  Jiewen Tan  <jiewen_tan@apple.com>

        Replace CryptoOperationData with BufferSource for WebKitSubtleCrypto
        https://bugs.webkit.org/show_bug.cgi?id=172146
        <rdar://problem/32122256>

        Reviewed by Brent Fulgham.

        In this patch, we replaces CryptoOperationData with BufferSource for WebKitSubtleCrypto in
        the custom binding codes.

        Test: crypto/webkitSubtle/import-export-raw-key-leak.html

        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::JSWebKitSubtleCrypto::encrypt):
        (WebCore::JSWebKitSubtleCrypto::decrypt):
        (WebCore::JSWebKitSubtleCrypto::sign):
        (WebCore::JSWebKitSubtleCrypto::verify):
        (WebCore::JSWebKitSubtleCrypto::digest):
        (WebCore::JSWebKitSubtleCrypto::importKey):
        (WebCore::JSWebKitSubtleCrypto::unwrapKey):
        * crypto/WebKitSubtleCrypto.idl:

2017-05-17  Youenn Fablet  <youenn@apple.com>

        Move-related refactoring on UserMediaPermissionRequestProxy
        https://bugs.webkit.org/show_bug.cgi?id=172195

        Reviewed by Alex Christensen.

        No behavioral change.

        * platform/mediastream/RealtimeMediaSourceCenter.h: Cleaning the function definition.

2017-05-17  David Kilzer  <ddkilzer@apple.com>

        BlobDataFileReference::generateReplacementFile() should use mkstemp()
        <https://webkit.org/b/172192>

        Reviewed by Brent Fulgham.

        * platform/network/mac/BlobDataFileReferenceMac.mm:
        (WebCore::BlobDataFileReference::generateReplacementFile): Use
        mkstemp().

2017-05-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r216974.

        Revision caused consistent timeouts on all platforms.

        Reverted changeset:

        "Add a RuntimeEnabledFeature for display: contents, defaulted
        to false."
        https://bugs.webkit.org/show_bug.cgi?id=171984
        http://trac.webkit.org/changeset/216974

2017-05-17  Nan Wang  <n_wang@apple.com>

        ASSERTION FAILED in WebCore::AccessibilityNodeObject::insertChild()
        https://bugs.webkit.org/show_bug.cgi?id=171927
        <rdar://problem/32109781>

        Reviewed by Chris Fleizach.

        The nextSibling() logic might include the continuation sibling that's not
        the child of the current renderer. Make sure we only insert the valid child.

        Test: accessibility/insert-children-assert.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::nextSibling):

2017-05-17  Ryosuke Niwa  <rniwa@webkit.org>

        getElementById can return a wrong elemnt when a matching element is removed during beforeload event
        https://bugs.webkit.org/show_bug.cgi?id=171374

        Reviewed by Brent Fulgham.

        The bug was caused by HTMLLinkElement firing beforeload event inside insertedInto before the tree state is updated.
        Delay the event dispatch to the post insertion callback.

        Test: fast/html/link-element-removal-during-beforeload.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::insertedInto):
        (WebCore::HTMLLinkElement::finishedInsertingSubtree):
        * html/HTMLLinkElement.h:

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

        Interacting with WKHTTPCookieStores before creating WKWebViews and WKProcessPools should affect cookies used
        https://bugs.webkit.org/show_bug.cgi?id=171987

        Reviewed by Brady Eidson.

        Covered by new API tests.

        * CMakeLists.txt:
        * platform/Cookie.h:
        (WebCore::Cookie::Cookie):
        (WebCore::Cookie::isNull):
        (WebCore::CookieHash::hash):
        (WebCore::CookieHash::equal):
        (WTF::HashTraits<WebCore::Cookie>::emptyValue):
        (WTF::HashTraits<WebCore::Cookie>::constructDeletedValue):
        (WTF::HashTraits<WebCore::Cookie>::isDeletedValue):
        * platform/network/Cookie.cpp: Added.
        (WebCore::Cookie::operator==):
        (WebCore::Cookie::hash):
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie *):
        (WebCore::Cookie::operator==):
        (WebCore::Cookie::hash):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::setCookies):
        Use NSHTTPCookie's hash and equality comparison to more closely match the NSHTTPCookie behavior.

2017-05-17  Emilio Cobos Álvarez  <ecobos@igalia.com>

        Add a RuntimeEnabledFeature for display: contents, defaulted to false.
        https://bugs.webkit.org/show_bug.cgi?id=171984

        Reviewed by Antti Koivisto.

        The "defaulted to false" is not only because there are spec issues,
        but because I ran the WPT suite, and there was a fair amount of
        crashes and messed render trees.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDisplayContentsEnabled):
        (WebCore::RuntimeEnabledFeatures::displayContentsEnabled):

2017-05-17  Antti Koivisto  <antti@apple.com>

        Regression (198943): <marquee> shouldn't wrap text
        https://bugs.webkit.org/show_bug.cgi?id=172217

        Reviewed by Andreas Kling.

        RenderMarquee::updateMarqueeStyle mutated the style and then expected it to inherit to children.
        This doesn't work anymore because render tree construction is now separated from style resolution
        where inheritance happens.

        Test: fast/html/marquee-child-wrap.html

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

            Implement marquee hacks in adjustRenderStyle instead. This can't do the childrenInline check
            the previous code had but it wasn't working anyway (there are no children when updateMarqueeStyle
            gets called).

        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::updateMarqueeStyle):

            This no longer needs mutable style.

2017-05-16  David Kilzer  <ddkilzer@apple.com>

        Remove C-style casts by using xmlDocPtr instead of void*
        <https://webkit.org/b/172189>

        Reviewed by Alex Christensen.

        * dom/TransformSource.h: Fix whitespace indentation.
        (typedef PlatformTransformSource): Use xmlDocPtr not void*.
        * dom/TransformSourceLibxslt.cpp:
        (WebCore::TransformSource::~TransformSource): Remove cast.
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::document): Remove cast.
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xmlDocPtrFromNode): Remove casts.
        * xml/parser/XMLDocumentParser.h:
        (WebCore::xmlDocPtrForString): Update declaration to return
        xmlDocPtr not void*.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd): Change type of local
        variable from void* to xmlDocPtr.
        (WebCore::xmlDocPtrForString): Update to return xmlDocPtr
        not void*.

2017-05-16  Sam Weinig  <sam@webkit.org>

        Bring Notification.idl up to spec
        https://bugs.webkit.org/show_bug.cgi?id=172156

        Reviewed by Chris Dumez.

        Test: http/tests/notifications/notification.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::create):
        (WebCore::Notification::Notification):
        (WebCore::Notification::show):
        (WebCore::directionString): Deleted.
        (WebCore::Notification::permission): Deleted.
        (WebCore::Notification::permissionString): Deleted.
        * Modules/notifications/Notification.h:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationClient.h:
        * Modules/notifications/NotificationDirection.h: Added.
        * Modules/notifications/NotificationPermission.h: Added.
        * Modules/notifications/NotificationPermission.idl: Added.
        * Modules/notifications/NotificationPermissionCallback.h:
        * Modules/notifications/NotificationPermissionCallback.idl:
        Bring up to spec, replacing DOMStrings with enums where appropriate and adding
        additional readonly properties to Notification to mirror options provided
        in construction.

2017-05-16  Zalan Bujtas  <zalan@apple.com>

        Do not skip <slot> children when collecting content for innerText.
        https://bugs.webkit.org/show_bug.cgi?id=172113
        <rdar://problem/30362324>

        Reviewed by Ryosuke Niwa and Brent Fulgham.

        "display: contents" elements do not generate renderers but their children might.
        This patch ensure that we don't skip them while collecting text content.  

        Test: fast/text/inner-text-should-include-slot-subtree.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):

2017-05-16  Filip Pizlo  <fpizlo@apple.com>

        GCController::garbageCollectNowIfNotDoneRecently should request Async Full GCs
        https://bugs.webkit.org/show_bug.cgi?id=172204

        Reviewed by Saam Barati.

        No new tests because existing tests will tell us if there is a problem.
        
        The goal of this change is to reduce the likelihood that we block for a GC. We want it to be
        benchmark-neutral.
        
        It's a 0.14% speed-up on JetStream with 24% probability.
        
        It's a 0.12% slow-down on PLT3 with 43% probability.
        
        So it's neutral on my machine.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNowIfNotDoneRecently):

2017-05-16  Tim Horton  <timothy_horton@apple.com>

        [macOS] REGRESSION: Drag images for links with right-to-left titles are incorrect (172006)
        https://bugs.webkit.org/show_bug.cgi?id=172006
        <rdar://problem/32165137>

        Reviewed by Dean Jackson.

        * platform/mac/DragImageMac.mm:
        (WebCore::LinkImageLayout::LinkImageLayout):
        (WebCore::createDragImageForLink):
        (WebCore::LinkImageLayout::addLine): Deleted.
        * platform/spi/cocoa/CoreTextSPI.h:
        Set and paint the entire frame as a single unit, making use of the
        CTFrameMaximumNumberOfLines attribute to limit the number of lines.
        This gives CoreText power over text alignment and makes RTL text lay
        out correctly.

2017-05-16  Chris Dumez  <cdumez@apple.com>

        Implement DOMMatrix / DOMMatrixReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=110001

        Reviewed by Sam Weinig and Simon Fraser.

        Implement DOMMatrix / DOMMatrixReadOnly as per:
        - https://drafts.fxtf.org/geometry/#DOMMatrix

        For now, these new types co-exist with WebKitCSSMatrix / SVGMatrix. However, in the future,
        WebKitCSSMatrix / SVGMatrix are supposed to become aliases to DOMMatrix.

        Most of it has been implemented. What remaining to be implemented is:
        - Make WebKitCSSMatrix / SVGMatrix aliases to DOMMatrix
        - DOMMatrix.fromFloat32Array() / fromFloat64Array()
        - DOMMatrixReadOnly.fromFloat32Array() / fromFloat64Array() / toFloat32Array() / toFloat64Array()
        - DOMMatrixReadOnly.transformPoint().

        Tests: imported/w3c/web-platform-tests/css/geometry-1/*

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        Fix a bug in the bindings generator causing the generator code for
        "Constructor(optional (DOMString or sequence<unrestricted double>) init)" to be wrong
        and not build.

        * css/DOMMatrix.cpp: Added.
        (WebCore::DOMMatrix::DOMMatrix):
        (WebCore::DOMMatrix::fromMatrix):
        (WebCore::DOMMatrix::multiplySelf):
        (WebCore::DOMMatrix::preMultiplySelf):
        (WebCore::DOMMatrix::translateSelf):
        (WebCore::DOMMatrix::scaleSelf):
        (WebCore::DOMMatrix::scale3dSelf):
        (WebCore::DOMMatrix::rotateSelf):
        (WebCore::DOMMatrix::rotateFromVectorSelf):
        (WebCore::DOMMatrix::rotateAxisAngleSelf):
        (WebCore::DOMMatrix::skewXSelf):
        (WebCore::DOMMatrix::skewYSelf):
        (WebCore::DOMMatrix::invertSelf):
        (WebCore::DOMMatrix::setMatrixValueForBindings):
        * css/DOMMatrix.h: Added.
        (WebCore::DOMMatrix::create):
        (WebCore::DOMMatrix::setA):
        (WebCore::DOMMatrix::setB):
        (WebCore::DOMMatrix::setC):
        (WebCore::DOMMatrix::setD):
        (WebCore::DOMMatrix::setE):
        (WebCore::DOMMatrix::setF):
        (WebCore::DOMMatrix::setM11):
        (WebCore::DOMMatrix::setM12):
        (WebCore::DOMMatrix::setM13):
        (WebCore::DOMMatrix::setM14):
        (WebCore::DOMMatrix::setM21):
        (WebCore::DOMMatrix::setM22):
        (WebCore::DOMMatrix::setM23):
        (WebCore::DOMMatrix::setM24):
        (WebCore::DOMMatrix::setM31):
        (WebCore::DOMMatrix::setM32):
        (WebCore::DOMMatrix::setM33):
        (WebCore::DOMMatrix::setM34):
        (WebCore::DOMMatrix::setM41):
        (WebCore::DOMMatrix::setM42):
        (WebCore::DOMMatrix::setM43):
        (WebCore::DOMMatrix::setM44):
        * css/DOMMatrix.idl: Added.
        * css/DOMMatrixInit.h: Added.
        * css/DOMMatrixInit.idl: Added.
        * css/DOMMatrixReadOnly.cpp: Added.
        (WebCore::DOMMatrixReadOnly::DOMMatrixReadOnly):
        (WebCore::DOMMatrixReadOnly::validateAndFixup):
        (WebCore::DOMMatrixReadOnly::fromMatrix):
        (WebCore::DOMMatrixReadOnly::isIdentity):
        (WebCore::DOMMatrixReadOnly::setMatrixValue):
        (WebCore::DOMMatrixReadOnly::translate):
        (WebCore::DOMMatrixReadOnly::flipX):
        (WebCore::DOMMatrixReadOnly::flipY):
        (WebCore::DOMMatrixReadOnly::multiply):
        (WebCore::DOMMatrixReadOnly::scale):
        (WebCore::DOMMatrixReadOnly::scale3d):
        (WebCore::DOMMatrixReadOnly::rotate):
        (WebCore::DOMMatrixReadOnly::rotateFromVector):
        (WebCore::DOMMatrixReadOnly::rotateAxisAngle):
        (WebCore::DOMMatrixReadOnly::skewX):
        (WebCore::DOMMatrixReadOnly::skewY):
        (WebCore::DOMMatrixReadOnly::inverse):
        (WebCore::DOMMatrixReadOnly::toString):
        * css/DOMMatrixReadOnly.h: Added.
        (WebCore::DOMMatrixReadOnly::create):
        (WebCore::DOMMatrixReadOnly::a):
        (WebCore::DOMMatrixReadOnly::b):
        (WebCore::DOMMatrixReadOnly::c):
        (WebCore::DOMMatrixReadOnly::d):
        (WebCore::DOMMatrixReadOnly::e):
        (WebCore::DOMMatrixReadOnly::f):
        (WebCore::DOMMatrixReadOnly::m11):
        (WebCore::DOMMatrixReadOnly::m12):
        (WebCore::DOMMatrixReadOnly::m13):
        (WebCore::DOMMatrixReadOnly::m14):
        (WebCore::DOMMatrixReadOnly::m21):
        (WebCore::DOMMatrixReadOnly::m22):
        (WebCore::DOMMatrixReadOnly::m23):
        (WebCore::DOMMatrixReadOnly::m24):
        (WebCore::DOMMatrixReadOnly::m31):
        (WebCore::DOMMatrixReadOnly::m32):
        (WebCore::DOMMatrixReadOnly::m33):
        (WebCore::DOMMatrixReadOnly::m34):
        (WebCore::DOMMatrixReadOnly::m41):
        (WebCore::DOMMatrixReadOnly::m42):
        (WebCore::DOMMatrixReadOnly::m43):
        (WebCore::DOMMatrixReadOnly::m44):
        (WebCore::DOMMatrixReadOnly::is2D):
        (WebCore::DOMMatrixReadOnly::fromMatrixHelper):
        * css/DOMMatrixReadOnly.idl: Added.
        * css/WebKitCSSMatrix.h:
        * css/WebKitCSSMatrix.idl:
        * svg/SVGMatrix.h:
        * svg/SVGMatrix.idl:

2017-05-16  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] AudioSampleBufferList::zeroABL takes byte count, not sample count
        https://bugs.webkit.org/show_bug.cgi?id=172194
        <rdar://problem/32233799>

        Reviewed by Jer Noble.

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::render): Pass number of bytes to zero,
        not number of samples.

2017-05-16  Mark Lam  <mark.lam@apple.com>

        WorkerRunLoop::Task::performTask() needs to null check context->script() before use.
        https://bugs.webkit.org/show_bug.cgi?id=172193
        <rdar://problem/32225346>

        Reviewed by Filip Pizlo.

        According to https://build-safari.apple.com/results/Trunk%20Fuji%20GuardMalloc%20Production%20WK2%20Tests/r216929_459760e0918316187c8e52c6585a3a9ba9181204%20(12066)/results.html,
        we see a crash with this crash trace:

        Thread 13 Crashed:: WebCore: Worker
        0 com.apple.WebCore        0x00000001099607b2 WebCore::WorkerScriptController::isTerminatingExecution() const + 18
        1 com.apple.WebCore        0x000000010995ebbf WebCore::WorkerRunLoop::runCleanupTasks(WebCore::WorkerGlobalScope*) + 143
        2 com.apple.WebCore        0x000000010995e80f WebCore::WorkerRunLoop::run(WebCore::WorkerGlobalScope*) + 111
        3 com.apple.WebCore        0x00000001099621b6 WebCore::WorkerThread::workerThread() + 742
        4 com.apple.JavaScriptCore 0x000000010a964b92 WTF::threadEntryPoint(void*) + 178
        5 com.apple.JavaScriptCore 0x000000010a964a69 WTF::wtfThreadEntryPoint(void*) + 121
        6 libsystem_pthread.dylib  0x00007fffbdb5caab _pthread_body + 180
        7 libsystem_pthread.dylib  0x00007fffbdb5c9f7 _pthread_start + 286
        8 libsystem_pthread.dylib  0x00007fffbdb5c1fd thread_start + 13

        ... and the crashing address is:

        Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000022

        0x0000000000000022 is the offset of m_scheduledTerminationMutex in the
        WorkerScriptController.  This means that WorkerScriptController::isTerminatingExecution()
        is passed a NULL this pointer.  This means that it's possible to have a race
        where a WorkerRunLoop::Task gets enqueued beyond the Cleanup task that deletes the
        context->script().  As a result, WorkerRunLoop::Task::performTask() (called by
        runCleanupTasks()) may see a null context->script().

        Hence, WorkerRunLoop::Task::performTask() should null check context->script()
        before invoking the isTerminatingExecution() query on it.

        No new tests because this is already covered by existing tests.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::Task::performTask):

2017-05-16  Youenn Fablet  <youenn@apple.com>

        Modernize WebKit2 getUserMedia passing of parameters
        https://bugs.webkit.org/show_bug.cgi?id=172161

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/RealtimeMediaSourceCenter.h: Using WTF::Function to enable capture Ref<>.

2017-05-16  Jeremy Jones  <jeremyj@apple.com>

        Captions and subtitles not showing up in picture-in-picture for MSE content.
        https://bugs.webkit.org/show_bug.cgi?id=172145

        Reviewed by Eric Carlson.

        No new tests as this has no affect on the DOM.

        Add TextTrackRepresentation code from MediaPlayerPrivateAVFoundationObj to MediaPlayerPrivateMediaSourceAVFObjc.
        This moves the TextTrackRepresentation platfrom layer into the fullscreen container layer when going into
        pip for fullscreen, allowing the captions to be visible.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVideoFullscreenFrame):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::requiresTextTrackRepresentation):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::syncTextTrackBounds):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setTextTrackRepresentation):

2017-05-16  David Kilzer  <ddkilzer@apple.com>

        WebCore::leakCGColor() needs CF_RETURNS_RETAINED annotation
        <https://webkit.org/b/172190>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::leakCGColor): Annotate with CF_RETURNS_RETAINED since
        it does not follow the CF naming convention, which means the
        expected behavior can't be inferred by the clang static
        analyzer.

2017-05-16  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingVideoSource should support sinkWants for rotation
        https://bugs.webkit.org/show_bug.cgi?id=172123
        <rdar://problem/32200017>

        Reviewed by Eric Carlson.

        Covered by manual testing.

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::AddOrUpdateSink): Triggering pixel rotation based on sink.
        (WebCore::RealtimeOutgoingVideoSource::sendFrame): Doing the rotation using libwebrtc API.
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

2017-05-16  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r212513): LastResort is platform-dependent, so its semantics should not be required to perform font loading correctly.
        https://bugs.webkit.org/show_bug.cgi?id=168487

        Reviewed by Antti Koivisto.

        There are three ways a Web author can chain multiple font files together:
        1. Multiple entries in the "src" descriptor in an @font-face rule
        2. Multiple @font-face rules with the same "font-family" descriptor
        3. Multiple entries in the "font-family" property on an element

        Before r212513, the code which iterated across #2 and #3 above could have
        triggered each item in the chain to download. r212513 tried to solve this
        by using LastResort as the interstitial font used during downloads, because
        LastResort supports every character and therefore solves #3 above. However,
        this change had a few problems:

        1. Previously, our code would try to avoid using the interstitial font for
        layout or rendering whenever possible (because one of the chains above may
        have named a local font which would be better to use). In order to use the
        benefits of LastResort, I had to remove this avoidance logic and make
        WebKit try to use the interstitial font as often as possible. However, due
        to the large metrics of LastResort, this means that offsetWidth queries
        during font loading would be wildly inaccurate, causing Google Docs to break.
        2. It also means that canvas drawing during font loading would actually draw
        LastResort, causing Bing maps to break.
        3. LastResort is platform-specific, so only platforms which have it would
        actually be able to load fonts correctly.

        Instead, we should keep the older logic about avoiding using the
        interstitial font so that loading has a better experience for the user.
        We solve the unnecessary download problem by giving our loading code a
        downloading policy enum, which has two values: allow downloads or forbid
        downloads. Whenever our loading code returns the interstitial font, we
        continue our search, but we change the policy to forbid downloads.

        There is one piece of subtlety, though: It is more common for web authors
        to put good fallbacks in the "font-family" property than in the "src"
        descriptor inside @font-face. This means that we shouldn't exhaustively
        search through the @font-face src list first. Instead, we should look
        through the src list until we hit a non-local font, and then immediately
        start looking through the other other chains.

        Tests: fast/text/font-download-font-face-src-list.html
               fast/text/font-download-font-family-property.html
               fast/text/font-download-remote-fallback-all.html
               fast/text/font-interstitial-invisible-width-while-loading.html
               fast/text/font-weight-download-3.html
               fast/text/web-font-load-fallback-during-loading-2.html
               fast/text/web-font-load-invisible-during-loading.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontLoadEventOccurred): Implement support for
        the font download policy.
        (WebCore::CSSFontFace::setStatus): After 3 seconds of loading, we
        will start drawing the fallback font. However, for testing, we have an
        internal setting to make this switch happen immediately. This patch now
        requires that this internal switch happen synchronously.
        (WebCore::CSSFontFace::pump): Implement support for the font download
        policy.
        (WebCore::CSSFontFace::load): Ditto.
        (WebCore::CSSFontFace::font): Ditto.
        * css/CSSFontFace.h: Ditto.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadingFontSoon): Implement support for
        synchronous font download timeouts.
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges): Implement support for the
        font download policy.
        * platform/graphics/Font.cpp: Add new flag which represents if the
        interstitial font was created after the 3 second timeout or before.
        Previously, we would distinguish between these two cases by knowing
        that one font was LastResort and the other font was a fallback. Now that
        we're using fallback fonts on both sides of the 3 second timeout, we
        now no longer know which one should be invisible. This new enum solves
        this problem.
        (WebCore::Font::Font):
        (WebCore::Font::verticalRightOrientationFont):
        (WebCore::Font::uprightOrientationFont):
        * platform/graphics/Font.h: Ditto.
        (WebCore::Font::create):
        (WebCore::Font::origin):
        (WebCore::Font::visibility):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontCascade.cpp: We try to fall back to a local() font
        during downloads, but there might not be one that we can use. Therefore, we
        can't use the presence of the interstitial font to detect if we should paint
        invisibly. Instead, we can move this logic into the font-specific part of
        painting, and consult with the specific font to know if it was created from
        a timed-out @font-face rule or not.
        (WebCore::FontCascade::drawText):
        (WebCore::shouldDrawIfLoading):
        (WebCore::FontCascade::drawGlyphBuffer):
        (WebCore::FontCascade::drawEmphasisMarks):
        * platform/graphics/FontCascade.h:
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForVariant): Implement the logic
        described above where we switch the policy if we encounter the intestitial
        font.
        (WebCore::FontCascadeFonts::glyphDataForNormalVariant): Ditto.
        (WebCore::glyphPageFromFontRanges): Ditto.
        * platform/graphics/FontRanges.cpp: Implement support for the font download
        policy.
        (WebCore::FontRanges::Range::font):
        (WebCore::FontRanges::glyphDataForCharacter):
        (WebCore::FontRanges::fontForCharacter):
        (WebCore::FontRanges::fontForFirstRange):
        * platform/graphics/FontRanges.h:
        * platform/graphics/FontSelector.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::lastResortFallbackFontForEveryCharacter): Deleted.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::lastResortFallbackFontForEveryCharacter): Deleted.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFontForEveryCharacter): Deleted.

2017-05-16  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Move setCollapedWhitespaceWidth call to updateLineConstrains.
        https://bugs.webkit.org/show_bug.cgi?id=172178

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::updateLineConstrains):
        (WebCore::SimpleLineLayout::createLineRuns):

2017-05-16  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Return default device list until user gives permission to capture
        https://bugs.webkit.org/show_bug.cgi?id=172168
        <rdar://problem/31816884>

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/media-devices-enumerate-devices.html

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::filterDeviceList): Remove all but the "default" number of
        devices of each type.
        (WebCore::MediaDevicesRequest::start): Call filterDeviceList.
        * Modules/mediastream/MediaDevicesRequest.h:

2017-05-16  Claudio Saavedra  <csaavedra@igalia.com>

        Silent a few warnings about unused parameters
        https://bugs.webkit.org/show_bug.cgi?id=172169

        Reviewed by Sam Weinig.

        * page/Page.cpp:
        (WebCore::Page::mainFrameLoadStarted):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::toData):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::partitionName):

2017-05-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebItemProviderPasteboard should be robust when temporary files are missing path extensions
        https://bugs.webkit.org/show_bug.cgi?id=172170

        Reviewed by Tim Horton.

        Makes a slight adjustment to the temporary file URLs are handled when using WebItemProviderPasteboard to load
        data off of item providers. Previously, we would bail early and not load any data if the temporary URL is
        missing an extension. Since the switch to NSItemProviders from UIItemProviders, some types of temporary files
        generated by item providers are missing extensions, so this extra check is meaningless.

        Covered by existing data interaction unit tests.

        * platform/ios/WebItemProviderPasteboard.mm:
        (temporaryFileURLForDataInteractionContent):
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):

2017-05-16  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] GLContextEGL::createWPEContext() should fall back to pbuffer-based contexts when offscreen target provides no native window
        https://bugs.webkit.org/show_bug.cgi?id=172162

        Reviewed by Carlos Garcia Campos.

        When creating an offscreen GLContext, the underlying implementation might
        provide a mock native window that's to be used as the window target upon
        which a window-based GLContext should be created. But we should also support
        falling back to pbuffer-based GLContexts when the underlying implementation
        can't provide such mock targets.

        * platform/graphics/egl/GLContextEGLWPE.cpp:
        (WebCore::GLContextEGL::createWPEContext):

2017-05-16  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Name more GSource-based RunLoop::Timers
        https://bugs.webkit.org/show_bug.cgi?id=172158

        Reviewed by Carlos Garcia Campos.

        * platform/glib/MainThreadSharedTimerGLib.cpp:
        (WebCore::MainThreadSharedTimer::MainThreadSharedTimer):
        Specify 'MainThreadSharedTimer' as the name of this GSource-based RunLoop::Timer.

2017-05-16  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableStreamBYOBReader releaseLock()
        https://bugs.webkit.org/show_bug.cgi?id=172111

        Reviewed by Chris Dumez.

        Implemented ReadableStreamBYOBReader releaseLock():
        - https://streams.spec.whatwg.org/#byob-reader-release-lock;
        - https://streams.spec.whatwg.org/#readable-stream-reader-generic-release.

        Added tests to check releaseLock behavior.

        * Modules/streams/ReadableStreamBYOBReader.js:
        (releaseLock): Implemented.
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamReaderGenericRelease): Aligned with spec.

2017-05-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Try to fix GTK+ build with MEDIA_STREAM enabled after r216918.

        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints):

2017-05-16  Youenn Fablet  <youenn@apple.com>

        Remove MediaConstraintsData and MediaConstraintsImpl
        https://bugs.webkit.org/show_bug.cgi?id=172132

        Reviewed by Eric Carlson.

        No observable change of behavior.

        Removing MediaConstraintsData and MediaConstraintsImpl allows simplifying the code.
        Further simplified the code by making MediaConstraints no longer ref counted and now a struct.
        Simplified some RealtimeMediaSource subclasses by removing unused MediaConstraints class members.

        * CMakeLists.txt: Removing MediaConstraintsImpl.cpp.
        * Modules/mediastream/MediaConstraintsImpl.cpp: Removed.
        * Modules/mediastream/MediaConstraintsImpl.h: Removed.
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::createMediaConstraints):
        (WebCore::MediaDevices::getUserMedia):
        (WebCore::createMediaConstraintsImpl): Deleted.
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::createMediaConstraints):
        (WebCore::MediaStreamTrack::applyConstraints):
        (WebCore::createMediaConstraintsImpl): Deleted.
        * Modules/mediastream/MediaTrackConstraints.cpp:
        (WebCore::createMediaConstraints):
        (WebCore::createMediaConstraintsImpl): Deleted.
        * Modules/mediastream/MediaTrackConstraints.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start):
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::allow):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::audioConstraints):
        (WebCore::UserMediaRequest::videoConstraints):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::addDefaultVideoConstraints):
        (WebCore::MediaConstraints::isConstraintSet):
        (WebCore::MediaConstraints::setDefaultVideoConstraints):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaConstraints::~MediaConstraints): Deleted.
        (WebCore::MediaConstraints::MediaConstraints): Deleted.
        * platform/mediastream/MediaStreamConstraintsValidationClient.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::selectSettings):
        (WebCore::RealtimeMediaSource::supportsConstraints):
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::supportedConstraints): Deleted.
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::supportedConstraints): Deleted.
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
        * platform/mock/MockRealtimeMediaSource.h:
        (WebCore::MockRealtimeMediaSource::constraints): Deleted.

2017-05-16  Andy Estes  <aestes@apple.com>

        [Cocoa] Tell NEFilterSource about the presenting app's PID
        https://bugs.webkit.org/show_bug.cgi?id=172152
        <rdar://problem/32197740>

        Reviewed by Dan Bernstein.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize):
        * platform/spi/cocoa/NEFilterSourceSPI.h:

2017-05-16  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Fix static position of positioned grid items
        https://bugs.webkit.org/show_bug.cgi?id=172108

        Reviewed by Sergio Villar Senin.

        This patch makes us follow the text on the spec
        (https://drafts.csswg.org/css-grid/#static-position):
        "The static position of an absolutely-positioned child
         of a grid container is determined as if it were the sole grid item
         in a grid area whose edges coincide with the padding edges
         of the grid container."

        Test: fast/css-grid-layout/absolute-positioning-grid-container-parent.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::prepareChildForPositionedLayout): Modified to avoid
        including padding to match the spec behavior.

2017-05-16  Per Arne Vollan  <pvollan@apple.com>

        Compile error, include file is not found.
        https://bugs.webkit.org/show_bug.cgi?id=172105

        Reviewed by Brent Fulgham.

        Use __has_include to detect if include file exists.

        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.mm:

2017-05-15  Andy Estes  <aestes@apple.com>

        Make the application PID available to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=172133

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/RuntimeApplicationChecks.cpp: Added.
        (WebCore::presentingApplicationPIDOverride):
        (WebCore::presentingApplicationPID): Returns the override PID if set, or getCurrentProcessID()
        otherwise.
        (WebCore::setPresentingApplicationPID):
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm: Renamed from Source/WebCore/platform/RuntimeApplicationChecks.mm.

2017-05-15  Antti Koivisto  <antti@apple.com>

        RenderTheme does not need to be per-page
        https://bugs.webkit.org/show_bug.cgi?id=172116
        <rdar://problem/30426457>

        Reviewed by Zalan Bujtas.

        There are no implementations of RenderTheme::themeForPage that actually care about the page.
        It can be replaced with a singleton, simplifying a bunch of code.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::shadowRootCSSText):
        (WebCore::MediaControlsHost::base64StringForIconNameAndType):
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):

            Fix a potential crash if we get here when page is null (though it doesn't appear to repro on trunk).

        * css/StyleColor.cpp:
        (WebCore::StyleColor::colorFromKeyword):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor):
        * css/parser/CSSParser.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeSystemFont):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearance):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createElementRenderer):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::usesMenuList):
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle):
        * html/InputType.cpp:
        (WebCore::InputType::themeSupportsDataListUI):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldHaveSpinButton):
        (WebCore::TextFieldInputType::shouldHaveCapsLockIndicator):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        (WebCore::parseColorOrCurrentColor):
        (WebCore::CanvasStyle::createFromString):
        * html/canvas/CanvasStyle.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::startTimer):
        (WebCore::MediaControlPanelElement::makeOpaque):
        (WebCore::MediaControlPanelElement::makeTransparent):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset):
        (WebCore::MediaControls::reportedError):
        (WebCore::MediaControls::updateCurrentTimeDisplay):
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::tryCreate):
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::theme): Deleted.
        * platform/wpe/RenderThemeWPE.cpp:
        (WebCore::RenderTheme::singleton):
        (WebCore::RenderTheme::themeForPage): Deleted.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::theme):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::focusRingColor):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::defaultTheme): Deleted.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderTheme::singleton):
        (WebCore::RenderTheme::themeForPage): Deleted.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderTheme::singleton):
        (WebCore::RenderTheme::themeForPage): Deleted.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::singleton):
        (WebCore::RenderTheme::themeForPage): Deleted.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderTheme::singleton):
        (WebCore::RenderTheme::themeForPage): Deleted.
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):

2017-05-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Do not delete asynchronously decoded frames for large images if their clients are in the viewport
        https://bugs.webkit.org/show_bug.cgi?id=170640

        Reviewed by Simon Fraser.

        The image flickering problem happens when a large image is visible in the
        view port and for some reason, the decoded frame gets destroyed. When this
        image is repainted, BitmapImage::draw() does not find a valid decoded frame
        for that image. It then requests an async decoding for the image and just
        draws nothing in the image rectangle. Drawing no content between two drawing
        phases in which the image is drawn causes the unwanted flickering.

        To fix this issue we need to protect the decoded frames of all the images
        in the view port from being destroyed. When BitmapImage::destroyDecodedData()
        is called, it is going to check, through the ImageObserver, whether any
        of its clients is visible. And if so, the current decoded frame won't be
        destroyed.

        Tests: Modifying existing tests.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImageObserver::decodedSizeChanged):
        (WebCore::CachedImage::CachedImageObserver::didDraw):
        (WebCore::CachedImage::CachedImageObserver::canDestroyDecodedData):
        (WebCore::CachedImage::CachedImageObserver::imageFrameAvailable):
        (WebCore::CachedImage::CachedImageObserver::changedInRect):
        (WebCore::CachedImage::decodedSizeChanged):
        (WebCore::CachedImage::didDraw):
        (WebCore::CachedImage::canDestroyDecodedData): Finds out whether it's okay
        to discard the image decoded data or not.
        (WebCore::CachedImage::imageFrameAvailable):
        (WebCore::CachedImage::changedInRect):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedImageClient.h:
        (WebCore::CachedImageClient::canDestroyDecodedData):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::destroyDecodedDataForAllImages): This function is
        currently not used. Use in the internal destroyDecodedDataForAllImages()
        but unlike what CachedImage::destroyDecodedData() does, make it destroy
        the decoded frames without deleting the image itself.
        * loader/cache/MemoryCache.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::canDestroyCurrentFrameDecodedData): 
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::packImageData):
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::decodedSizeChanged):
        (ImageFrameCache::cacheAsyncFrameNativeImageAtIndex): The assertion in this
        function is wrong. frameIsCompleteAtIndex() can be false when the an image
        decoding is requested but can be true when the decoding finishes.
        * platform/graphics/ImageObserver.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::frameIsCompleteAtIndex):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::decodedSizeChanged):
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        * platform/graphics/win/ImageDirect2D.cpp:
        (WebCore::Image::drawPattern):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::isVisibleInDocumentRect):
        (WebCore::RenderElement::isVisibleInViewport):
        (WebCore::RenderElement::imageFrameAvailable):
        (WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded):
        (WebCore::RenderElement::shouldRepaintInVisibleRect): Deleted. Function
        is renamed to isVisibleInViewport() for better readability.
        * rendering/RenderElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImageClients.h:
        * testing/Internals.cpp:
        (WebCore::Internals::destroyDecodedDataForAllImages):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-15  Youenn Fablet  <youenn@apple.com>

        Simplify RealtimeMediaSource data production and state
        https://bugs.webkit.org/show_bug.cgi?id=171999

        Reviewed by Eric Carlson.

        RealtimeMediaSource takes 3 booleans:
        - m_isProducingData tells whether data is produced or not. In the case of capturing, it tells whether capture
          happens.
        - m_muted/m_enabled allows JS or WebKit level to start/stop the source.

        Changed MediaStream capture state computation so that capture is reported as follows:
        - m_isProducing is true, capture is happenning and is active
        - m_muted is true, capture is happening but is inactive.

        Except in the case of WebRTC incoming sources, for which sources may be created as muted as per the spec,
        all sources are unmuted, enabled and not producing data when created.

        RealtimeMediaSource is now activable either by calling start/stop or by calling setMuted/setEnabled.
        This in turns will set the boolean values accordingly and will call the underlying
        startProducingData/stopProducingData methods doing the actual stuff.

        Removing from all RealtimeMediaSource subclasses the handling of producing data.
        Making more methods non-virtual/member fields private to simplify the model.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::create):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::startProducingData):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::stopProducingData):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasDestroyed):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::startProducingData):
        (WebCore::MediaStreamTrackPrivate::stopProducingData):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setMuted):
        (WebCore::RealtimeMediaSource::notifyMutedChange):
        (WebCore::RealtimeMediaSource::setEnabled):
        (WebCore::RealtimeMediaSource::start):
        (WebCore::RealtimeMediaSource::stop):
        (WebCore::RealtimeMediaSource::requestStop):
        (WebCore::RealtimeMediaSource::reset): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource):
        (WebCore::AVMediaCaptureSource::captureSessionIsRunningDidChange):
        (WebCore::AVMediaCaptureSource::reset): Deleted.
        (WebCore::AVMediaCaptureSource::isProducingData): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        (WebCore::CoreAudioCaptureSource::audioSourceProvider):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::render):
        (WebCore::MockRealtimeAudioSource::createMuted): Deleted.
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::createMuted): Deleted.
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::create):
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::startProducingData):
        (WebCore::RealtimeIncomingAudioSource::stopProducingData):
        (WebCore::RealtimeIncomingAudioSource::setSourceTrack):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::create):
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        (WebCore::RealtimeIncomingVideoSource::startProducingData):
        (WebCore::RealtimeIncomingVideoSource::setSourceTrack):
        (WebCore::RealtimeIncomingVideoSource::stopProducingData):
        (WebCore::RealtimeIncomingVideoSource::OnFrame):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::setClient):
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::createMutedRemoteSource):
        (WebCore::MockMediaEndpoint::unmuteTimerFired):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::createMuted):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        (WebCore::MockRealtimeAudioSource::stopProducingData):
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::startProducingData): Deleted.
        (WebCore::MockRealtimeMediaSource::stopProducingData): Deleted.
        * platform/mock/MockRealtimeMediaSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::createMuted):
        (WebCore::MockRealtimeVideoSource::startProducingData):
        (WebCore::MockRealtimeVideoSource::stopProducingData):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        * platform/mock/MockRealtimeVideoSource.h:

2017-05-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate Font constructor from bools to enums
        https://bugs.webkit.org/show_bug.cgi?id=172140

        Reviewed by Tim Horton.

        In https://bugs.webkit.org/show_bug.cgi?id=168487, I'm adding a new flag to Font. We can't
        keep having just a pile of bools in this class. Instead, we should be using enums.

        No new tests because there is no behavior change.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::font):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):
        * css/CSSSegmentedFontFace.cpp:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::createFont):
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::verticalRightOrientationFont):
        (WebCore::Font::uprightOrientationFont):
        (WebCore::Font::brokenIdeographFont):
        (WebCore::Font::description):
        (WebCore::Font::mathData):
        * platform/graphics/Font.h:
        (WebCore::Font::create):
        (WebCore::Font::origin):
        (WebCore::Font::isInterstitial):
        (WebCore::Font::widthForGlyph):
        (WebCore::Font::isCustomFont): Deleted.
        (WebCore::Font::isLoading): Deleted.
        * platform/graphics/FontRanges.cpp:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformCreateScaledFont):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::Font::platformInit):
        * platform/graphics/win/SimpleFontDataDirect2D.cpp:
        (WebCore::Font::platformInit):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::Font::platformCreateScaledFont):
        (WebCore::Font::determinePitch):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForFontAndText):

2017-05-15  Youenn Fablet  <youenn@apple.com>

        WebRTC outgoing muted video sources should send black frames
        https://bugs.webkit.org/show_bug.cgi?id=170627
        <rdar://problem/31513869>

        Reviewed by Eric Carlson.

        Covered by updated test.

        Instead of sending one black frame and then another one asynchronously,
        we use the timer to send a black frame every second when outgoing source is muted.

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingVideoSource::sourceEnabledChanged):
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFrames):
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFrame): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::videoSampleAvailable):

2017-05-15  David Kilzer  <ddkilzer@apple.com>

        Crash in libxml2.2.dylib: xmlDictReference
        <https://webkit.org/b/172086>
        <rdar://problem/23643436>

        Reviewed by Daniel Bates.

        Speculative fix and code clean-up based on source code
        inspection.  The fix for the crash is in two parts that change
        XSLStyleSheet::parseString():
        1. Always set m_stylesheetDoc to nullptr after freeing it via
           XSLStyleSheet::clearXSLStylesheetDocument().
        2. Add nullptr check before using m_stylesheetDoc from parent.

        Broadly speaking, the changes are:
        - Extract code to reset m_stylesheetDoc into new private
          XSLStyleSheet::clearXSLStylesheetDocument() method.  There is
          a special contract between m_stylesheetDoc and
          m_stylesheetDocTaken that wasn't being followed every time.
          See comment in XSLStyleSheet::compileStyleSheet().
        - XSLStyleSheet::clearDocuments() now calls new
          clearXSLStylesheetDocument() method.  Previously, it was not
          checking or resetting m_stylesheetDocTaken, and it might have
          leaked an xmlDocPtr if m_stylesheetDoc was set and
          m_stylesheetDocTaken was false.
        - XSLStyleSheet::parseString() now calls new
          clearXSLStylesheetDocument() method.  Previously, it did not
          clear m_stylesheetDoc after freeing it, and it could return
          early due to a failure in xmlCreateMemoryParserCtxt().
        - In XSLStyleSheet::parseString() use checked arithmetic when
          calculating 'size' for xmlCreateMemoryParserCtxt() and
          xmlCtxtReadMemory().  This code used to do an implicit
          unsigned -> signed integer conversion that could overflow.
        - Always iterate m_children using an 'auto& import' variable.

        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::clearXSLStylesheetDocument): Add declaration.
        (WebCore::XSLStyleSheet::m_disabled): Add default initializer.
        (WebCore::XSLStyleSheet::m_stylesheetDoc): Ditto.
        (WebCore::XSLStyleSheet::m_stylesheetDocTaken): Ditto.
        (WebCore::XSLStyleSheet::m_parentStyleSheet): Ditto.

        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet): Get rid of redundant
        initializers.  Set m_parentStyleSheet if needed.
        (WebCore::XSLStyleSheet::~XSLStyleSheet): Call
        clearXSLStylesheetDocument() instead of custom code.  Switch
        m_children fast iteration to use 'auto& import' variable.
        (WebCore::XSLStyleSheet::isLoading): Switch m_children fast
        iteration to use 'auto& import' variable.
        (WebCore::XSLStyleSheet::clearDocuments): Call
        clearXSLStylesheetDocument() instead of setting m_stylesheetDoc
        to nullptr.  This might fix an occasional xmlDocPtr leak.
        (WebCore::XSLStyleSheet::clearXSLStylesheetDocument): Add.  This
        method always sets m_stylesheetDoc to nullptr (after freeing it
        if necessary) and sets m_stylesheetDocTaken to false.
        (WebCore::XSLStyleSheet::parseString): Call
        clearXSLStylesheetDocument().  Prior to this, m_stylesheetDoc
        might be left pointing to a freed value, and this method could
        return early if xmlCreateMemoryParserCtxt() failed.  Switch to
        using Checked<> to compute required buffer size to parse XSL
        stylesheet, and return early on overflow.  Clean up existing
        return statements to use boolean expressions.  Add nullptr check
        for m_parentStyleSheet->m_stylesheetDoc before using it.
        (WebCore::XSLStyleSheet::loadChildSheet): Get rid of local
        variable by calling loadSheet() from last array element.
        (WebCore::XSLStyleSheet::compileStyleSheet): Add debug assert
        that m_stylesheetDoc is not nullptr.

2017-05-15  Jer Noble  <jer.noble@apple.com>

        Add experimental setting to allow document gesture interaction to fulfill media playback gesture requirement
        https://bugs.webkit.org/show_bug.cgi?id=172131

        Reviewed by Eric Carlson.

        Test: media/restricted-audio-playback-with-document-gesture.html

        Move all calls to ScriptController::processingUserGestureForMedia() to the new Document equivalent. In Document,
        if the new setting is enabled, return true from processingUserGestureForMedia() if the top-level document has had
        a user gesture interaction.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::processingUserGestureForMedia):
        * Modules/mediastream/MediaStream.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::processingUserGestureForMedia):
        (WebCore::AudioContext::willBeginPlayback):
        (WebCore::AudioContext::willPausePlayback):
        * Modules/webaudio/AudioContext.h:
        * dom/Document.cpp:
        (WebCore::Document::processingUserGestureForMedia):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged):
        (WebCore::HTMLMediaElement::seekWithTolerance):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker):
        (WebCore::HTMLMediaElement::processingUserGestureForMedia):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):
        (WebCore::MediaElementSession::dataLoadingPermitted):
        (WebCore::MediaElementSession::fullscreenPermitted):
        (WebCore::MediaElementSession::canShowControlsManager):
        (WebCore::MediaElementSession::showPlaybackTargetPicker):
        * page/Settings.in:
        * platform/audio/PlatformMediaSession.h:

2017-05-15  Jer Noble  <jer.noble@apple.com>

        Only ever initialize LibWebRTCProvider's staticFactoryAndThreads() factories once.
        https://bugs.webkit.org/show_bug.cgi?id=172047

        Reviewed by Youenn Fablet.

        Wrap the initilization of the factories contained in staticFactoryAndThreads() in a call_once to ensure
        new factories aren't created every time it's called.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::staticFactoryAndThreads):

2017-05-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CRASH seen with DOM.setOuterHTML when there is no documentElement
        https://bugs.webkit.org/show_bug.cgi?id=172135
        <rdar://problem/32175860>

        Reviewed by Brian Burg.

        Test: inspector/dom/setOuterHTML-no-document-element.html

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        Null check the document element which might not exist.

2017-05-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (216471): Infinite repaint-drawing loop when asynchronously decoding incomplete image frames
        https://bugs.webkit.org/show_bug.cgi?id=171900

        Reviewed by Tim Horton.

        -- Don't destroy incomplete decoded image frames for large images. This
        is to avoid flickering while decoding another image frame with the new
        data. The old incomplete image frame will be destroyed once the newer one
        finishes decoding.

        -- Extend the enum ImageFrame::DecodingStatus by adding a new value called
        'Decoding'. This new value will never be cached in the ImageFrame::
        m_decodingStatus. Add a member m_currentFrameDecodingStatus to BitmapImage.
        The purpose of this member is to invalidate the current frame, without
        deleting it, when new encoded data is received.

        -- Don't wait until the native image is decoded to cache the ImageFrame
        decodingStatus. There is a big chance that more data arrives between
        starting the decoding and finishing it such that the decoding changes
        from Partial to Complete. We need to prevent keeping incomplete ImageFrames
        cached because we mistakenly assume they are complete. To fix this issue
        we need to know the ImageFrame decodingStatus when the decoding is requested.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::internalStartAnimation): At the beginning of this 
        function we check whether the next frame is being decoded or not and we 
        return DecodingActive if it is. Let's handle the second check here also 
        before requesting the decoding of nextFrame. We need to check whether the
        nextFrame has a native image with decoded with the native size or not.
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageFrame.cpp:
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::setDecodingStatus):
        (WebCore::ImageFrame::decodingStatus):
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::isInvalid):
        (WebCore::ImageFrame::isPartial):
        (WebCore::ImageFrame::isComplete):
        (WebCore::ImageFrame::setDecoding): Deleted.
        (WebCore::ImageFrame::decoding): Deleted.
        (WebCore::ImageFrame::isEmpty): Deleted.
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::setNativeImage):
        (WebCore::ImageFrameCache::cacheMetadataAtIndex):
        (WebCore::ImageFrameCache::cacheNativeImageAtIndex):
        (WebCore::ImageFrameCache::cacheNativeImageAtIndexAsync):
        (WebCore::ImageFrameCache::startAsyncDecodingQueue):
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex):
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue):
        (WebCore::ImageFrameCache::frameAtIndexCacheIfNeeded):
        (WebCore::ImageFrameCache::frameDecodingStatusAtIndex):
        (WebCore::ImageFrameCache::cacheFrameMetadataAtIndex): Deleted.
        (WebCore::ImageFrameCache::cacheFrameNativeImageAtIndex): Deleted.
        (WebCore::ImageFrameCache::cacheAsyncFrameNativeImageAtIndex): Deleted.
        (WebCore::ImageFrameCache::frameIsCompleteAtIndex): Deleted.
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::ImageFrameRequest::operator==):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::dataChanged):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::destroyIncompleteDecodedData):
        (WebCore::ImageSource::requestFrameAsyncDecodingAtIndex): Let the caller
        decide whether another request for the same image frame is allowed or not.
        (WebCore::ImageSource::frameDecodingStatusAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex): Deleted.
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::frameDurationAtIndex):
        (WebCore::ImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::jpegComplete):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        (WebCore::PNGImageDecoder::clearFrameBufferCache):
        (WebCore::PNGImageDecoder::frameComplete):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2017-05-15  Chris Dumez  <cdumez@apple.com>

        Align WebKitCSSMatrix stringifier with spec for DOMMatrix
        https://bugs.webkit.org/show_bug.cgi?id=172114

        Reviewed by Simon Fraser.

        Align WebKitCSSMatrix stringifier with spec for DOMMatrix after:
        - https://github.com/w3c/fxtf-drafts/pull/148

        The following changes were made:
        - Use EcmaScript's ToString() to convert floating point values to string
        - Throw an invalid state error if the matrix contains non-finite values
        - Made WebKitCSSMatrix.toString enumerable as per [1].

        [1] https://heycam.github.io/webidl/#es-stringifier

        Test: fast/css/matrix-stringifier.html

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::toString):
        * css/WebKitCSSMatrix.h:
        * css/WebKitCSSMatrix.idl:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::containsOnlyFiniteValues):
        * platform/graphics/transforms/TransformationMatrix.h:

2017-05-15  Mark Lam  <mark.lam@apple.com>

        WorkerRunLoop::Task::performTask() should check !scriptController->isTerminatingExecution().
        https://bugs.webkit.org/show_bug.cgi?id=171775
        <rdar://problem/30975761>

        Reviewed by Filip Pizlo.

        Currently, WorkerThread::stop() calls scheduleExecutionTermination() to terminate
        JS execution first, followed by posting a cleanup task to the worker, and lastly,
        it invokes terminate() on the WorkerRunLoop.

        As a result, before the run loop is terminated, the worker thread may observe the
        TerminatedExecutionException in JS code, bail out, see another JS task to run,
        re-enters the VM to run said JS code, and fails with an assertion due to the
        TerminatedExecutionException still being pending on VM entry.

        WorkerRunLoop::Task::performTask() already has a check to only allow a task to
        run if and only if !runLoop.terminated() and the task is not a clean up task.
        We'll fix the above race by changing WorkerRunLoop::Task::performTask() to check
        !context->script()->isTerminatingExecution() instead of !runLoop.terminated().
        Since WorkerThread::stop() always scheduleExecutionTermination() before it
        terminates the run loop, !context->script()->isTerminatingExecution() implies
        !runLoop.terminated().

        The only time that runLoop is terminated without scheduleExecutionTermination()
        being called is when WorkerThread::stop() is called before the WorkerThread has
        finished creating its WorkerGlobalScope.  In this scenario, WorkerThread::stop()
        will still terminate the run loop.  Hence, after the WorkerGlobalScope is created
        (in WorkerThread::workerThread()), we will check if the run loop has been
        terminated (i.e. stop() was called).  If so, we'll scheduleExecutionTermination()
        there, and guarantee that if runloop.terminated() is true, then
        context->script()->isTerminatingExecution() is also true.

        Solutions that were considered but did not work (recorded for future reference):

        1. In WorkerThread::stop(), call scheduleExecutionTermination() only after it
           posts the cleanup task and terminate the run loop.

           This did not work because this creates a race where the worker thread may run
           the cleanup task before WorkerThread::stop() finishes.  As a result, the
           scriptController may be deleted before we get to invoke scheduleExecutionTermination()
           on it, thereby resulting in a use after free.

           To make this work, we would have to change the life cycle management strategy
           of the WorkerScriptController.  This is a more risky change that we would
           want to take on at this time, and may also not be worth the gain.

        2. Break scheduleExecutionTermination() up into 2 parts i.e. WorkerThread::stop()
           will:
           1. set the scriptControllers m_isTerminatingExecution flag before
              posting the cleanup task and terminating the run loop, and
           2. invoke VM::notifyNeedsTermination() after posting the cleanup task and
              terminating the run loop.

           This requires that we protect the liveness of the VM until we can invoke
           notifyNeedsTermination() on it.

           This did not work because:
           1. We may end up destructing the VM in WorkerThread::stop() i.e. in the main
              web frame, but only the worker thread holds the JS lock for the VM.

              We can make the WorkerThread::stop() acquire the JS lock just before it
              releases the protected VM's RefPtr, but that would mean the main thread
              may be stuck waiting a bit for the worker thread to release its JSLock.
              This is not desirable.

           2. In practice, changing the liveness period of the Worker VM relative to its
              WorkerScriptController and WorkerGlobalScope also has unexpected
              ramifications.  We observed many worker tests failing with assertion
              failures and crashes due to this change.

           Hence, this approach is also a more risky change than it appears on the
           surface, and is not worth exploring at this time.

        In the end, changing WorkerRunLoop::Task::performTask() to check for
        !scriptController->isTerminatingExecution() is the most straight forward solution
        that is easy to prove correct.

        Also fixed a race in WorkerThread::workerThread() where it can delete the
        WorkerGlobalScope while WorkerThread::stop() is in the midst of accessing it.
        We now guard the the nullifying of m_workerGlobalScope with the
        m_threadCreationAndWorkerGlobalScopeMutex as well.

        UPDATE: the only new thing in this patch for re-landing (vs one previously landed)
        is that instead of nullifying m_workerGlobalScope directly (thereby deleting the
        WorkerGlobalScope context), we'll swap it out and delete it only after we've
        unlocked the m_threadCreationAndWorkerGlobalScopeMutex.  This is needed because
        the destruction of the WorkerGlobalScope will cause the main thread to race against
        the worker thread to delete the WorkerThread object, and the WorkerThread object
        owns the mutex that we need to unlock after nullifying the m_workerGlobalScope
        field.

        This issue is covered by an existing test that I just unskipped in TestExpectations.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        - Added a check to do nothing and return early if the scriptController is already
          terminating execution.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::runCleanupTasks):
        (WebCore::WorkerRunLoop::Task::performTask):

        * workers/WorkerRunLoop.h:
        - Made Task::performTask() private and make Task befriend the WorkerRunLoop class.
          This ensures that only the WorkerRunLoop may call performTask().
          Note: this change only formalizes and hardens a relationship that was already
          in place before this.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        * workers/WorkerThread.h:
        - Renamed m_threadCreationMutex to m_threadCreationAndWorkerGlobalScopeMutex so
          that it more accurately describes what it guards.

2017-05-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Unicode characters which can't be rendered in any font are invisible
        https://bugs.webkit.org/show_bug.cgi?id=171942
        <rdar://problem/32054234>

        Reviewed by Tim Horton.

        There are some Unicode characters which don't have any font on the system which can render them.
        These characters should be drawn as the .notdef "tofu." This is for security and usability, as
        well as what Firefox and Chrome do. However, we still shouldn't draw characters with the
        Default_Ignorable_Code_Point property, because this is what CoreText does.

        This behavior is also what the Unicode spec recommends: In UTR #36 Unicode Security Considerations:
        http://www.unicode.org/reports/tr36/#Recommendations_General
        "If there is no available glyph for a character, never show a simple "?" or omit the character."

        Also relevant is the Unicode Standard section 5.3 Unknown and MIssing Characters, starting at page
        marked 203 in the following: http://www.unicode.org/versions/Unicode9.0.0/ch05.pdf

        Tests: fast/text/default-ignorable.html
               fast/text/unknown-char-notdef.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::characterMustDrawSomething):

2017-05-15  Timothy Horton  <timothy_horton@apple.com>

        Null deref under WebContentReader::readURL when interacting with a file URL
        https://bugs.webkit.org/show_bug.cgi?id=172045
        <rdar://problem/25880647>

        Reviewed by Wenson Hsieh.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readURL):
        The AppSupport soft link was wrong, as there is no such framework in /System/Library/Frameworks.
        Thus, any time we hit this codepath, the soft linked function would be null, and calling it would crash.
        Instead of just fixing the soft link, remove the code, because it does not seem necessary to
        special-case fileURLs to images in the media directory.

2017-05-15  Eric Carlson  <eric.carlson@apple.com>

        ASSERTION FAILED: wasRemoved in WebCore::RealtimeMediaSourceCenter::removeDevicesChangedObserver(DevicesChangedObserverToken)
        https://bugs.webkit.org/show_bug.cgi?id=171529
        <rdar://problem/31945791>

        Reviewed by Jer Noble.

        No new tests, fixes a crash in existing tests.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices): Use a weak ptr.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::observerMap):  Use a static hash map for observers because the
        source center can change at runtime.
        (WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver):
        (WebCore::RealtimeMediaSourceCenter::removeDevicesChangedObserver):
        (WebCore::RealtimeMediaSourceCenter::captureDevicesChanged):

2017-05-15  Brent Fulgham  <bfulgham@apple.com>

        [iOS WK1] Do not try to dispatch messages to subframes if their documents have not been constructed yet.
        https://bugs.webkit.org/show_bug.cgi?id=172059
        <rdar://problem/31963192>

        Reviewed by Zalan Bujtas.

        On iOS WK1 we can end up in an inconsistent state, where
        1. The web thread is inside a newly-injected iframe's document's constructor and
        2. waiting on a delegate callback on the main thread
        while the main thread
        (a) Evaluates arbitrary JavaScript that modifies storage which
        (b) Triggers an event dispatch.
 
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents): If the sub-frame's document
        is in an inconsistent state, skip it.
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents): Ditto.
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames): Ditto.
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames): Ditto.

2017-05-15  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Leading whitespace followed by a <br> produces an extra linebreak.
        https://bugs.webkit.org/show_bug.cgi?id=172076

        Reviewed by Antti Koivisto.

        When the collapsed whitespace does not fit the line, we need to push it to the next line
        so that we can decide whether any soft/hard linebreak should be skipped (to avoid double line breaks) or not.

        Test: fast/text/simple-line-layout-leading-whitespace-with-soft-hard-linebreak.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::consumeLineBreakIfNeeded): special handling <br>
        (WebCore::SimpleLineLayout::firstFragment): Now we need to deal with leading collapsed whitespace.
        (WebCore::SimpleLineLayout::createLineRuns): We need to push even the collapsed whitespace to the next line.

2017-05-15  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        Invalid MediaSource duration value should throw TyperError instead of InvalidStateError
        https://bugs.webkit.org/show_bug.cgi?id=171653

        Reviewed by Chris Dumez.

        Modify MediaSource::setDuration to throw a TypeError when duration value is invalid as per MSE specification
        (https://www.w3.org/TR/2016/REC-media-source-20161117/#dom-mediasource-duration).

        Update expectations of corresponding WPT test.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setDuration):
        (WebCore::MediaSource::setDurationInternal):

2017-05-15  Gwang Yoon Hwang  <yoon@igalia.com>

        [CAIRO] Painting an image mask with a matrix above Pixman's limit breaks internal states of Cairo
        https://bugs.webkit.org/show_bug.cgi?id=169094

        Reviewed by Žan Doberšek.

        It is the same problem which addressed in r212431.
        In HiDPI situation, it happens easily due to the size of coordinates.
        Also, if this bug happens, it will break the rendering continuously
        since we are reusing graphics contexts to render webpages in same
        webview.

        Test: fast/hidpi/hidpi-long-page-with-inset-element.html

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::pushImageMask):
        We can avoid the limit of the Pixman by reducing the source surface's
        size, and it will create a minimal pattern matrix.

2017-05-14  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix with newer Perl versions.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddLegacyCallerOperationIfNeeded): Support for experimental push on scalar (and
        other auto-dereferencing) was removed in Perl 5.24. Instead, the LegacyCallers array
        has to be dereferenced when pushing new values to it.

2017-05-14  Sam Weinig  <sam@webkit.org>

        [WebIDL/DOM] Remove need for custom bindings for HTMLAllCollection and bring up to spec
        https://bugs.webkit.org/show_bug.cgi?id=172095

        Reviewed by Darin Adler.

        - Adds support for the legacycaller WebIDL special annotation.
        - Updates implementation of HTMLAllCollection to match the current HTML spec.

        Test: fast/dom/document-all.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLAllCollectionCustom.cpp: Removed.
        Removed JSHTMLAllCollectionCustom.cpp

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInterface):
        (AddLegacyCallerOperationIfNeeded):
        Before code generation, clone all the legacycaller operations and put them
        in their own set, so they can form an overload set.
        
        (AddStringifierOperationIfNeeded):
        Use IDLParser::cloneType as the FIXME suggested.

        (GenerateHeader):
        Group call related functionality together and use new IsCallable predicate.

        (GenerateOverloadedFunctionOrConstructor):
        Generalize a little bit to allow the function being overloaded to be an overloaded legacycaller.

        (GenerateImplementation):
        Add call to generate the legacycaller code.

        (GenerateLegacyCallerDefinitions):
        (GenerateLegacyCallerDefinition):
        Generate the legacycaller definition, using GenerateArgumentsCountCheck, GenerateParametersCheck
        and GenerateImplementationFunctionCall to do all the heavy lifting.

        (IsCallable):
        Add helper predicate for both custom calls and legacycaller.

        * bindings/scripts/IDLParser.pm:
        (cloneType):.
        (cloneArgument):.
        (cloneOperation):
        Add cloning functions for IDLArgument and IDLOperation, and make IDLType's
        clone feasible for calling outside the package by removing the unneeded 
        self parameter.

        * bindings/scripts/test/JS/JSTestObj.cpp
        * bindings/scripts/test/JS/JSTestObj.h
        * bindings/scripts/test/TestObj.idl:
        Add testing of legacycaller overloading.

        * dom/Document.cpp:
        (WebCore::Document::allFilteredByName):
        * dom/Document.h:
        Add new collection access for the HTMLAllNamedSubCollection.

        * html/CachedHTMLCollection.h:
        (WebCore::nameShouldBeVisibleInDocumentAll):
        Update list of tags to match the current spec.

        * html/CollectionType.h:
        Add new type for HTMLAllNamedSubCollection.

        * html/GenericCachedHTMLCollection.cpp:
        (WebCore::GenericCachedHTMLCollection<traversalType>::elementMatches):
        Specify that DocumentAllNamedItems does not want
        the default elementMatches.
 
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::namedOrIndexedItemOrItems):
        (WebCore::HTMLAllCollection::namedItemOrItems):
        (WebCore::HTMLAllNamedSubCollection::~HTMLAllNamedSubCollection):
        (WebCore::HTMLAllNamedSubCollection::elementMatches):
        * html/HTMLAllCollection.h:
        Move implementations from the custom binding, and re-implement to
        match the spec. Alternate names to item/namedItem were needed to not
        shadow the existing ones in HTMLCollection. HTMLAllNamedSubCollection
        is a simple HTMLCollection that matches on a name, following the rules
        of document.all about which tags can have name attributes.

        * html/HTMLAllCollection.idl:
        Remove custom annotations and add legacycaller which is now supported.

        * html/HTMLCollection.cpp:
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::HTMLCollection::~HTMLCollection):
        Add DocumentAllNamedItems.

2017-05-14  Zalan Bujtas  <zalan@apple.com>

        Remove unused lambda in TextFragmentIterator::TextFragment::split() and cleanup dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=172089

        Reviewed by David Kilzer.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::split):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::splitWithHyphen):

2017-05-13  David Kilzer  <ddkilzer@apple.com>

        Unused lambda in JSWebKitSubtleCrypto::wrapKey()
        <https://webkit.org/b/172087>

        Reviewed by Chris Dumez.

        Fixes the following warning with newer clang:

            Source/WebCore/bindings/js/JSWebKitSubtleCryptoCustom.cpp:594:35: error: lambda capture 'keyFormat' is not used [-Werror,-Wunused-lambda-capture]
                auto exportSuccessCallback = [keyFormat, algorithm, parameters, wrappingKey, wrapper](const Vector<uint8_t>& exportedKeyData) mutable {
                                              ^

        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        (WebCore::JSWebKitSubtleCrypto::wrapKey): Remove unused lambda.

2017-05-13  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] deviceId constraint doesn't work with getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=171877
        <rdar://problem/31899730>

        Reviewed by Jer Noble.

        Test: fast/mediastream/get-user-media-device-id.html

        * Modules/mediastream/MediaConstraintsImpl.h:
        (WebCore::MediaConstraintsData::MediaConstraintsData): Add a constructor that 
        takes a const MediaConstraints&.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::~MediaDevices): m_deviceChangedToken is a std::optional<>.
        * Modules/mediastream/MediaDevices.h:

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        (WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin): Don't return
        NULL for the main frame so the origin matches that returned for a UserMediaRequest.

        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::setDeviceIDHashSalt): Deleted, not used.
        (WebCore::UserMediaController::deviceIDHashSalt): Deleted, not used.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow): Add device ID hash salt parameter, set it on
        constraints.
        * Modules/mediastream/UserMediaRequest.h:

        * platform/mediastream/MediaConstraints.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance): ASSERT if called for DeviceId.
        (WebCore::RealtimeMediaSource::selectSettings): Special case DeviceId because it
        we have to hash the device ID before comparing, and because the DeviceId can't be
        changed so it should never be added to the flattened constraints.
        (WebCore::RealtimeMediaSource::supportsConstraints):
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Implement.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp:
        (WebCore::RealtimeMediaSourceSupportedConstraints::nameForConstraint): Deleted, unused.
        (WebCore::RealtimeMediaSourceSupportedConstraints::constraintFromName): Deleted, unused.
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints): Pass device
        id, not empty string.
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): Deleted.
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2017-05-13  Chris Dumez  <cdumez@apple.com>

        Stop using RefPtr::release()
        https://bugs.webkit.org/show_bug.cgi?id=172074

        Reviewed by Geoffrey Garen.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::FontVariantLigaturesParser::finalizeValue):
        (WebCore::FontVariantNumericParser::finalizeValue):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeValue):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):
        * loader/archive/mhtml/MHTMLArchive.h:
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseArchiveWithHeader):
        * platform/audio/ios/AudioFileReaderIOS.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/glib/SharedBufferGlib.cpp:
        (WebCore::SharedBuffer::createFromReadingFile):
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::create):
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::copyCairoImageSurface):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createFromReadingFile):

2017-05-13  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] Implement the place-self shorthand
        https://bugs.webkit.org/show_bug.cgi?id=168846

        Reviewed by Zalan Bujtas.

        The CSS Box Alignment specification defines a new shorthand to set the
        Content Alignment properties (align-self and justify-self) at the
        same time.

        This patch provides the implementation of the CSS parsing logic and the
        required regression tests.

        Test: css3/parse-place-self.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumePlaceSelfShorthand):
        (WebCore::CSSPropertyParser::parseShorthand):
        * css/parser/CSSPropertyParser.h:

2017-05-13  Commit Queue  <commit-queue@webkit.org>

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

        Many memory corruption crashes on worker threads (Requested by
        ap on #webkit).

        Reverted changeset:

        "WorkerRunLoop::Task::performTask() should check
        !scriptController->isTerminatingExecution()."
        https://bugs.webkit.org/show_bug.cgi?id=171775
        http://trac.webkit.org/changeset/216801

2017-05-13  Zalan Bujtas  <zalan@apple.com>

        AccessibilityRenderObject::textUnderElement needs to assert on unclean tree.
        https://bugs.webkit.org/show_bug.cgi?id=172065

        Reviewed by Simon Fraser.

        r192103 changed the assert logic incorrectly. If the tree is dirty, regardless of the renderer's type,
        TextIterator will end up forcing style update/layout on the render tree.
        The original assert would have hit with bug 171546 prior to r216726.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):

2017-05-12  Simon Fraser  <simon.fraser@apple.com>

        event.clientX/clientY should be in layout viewport coordinates
        https://bugs.webkit.org/show_bug.cgi?id=172018

        Reviewed by Zalan Bujtas.

        Fix clientX and clientY on mouse events to be relative to the layout viewport, to match
        getBoundingClientRect(), getClientRects() and fixed-position objects.

        Also minor cleanup of MouseRelatedEvent to use initializers.

        Test: fast/visual-viewport/client-coordinates-relative-to-layout-viewport.html

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::init):
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::contentsScrollOffset): Deleted.
        * dom/MouseRelatedEvent.h:

2017-05-12  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove need for custom binding for Worker constructor
        https://bugs.webkit.org/show_bug.cgi?id=172050

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWorkerCustom.cpp: Removed.
        Remove JSWorkerCustom.cpp

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/IDLAttributes.json:
        Add RuntimeFlags as a new option for the ConstructorCallWith extended attribute.

        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/Worker.h:
        Update order of arguments to appease the generator.

        * workers/Worker.idl:
        Add extended attributes for the constructor.

2017-05-12  Simon Fraser  <simon.fraser@apple.com>

        The rects returned by Element/Range.getClientRects() should not be rounded
        https://bugs.webkit.org/show_bug.cgi?id=172057

        Reviewed by Chris Dumez.

        Fix createDOMRectVector() to not expand the rects to integer boundaries (which
        quad.enclosingBoundingBox() does), but to return rects with floating point
        values. This matches Chrome and Firefox, and matches getBoundingClientRect(),
        which does not integral snap.

        * dom/DOMRect.cpp:
        (WebCore::createDOMRectVector):

2017-05-12  Jiewen Tan  <jiewen_tan@apple.com>

        Elements should be inserted into a template element as its content's last child
        https://bugs.webkit.org/show_bug.cgi?id=171373
        <rdar://problem/31862949>

        Reviewed by Ryosuke Niwa.

        Before this change, our HTML parser obeys the following premises:
        1) A fostering child whose parent is a table should be inserted before its parent and under its grandparent.
        2) When inserting into a template element, an element should be inserted into its content.

        Let's walk through the example:
        a) Before eventhandler takes place
        template
        table
            svg <- parser
        b) After eventhandler takes place
        template
            table
                svg <- parser
        c) after parsing svg
        template
            content
                svg
                (table)
            table

        Finally, in the example, the svg element will be inserted into the content of the template element while
        having its next sibling point to the table element. However, the table element is actually under the
        template element not its content.

        This messy tree is constructed because the second premise is incompleted. It should be: When inserting into
        a template element, an element should be inserted into its content as its last child.
        Quoted from Step 3 of https://html.spec.whatwg.org/multipage/syntax.html#appropriate-place-for-inserting-a-node
        A correct tree will then looks like:
        template
            content
                svg
            table

        Tests: fast/dom/HTMLTemplateElement/insert-fostering-child-crash.html
               fast/dom/HTMLTemplateElement/insert-fostering-child.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::insert):
        By nullifying task.nextChild, it will force the parser to append the element as task.parent's last child.

2017-05-12  Alex Christensen  <achristensen@webkit.org>

        Rename WKContentExtension to WKContentRuleList
        https://bugs.webkit.org/show_bug.cgi?id=172053
        <rdar://problem/32141005>

        Reviewed by Geoffrey Garen.

        Covered by existing API tests.

        * English.lproj/Localizable.strings:

2017-05-12  Timothy Horton  <timothy_horton@apple.com>

        Don't use LinkPresentation URL shortening if it's not available
        https://bugs.webkit.org/show_bug.cgi?id=172064
        <rdar://problem/32169232>

        Rubber-stamped by Wenson Hsieh.

        * platform/mac/DragImageMac.mm:
        (WebCore::LinkImageLayout::LinkImageLayout):
        * platform/spi/cocoa/LinkPresentationSPI.h:

2017-05-11  Simon Fraser  <simon.fraser@apple.com>

        Incorrect position when dragging jQuery Draggable elements with position fixed after pinch zoom
        https://bugs.webkit.org/show_bug.cgi?id=171113
        rdar://problem/31746516

        Reviewed by Tim Horton.

        Make getBoundingClientRect() and getClientRects() return rects which are relative to the layout
        viewport, rather than the visual viewport. This goes part of the way to fixing webkit.org/b/170981,
        which aims to make pinch-zoom invisible to web pages ("inert visual viewport"). It fixes issues on various
        sites like Facebook when zoomed.

        Factor coordinate conversion code into functions on FrameView, which now documents
        the various coordinate systems in a big comment. Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale()
        and Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale() are renamed and factored
        to use these helpers.

        There are two behavior changes here:

        1. FrameView::documentToClientOffset() now uses the origin of the layout viewport in the "document to client"
           coordinate mapping.
           
        2. The two document functions would apply the scale and offset in the wrong order. We need
           to first undo the effects of CSS zoom, page zoom and page scale, and then map from document
           to client coordinates.

        Tests: fast/visual-viewport/client-rects-relative-to-layout-viewport.html
               fast/zooming/client-rects-with-css-and-page-zoom.html

        * dom/Document.cpp:
        (WebCore::Document::convertAbsoluteToClientQuads):
        (WebCore::Document::convertAbsoluteToClientRect):
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale): Deleted.
        (WebCore::Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale): Deleted.
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        (WebCore::Element::getBoundingClientRect):
        * dom/Range.cpp:
        (WebCore::Range::borderAndTextQuads):
        * page/FrameView.cpp:
        (WebCore::FrameView::absoluteToDocumentScaleFactor):
        (WebCore::FrameView::absoluteToDocumentRect):
        (WebCore::FrameView::absoluteToDocumentPoint):
        (WebCore::FrameView::documentToClientOffset):
        (WebCore::FrameView::documentToClientRect):
        (WebCore::FrameView::documentToClientPoint):
        * page/FrameView.h:
        * platform/ScrollableArea.h: #pragma once
        * platform/Scrollbar.h: #pragma once
        * platform/Widget.h: #pragma once

2017-05-12  Mark Lam  <mark.lam@apple.com>

        WorkerRunLoop::Task::performTask() should check !scriptController->isTerminatingExecution().
        https://bugs.webkit.org/show_bug.cgi?id=171775
        <rdar://problem/30975761>

        Reviewed by Saam Barati.

        Currently, WorkerThread::stop() calls scheduleExecutionTermination() to terminate
        JS execution first, followed by posting a cleanup task to the worker, and lastly,
        it invokes terminate() on the WorkerRunLoop.

        As a result, before the run loop is terminated, the worker thread may observe the
        TerminatedExecutionException in JS code, bail out, see another JS task to run,
        re-enters the VM to run said JS code, and fails with an assertion due to the
        TerminatedExecutionException still being pending on VM entry.

        WorkerRunLoop::Task::performTask() already has a check to only allow a task to
        run if and only if !runLoop.terminated() and the task is not a clean up task.
        We'll fix the above race by changing WorkerRunLoop::Task::performTask() to check
        !context->script()->isTerminatingExecution() instead of !runLoop.terminated().
        Since WorkerThread::stop() always scheduleExecutionTermination() before it
        terminates the run loop, !context->script()->isTerminatingExecution() implies
        !runLoop.terminated().

        The only time that runLoop is terminated without scheduleExecutionTermination()
        being called is when WorkerThread::stop() is called before the WorkerThread has
        finished creating its WorkerGlobalScope.  In this scenario, WorkerThread::stop()
        will still terminate the run loop.  Hence, after the WorkerGlobalScope is created
        (in WorkerThread::workerThread()), we will check if the run loop has been
        terminated (i.e. stop() was called).  If so, we'll scheduleExecutionTermination()
        there, and guarantee that if runloop.terminated() is true, then
        context->script()->isTerminatingExecution() is also true.

        Solutions that were considered but did not work (recorded for future reference):

        1. In WorkerThread::stop(), call scheduleExecutionTermination() only after it
           posts the cleanup task and terminate the run loop.

           This did not work because this creates a race where the worker thread may run
           the cleanup task before WorkerThread::stop() finishes.  As a result, the
           scriptController may be deleted before we get to invoke scheduleExecutionTermination()
           on it, thereby resulting in a use after free.

           To make this work, we would have to change the life cycle management strategy
           of the WorkerScriptController.  This is a more risky change that we would
           want to take on at this time, and may also not be worth the gain.

        2. Break scheduleExecutionTermination() up into 2 parts i.e. WorkerThread::stop()
           will:
           1. set the scriptControllers m_isTerminatingExecution flag before
              posting the cleanup task and terminating the run loop, and
           2. invoke VM::notifyNeedsTermination() after posting the cleanup task and
              terminating the run loop.

           This requires that we protect the liveness of the VM until we can invoke
           notifyNeedsTermination() on it.

           This did not work because:
           1. We may end up destructing the VM in WorkerThread::stop() i.e. in the main
              web frame, but only the worker thread holds the JS lock for the VM.

              We can make the WorkerThread::stop() acquire the JS lock just before it
              releases the protected VM's RefPtr, but that would mean the main thread
              may be stuck waiting a bit for the worker thread to release its JSLock.
              This is not desirable.

           2. In practice, changing the liveness period of the Worker VM relative to its
              WorkerScriptController and WorkerGlobalScope also has unexpected
              ramifications.  We observed many worker tests failing with assertion
              failures and crashes due to this change.

           Hence, this approach is also a more risky change than it appears on the
           surface, and is not worth exploring at this time.

        In the end, changing WorkerRunLoop::Task::performTask() to check for
        !scriptController->isTerminatingExecution() is the most straight forward solution
        that is easy to prove correct.

        Also fixed a race in WorkerThread::workerThread() where it can delete the
        WorkerGlobalScope while WorkerThread::stop() is in the midst of accessing it.
        We now guard the the nullifying of m_workerGlobalScope with the
        m_threadCreationAndWorkerGlobalScopeMutex as well.

        This issue is covered by an existing test that I just unskipped in TestExpectations.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        - Added a check to do nothing and return early if the scriptController is already
          terminating execution.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::runCleanupTasks):
        (WebCore::WorkerRunLoop::Task::performTask):

        * workers/WorkerRunLoop.h:
        - Made Task::performTask() private and make Task befriend the WorkerRunLoop class.
          This ensures that only the WorkerRunLoop may call performTask().
          Note: this change only formalizes and hardens a relationship that was already
          in place before this.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        * workers/WorkerThread.h:
        - Renamed m_threadCreationMutex to m_threadCreationAndWorkerGlobalScopeMutex so
          that it more accurately describes what it guards.

2017-05-12  Zalan Bujtas  <zalan@apple.com>

        [iOS WK1] Do not try to layout a subframe if its document has not been constructed yet.
        https://bugs.webkit.org/show_bug.cgi?id=172042
        <rdar://problem/32084098>

        Reviewed by Antti Koivisto.

        On iOS WK1 we can end up in an inconsistent state, where 
        1. the web thread is inside a newly injected iframe's document's c'tor and 
        2. waiting on a delegate callback on the main thread
        while the main thread
        1. executes a pending didLayout() task
        2. triggers layout on the newly injected iframe.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):

2017-05-11  Jiewen Tan  <jiewen_tan@apple.com>

        Check existence of a page before accessing its plugins
        https://bugs.webkit.org/show_bug.cgi?id=171712
        <rdar://problem/32007806>

        Reviewed by Brent Fulgham.

        Test: plugins/navigator-plugin-crash.html

        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::item):
        (WebCore::DOMPlugin::namedItem):

2017-05-12  Simon Fraser  <simon.fraser@apple.com>

        Add some logging for layer tree commits, and resize and orientation change events
        https://bugs.webkit.org/show_bug.cgi?id=172041

        Reviewed by Tim Horton.

        Add some logging that's useful during rotation investigations.

        * dom/Document.cpp:
        (WebCore::Document::orientationChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):

2017-05-12  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Add ReadableStreamBYOBReader closed getter
        https://bugs.webkit.org/show_bug.cgi?id=172024

        Reviewed by Youenn Fablet.

        Added tests to check closed getter behaviour.

        * Modules/streams/ReadableStreamBYOBReader.js:
        (closed): Implemented.

2017-05-12  Andreas Kling  <akling@apple.com>

        MediaResourceLoader shouldn't keep its HTMLMediaElement alive.
        https://bugs.webkit.org/show_bug.cgi?id=172032
        <rdar://problem/30816144>

        Reviewed by Joseph Pecoraro.

        Use a WeakPtr<HTMLMediaElement> in MediaResourceLoader instead, since the loader
        is retained by a NSURLSession object we hand over to AVFoundation.

        This prevents AVFoundation from keeping entire documents alive outside our control.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::createWeakPtr):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        (WebCore::MediaResourceLoader::requestResource):
        * loader/MediaResourceLoader.h:

2017-05-12  Andreas Kling  <akling@apple.com>

        Memory pressure response should only do sync bmalloc scavenge in sync mode.
        https://bugs.webkit.org/show_bug.cgi?id=172035

        Reviewed by Michael Saboff.

        Only call WTF::releaseFastMallocFreeMemory() and his threading-related friends
        when releaseMemory() is invoked with Synchronous::Yes, or if it's a critical
        pressure response (maintaining the behavior added in r215775.)

        * page/MemoryRelease.cpp:
        (WebCore::releaseMemory):

2017-05-12  Daniel Bates  <dabates@apple.com>

        Cleanup: Use Ref instead of RefPtr to hold DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=171988

        Reviewed by Chris Dumez.

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::JSCustomElementInterface):
        (WebCore::JSCustomElementInterface::upgradeElement):
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSCustomElementInterface.h:
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::JSMutationCallback):
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSMutationCallback.h:
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::DOMWindowExtension):
        * page/DOMWindowExtension.h:
        (WebCore::DOMWindowExtension::world):

2017-05-12  Daniel Bates  <dabates@apple.com>

        Cleanup: Make QueueTaskToEventLoopFunctionPtr take JSGlobalObject&
        https://bugs.webkit.org/show_bug.cgi?id=172021

        Reviewed by Mark Lam.

        * bindings/js/JSDOMGlobalObjectTask.cpp: Include header JSDOMGlobalObject.h.
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask): Change type of first argument from JSDOMGlobalObject*
        to JSDOMGlobalObject& and update code as necessary. Also, use C++11 brace initialization syntax
        for member initializer list.
        * bindings/js/JSDOMGlobalObjectTask.h: Remove header JSDOMGlobalObject.h and forward declare
        JSDOMGlobalObject and JSC::Microtask.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowMicrotaskCallback::create):
        (WebCore::JSDOMWindowMicrotaskCallback::JSDOMWindowMicrotaskCallback): Change type of first argument
        from JSDOMWindowBase* to JSDOMWindowBase& and update code as necessary. Also, use C++11 brace
        initialization syntax for member initializer list.
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/js/JSWorkerGlobalScopeBase.h:

2017-05-12  Jer Noble  <jer.noble@apple.com>

        [MediaStream] Streams while play while page is in background can get "stuck" when page is forgrounded.
        https://bugs.webkit.org/show_bug.cgi?id=172022

        Reviewed by Youenn Fablet.

        When an AVSampleBufferDisplayLayer is disconnected from the CA renderer, none of its samples will be decoded
        and enqueued for rendering. Once the layer is attached to a renderer again, it's stuffed full of samples which
        will never be decoded as their decode time has long passed.

        Pass the visibility state of the element through to the MediaPlayer so that MediaPlayerPrivateMediaStreamAVFObjC
        can flush its renderers when going from not visible -> visible.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVisible):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):

2017-05-12  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed Windows build fix.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:

2017-05-12  Antti Koivisto  <antti@apple.com>

        Updating class name of a shadow host does not update the style applied by descendants of :host()
        https://bugs.webkit.org/show_bug.cgi?id=170762
        <rdar://problem/31572668>

        Reviewed by Ryosuke Niwa.

        We need to invalidate shadow tree style when host classes or attributes change if it may be
        affected by host rules.

        Test: fast/shadow-dom/css-scoping-host-class-and-attribute-mutation.html

        * css/RuleSet.cpp:
        (WebCore::isHostSelectorMatchingInShadowTree):
        (WebCore::RuleSet::addRule):

            Check if we have :host selectors that affect shadow tree.

        * css/RuleSet.h:
        (WebCore::RuleSet::hasHostPseudoClassRulesMatchingInShadowTree):
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostRules):
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):

            Invalidate the whole subtree if there is a class change that may affect shadow tree style.

        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostRules):
        (WebCore::Style::ClassChangeInvalidation::invalidateStyle):
        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByHostRules):
        (WebCore::Style::IdChangeInvalidation::invalidateStyle):

            Same for classes and ids.
            This should be refactored at some point to reduce copy-code.

2017-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ASSERTION FAILED: !m_flushingLayers
        https://bugs.webkit.org/show_bug.cgi?id=172025

        Reviewed by Žan Doberšek.

        The problem is that syncImageBacking() is calling didChangeLayerState(). All sync methods are called by
        flushCompositingStateForThisLayerOnly() while flushing layers, so none of them should call didChange method that
        will schedule a new flush while flushing.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):

2017-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GIF images are not properly loaded the first time
        https://bugs.webkit.org/show_bug.cgi?id=170432

        Reviewed by Carlos Alberto Lopez Perez.

        When the GIF image is loaded for the first time, it's always read from the network, and the decoder is usually
        fetched with chunks of data. Then the data is cached in disk by the network process, so that when loaded from
        the cache, the whole encoded data is available to fetch the encoder. The problem is that we are failing to
        decode the image when giving chunks of data, that's why it only happens the first time loaded. If the first
        chunk of data provided is enough to get some metadata, including the size, but not frame contents, the load fails
        in CachedImage::addIncrementalDataBuffer() because the EncodedDataStatus reported is SizeAvailable but
        Image::isNull() returns true. An Image is considered to be Null when its size is empty, and the size is
        calculated always using the first frame in ImageFrameCache. Since we still don't have frames, the image is
        always Null in this case. It is not expected that EncodedDataStatus returns SizeAvailable and the image is Null,
        that's why it's considered an error and the load finishes with a decode error. However, the non CG ImageDecoder
        has a m_size member to handle this particular case, and it's when m_size is set when EncodedDataStatus changes
        to SizeAvailable. We should return the ImageEncoder size as the ImageSize when we have a decoder but
        not frames yet.

        Test: http/tests/images/gif-progressive-load.html

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::size): Return ImageDecoder::size() without caching it, if frame list is empty.

2017-05-12  Per Arne Vollan  <pvollan@apple.com>

        The iBooks application is not able to get current position.
        https://bugs.webkit.org/show_bug.cgi?id=171982
        rdar://problem/29318409

        Reviewed by Brent Fulgham.

        Geolocation requests from iBooks are currently blocked. Make an exemption from the policy for iBooks.

        No new tests since we currently can't mock the iBooks application bundle ID.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::isRequestFromIBooks):
        (WebCore::Geolocation::shouldBlockGeolocationRequests):

2017-05-11  Per Arne Vollan  <pvollan@apple.com>

        Geolocation requests should not be blocked when the security origin is local.
        https://bugs.webkit.org/show_bug.cgi?id=171857
        rdar://problem/29318409

        Reviewed by Brent Fulgham.

        Geolocation requests from security origins where the url scheme is registered as local,
        should not be blocked. This applies to the file url scheme, but also to other local url
        schemes.

        Test: fast/misc/geolocation-local-security-origin.html

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::shouldBlockGeolocationRequests):

2017-05-11  Chris Dumez  <cdumez@apple.com>

        Drop remaining uses of PassRefPtr in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=172013

        Reviewed by Yusuke Suzuki.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createRootObject):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        * bridge/objc/WebScriptObject.mm:
        (WebCore::createJSWrapper):
        (-[WebScriptObject _setImp:originRootObject:rootObject:]):
        (-[WebScriptObject _setOriginRootObject:andRootObject:]):
        (-[WebScriptObject _initWithJSObject:originRootObject:rootObject:]):
        * bridge/objc/WebScriptObjectPrivate.h:

2017-05-11  Zalan Bujtas  <zalan@apple.com>

        RenderImageResource::hasImage is redundant and RenderImageResourceStyleImage's override is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=172010
        <rdar://problem/31086735>

        Reviewed by Simon Fraser.

        RenderImageResourceStyleImage::hasImage() always returns true even when ::cachedImage()
        returns nullptr (e.g. image is pending).
        Remove it and use cachedImage() instead.

        Test: fast/images/missing-content-image-crash.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::didAttachRenderers):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded):
        (WebCore::RenderImage::isShowingMissingOrImageError):
        (WebCore::RenderImage::hasNonBitmapImage):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::foregroundIsKnownToBeOpaqueInRect):
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::cachedImage):
        (WebCore::RenderImageResource::hasImage): Deleted.
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::hasSingleSecurityOrigin):
        (WebCore::SVGImageElement::didAttachRenderers):

2017-05-11  Zalan Bujtas  <zalan@apple.com>

        AX: Defer text changes until after the tree is clean if needed.
        https://bugs.webkit.org/show_bug.cgi?id=171546
        <rdar://problem/31934942>

        Reviewed by Simon Fraser.

        While updating an accessibility object state, we might
        trigger unintentional style updates. This style update could
        end up destroying renderes that are still referenced by functions
        on the callstack.
        To avoid that, defer such changes and let AXObjectCache operate on a clean tree.         

        Test: accessibility/crash-when-render-tree-is-not-clean.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::labelChanged):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::deferRecomputeIsIgnored):
        (WebCore::AXObjectCache::deferTextChangedIfNeeded):
        (WebCore::AXObjectCache::recomputeDeferredIsIgnored): Deleted.
        (WebCore::AXObjectCache::deferTextChanged): Deleted.
        * accessibility/AXObjectCache.h: Decouple different type of changes.
        (WebCore::AXObjectCache::deferRecomputeIsIgnored):
        (WebCore::AXObjectCache::deferTextChangedIfNeeded):
        (WebCore::AXObjectCache::recomputeDeferredIsIgnored): Deleted.
        (WebCore::AXObjectCache::deferTextChanged): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::deleteLines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createAndAppendRootInlineBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):

2017-05-11  Chris Dumez  <cdumez@apple.com>

        Drop remaining uses of PassRefPtr under platform/
        https://bugs.webkit.org/show_bug.cgi?id=172007

        Reviewed by Geoffrey Garen.

        * platform/graphics/wpe/ImageWPE.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/ios/LegacyTileGrid.h:
        * platform/ios/LegacyTileGrid.mm:
        (WebCore::LegacyTileGrid::tileForIndex):
        (WebCore::LegacyTileGrid::tileForPoint):
        * platform/ios/LegacyTileGridTile.h:
        (WebCore::LegacyTileGridTile::create):
        * platform/mediastream/RTCIceCandidateDescriptor.cpp:
        (WebCore::RTCIceCandidateDescriptor::create):
        * platform/mediastream/RTCIceCandidateDescriptor.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mediastream/RTCSessionDescriptionDescriptor.cpp:
        (WebCore::RTCSessionDescriptionDescriptor::create):
        * platform/mediastream/RTCSessionDescriptionDescriptor.h:
        * platform/mediastream/RTCSessionDescriptionRequest.h:
        (WebCore::RTCSessionDescriptionRequest::extraData):
        (WebCore::RTCSessionDescriptionRequest::setExtraData):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::firstSource):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::setOrientation):
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::setPosition):
        * platform/mock/GeolocationClientMock.h:
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::SessionRequestNotifier::SessionRequestNotifier):
        (WebCore::SessionRequestNotifier::fire):
        (WebCore::VoidRequestNotifier::VoidRequestNotifier):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/TimerEventBasedMock.h:
        (WebCore::TimerEventBasedMock::removeEvent):
        (WebCore::TimerEvent::TimerEvent):
        (WebCore::TimerEvent::timerFired):
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockSourceBufferPrivateHasAudio):
        (WebCore::MockSourceBufferPrivateHasVideo):
        * platform/wpe/RenderThemeWPE.h:

2017-05-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Stop using PassRefPtr in platform/graphics/wpe
        https://bugs.webkit.org/show_bug.cgi?id=171977

        Unreviewed build fix after r216702.

        * platform/graphics/wpe/ImageWPE.cpp:
        (WebCore::Image::loadPlatformResource):

2017-05-11  Youenn Fablet  <youenn@apple.com>

        [iOS] Unset active media capture source when stopped capturing
        https://bugs.webkit.org/show_bug.cgi?id=171815
        <rdar://problem/32117885>

        Reviewed by Eric Carlson.

        Test: platform/ios/mediastream/getUserMedia-single-capture.html

        Introducing SingleSourceFactory template class to be used by capture factories for iOS.
        This class ensures that only one source is active at a time.
        Update all capture sources accordingly.
        Ensure sources are no longer considered as active sources when being destroyed.
        Add support for mock sources and introducing m_isProducingData for them as well.

        Update WebRTC outgoing source classes to handle the case of replaced track and resetting the enabled/mute
        state according the new source.

        Update the way we handle timestamps for audio data. We now consider that we read/write as a flow.
        This allows smooth audio track replacing.

        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::~AVAudioCaptureSource):
        (WebCore::AVAudioCaptureSourceFactory::setActiveSource): Deleted.
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSourceFactory::setActiveSource): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        (WebCore::CoreAudioCaptureSourceFactory::setActiveSource): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::setSource):
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):
        (WebCore::RealtimeOutgoingAudioSource::pullAudioData):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::setSource):
        (WebCore::RealtimeOutgoingVideoSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingVideoSource::sourceEnabledChanged):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::mockAudioCaptureSourceFactory):
        (WebCore::MockRealtimeAudioSource::factory):
        (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        (WebCore::MockRealtimeAudioSource::stopProducingData):
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::mockVideoCaptureSourceFactory):
        (WebCore::MockRealtimeVideoSource::factory):
        (WebCore::MockRealtimeVideoSource::~MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::startProducingData):
        (WebCore::MockRealtimeVideoSource::stopProducingData):
        * platform/mock/MockRealtimeVideoSource.h:
        (WebCore::MockRealtimeVideoSource::~MockRealtimeVideoSource): Deleted.

2017-05-11  Timothy Horton  <timothy_horton@apple.com>

        Fix the iOS build

        * platform/spi/mac/NSSpellCheckerSPI.h:

2017-05-11  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r216677.

        Patch caused layout test crashes.

        Reverted changeset:

        "WorkerThread::stop() should call
        scheduleExecutionTermination() last."
        https://bugs.webkit.org/show_bug.cgi?id=171775
        http://trac.webkit.org/changeset/216677

2017-05-11  Don Olmstead  <don.olmstead@am.sony.com>

        [CMake] Add HAVE check for regex.h
        https://bugs.webkit.org/show_bug.cgi?id=171950

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        * WebCorePrefix.h:
        * testing/js/WebCoreTestSupportPrefix.h:

2017-05-11  Tim Horton  <timothy_horton@apple.com>

        Mail spins launching spell checker when typing
        https://bugs.webkit.org/show_bug.cgi?id=171986
        <rdar://problem/26305327>

        Reviewed by Beth Dakin.

        * platform/spi/mac/NSSpellCheckerSPI.h:

2017-05-11  Chris Dumez  <cdumez@apple.com>

        Stop using PassRefPtr in platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=171977

        Reviewed by Alex Christensen.

        Stop using PassRefPtr in platform/graphics.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::image):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::brokenImage):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::imageForRenderer):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::addImageToResources):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintPanScrollIcon):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::nullImage):
        * platform/graphics/Image.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::createResourceLoader):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::create):
        (WebCore::Pattern::Pattern):
        * platform/graphics/Pattern.h:
        * platform/graphics/PlatformTextTrack.h:
        (WebCore::PlatformTextTrack::create):
        (WebCore::PlatformTextTrack::createOutOfBand):
        (WebCore::PlatformTextTrack::captionMenuOffItem):
        (WebCore::PlatformTextTrack::captionMenuAutomaticItem):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        (WebCore::InbandMetadataTextTrackPrivateAVF::create):
        (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings):
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionOptionAVFObjC::create):
        (WebCore::MediaSelectionGroupAVFObjC::create):
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
        (WebCore::InbandTextTrackPrivateAVCF::create):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
        (WebCore::InbandTextTrackPrivateLegacyAVCF::create):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::create):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::generateKeyReleaseMessage):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::generateKeyReleaseMessage):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        (WebCore::InbandTextTrackPrivateAVFObjC::create):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::create):
        * platform/graphics/avfoundation/objc/OutOfBandTextTrackPrivateAVF.h:
        (WebCore::OutOfBandTextTrackPrivateAVF::create):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::create):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCALayer):
        (WebCore::GraphicsLayerCA::createPlatformCAAnimation):
        (WebCore::GraphicsLayerCA::setContentsToPlatformLayer):
        (WebCore::GraphicsLayerCA::replicatedLayerRoot):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createBasicAnimation):
        (WebCore::GraphicsLayerCA::createKeyframeAnimation):
        (WebCore::GraphicsLayerCA::createSpringAnimation):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::LayerPropertyAnimation::LayerPropertyAnimation):
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (PlatformCAAnimationCocoa::create):
        (PlatformCAAnimationCocoa::copy):
        * platform/graphics/ca/win/AbstractCACFLayerTreeHost.h:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::create):
        (WebCore::CACFLayerTreeHost::addPendingAnimatedLayer):
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimationWin::create):
        (PlatformCAAnimationWin::copy):
        * platform/graphics/ca/win/PlatformCAAnimationWin.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::addAnimationForKey):
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        (WebCore::WKCACFViewLayerTreeHost::create):
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::clipForPatternFilling):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        (WebCore::FEDiffuseLighting::create):
        (WebCore::FEDiffuseLighting::lightSource):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::FELighting):
        (WebCore::FELighting::drawLighting):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting):
        (WebCore::FESpecularLighting::create):
        (WebCore::FESpecularLighting::lightSource):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::setFilterEffect):
        (WebCore::BasicColorMatrixFilterOperation::blend):
        (WebCore::BasicComponentTransferFilterOperation::blend):
        (WebCore::BlurFilterOperation::blend):
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::blend):
        (WebCore::PassthroughFilterOperation::create):
        (WebCore::ReferenceFilterOperation::create):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamer.h:
        (WebCore::ImageGStreamer::createImage):
        (WebCore::ImageGStreamer::image):
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::create):
        (WebCore::InbandMetadataTextTrackPrivateGStreamer::addGenericCue):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::enqueueSample):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourceGStreamer.cpp:
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::enqueueSample):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h:
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::loadImageFromGResource):
        (WebCore::loadResourceSharedBuffer):
        (WebCore::loadMissingImageIconFromTheme):
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/harfbuzz/HarfBuzzFace.cpp:
        (WebCore::FaceCacheEntry::create):
        * platform/graphics/harfbuzz/HarfBuzzFace.h:
        (WebCore::HarfBuzzFace::create):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/opentype/OpenTypeMathData.h:
        (WebCore::OpenTypeMathData::create):
        * platform/graphics/texmap/BitmapTexture.h:
        (WebCore::BitmapTexture::applyFilters):
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/BitmapTextureGL.h:
        (WebCore::BitmapTextureGL::FilterInfo::FilterInfo):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::acquireTextureFromPool):
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::createTexture):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintIntoSurface):
        (WebCore::commitSurface):
        (WebCore::TextureMapperLayer::paintWithIntermediateSurface):
        (WebCore::TextureMapperLayer::setBackingStore):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        (WebCore::TextureMapperTiledBackingStore::create):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::create):
        (WebCore::CoordinatedImageBacking::CoordinatedImageBacking):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:
        * platform/graphics/win/ImageWin.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        * platform/graphics/win/PatternDirect2D.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/win/SharedGDIObject.h:
        (WebCore::SharedGDIObject::create):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::image):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::drawPlatformResizerImage):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::imageForRenderer):

2017-05-11  Joseph Pecoraro  <pecoraro@apple.com>

        Remove Vibration API
        https://bugs.webkit.org/show_bug.cgi?id=171766

        Rubber-stamped by Alexey Proskuryakov.

        * features.json:
        Mark the Vibration API as removed.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * Modules/vibration/NavigatorVibration.cpp: Removed.
        * Modules/vibration/NavigatorVibration.h: Removed.
        * Modules/vibration/NavigatorVibration.idl: Removed.
        * Modules/vibration/Vibration.cpp: Removed.
        * Modules/vibration/Vibration.h: Removed.
        * Modules/vibration/VibrationClient.h: Removed.
        * testing/Internals.cpp:
        (WebCore::Internals::isVibrating): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-11  Dean Jackson  <dino@apple.com>

        WebGLRenderingContext should implement WebGLRenderingContextBase
        https://bugs.webkit.org/show_bug.cgi?id=171961
        <rdar://problem/32124920>

        Reviewed by Sam Weinig.

        WebGLRenderingContext and WebGL2RenderingContext are both
        defined to "implement" WebGLRenderingContextBase. However, we
        were doing it via inheritance, which meant that some things
        were not visible on the WebGLRenderingContext prototype.

        Test: fast/canvas/webgl/constants-on-interface.html

        * WebCore.xcodeproj/project.pbxproj: Move the Custom.cpp files
        out of the GC-only area now they have real content.

        * bindings/js/JSDocumentCustom.cpp: Handle the fact that we
        don't use the base class from the bindings, so we need to
        translate WebGL1 and WebGL2 contexts into the right JS classes.
        (WebCore::JSDocument::getCSSCanvasContext):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):

        * bindings/js/JSWebGL2RenderingContextCustom.cpp: Implement the
        custom methods. In this case, we don't yet expose any
        extensions for WebGL 2.
        (WebCore::toJS):
        (WebCore::JSWebGL2RenderingContext::getExtension):

        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp: Removed.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSWebGLRenderingContext::getExtension):

        * html/canvas/WebGL2RenderingContext.h: Make some things public.
        * html/canvas/WebGLRenderingContext.h: Ditto.

        * html/canvas/WebGL2RenderingContext.idl: Use implements.
        * html/canvas/WebGLRenderingContext.idl: Ditto.

        * testing/Internals.cpp: This now takes a WebGLRenderingContext.
        (WebCore::Internals::simulateWebGLContextChanged):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-05-11  Andy Estes  <aestes@apple.com>

        Fix a spelling mistake in ApplePayErrorCode
        https://bugs.webkit.org/show_bug.cgi?id=171981
        <rdar://problem/32136567>

        Reviewed by Beth Dakin.

        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/PaymentRequest.h:

2017-05-11  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Enable configuration through preferences
        https://bugs.webkit.org/show_bug.cgi?id=171949
        <rdar://problem/31894518>

        Reviewed by Alex Christensen.

        No new tests. Just an added setter.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setReducedTimestampResolution):

2017-05-11  Frederic Wang  <fwang@igalia.com>

        Unify hasTouchScrollableOverflow/needsCompositedScrolling concepts
        https://bugs.webkit.org/show_bug.cgi?id=171974

        Reviewed by Simon Fraser.

        This commit moves the following pattern in a single RenderLayer::usesAcceleratedScrolling function:
        #if PLATFORM(IOS)
        ...hasTouchScrollableOverflow()...
        #else
        ...needsCompositedScrolling()...
        #endif

        No new tests, behavior unchanged.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::usesAcceleratedScrolling): Introduce helper function.
        * rendering/RenderLayer.h: Declare the function.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling): Use the new function.
        (WebCore::RenderLayerBacking::updateConfiguration): Ditto.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::useCoordinatedScrollingForLayer): Ditto.

2017-05-11  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableStreamBYOBReader cancel()
        https://bugs.webkit.org/show_bug.cgi?id=171919

        Reviewed by Youenn Fablet.

        Implemented ReadableStreamBYOBReader cancel() method.

        Added tests checking cancel().

        * Modules/streams/ReadableStreamBYOBReader.js:
        (cancel): Implemented.
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamError): Updated to support ReadableStreamBYOBReader case.

2017-05-11  Chris Dumez  <cdumez@apple.com>

        Stop using PassRefPtr in WebGPU code
        https://bugs.webkit.org/show_bug.cgi?id=171965

        Reviewed by Alex Christensen.

        Stop using PassRefPtr in WebGPU code.

        * html/canvas/WebGPUDrawable.cpp:
        (WebCore::WebGPUDrawable::WebGPUDrawable):
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::create):
        (WebCore::WebGPURenderingContext::WebGPURenderingContext):
        * html/canvas/WebGPURenderingContext.h:
        * html/canvas/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::createFromDrawableTexture):
        (WebCore::WebGPUTexture::WebGPUTexture):
        * html/canvas/WebGPUTexture.h:

2017-05-11  Youenn Fablet  <youenn@apple.com>

        Name WebRTC Threads
        https://bugs.webkit.org/show_bug.cgi?id=171975

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::LibWebRTCAudioModule): Setting audio module thread name.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::initializePeerConnectionFactoryAndThreads): Setting signaling and networking thread names.

2017-05-11  Chris Dumez  <cdumez@apple.com>

        Stop using PassRefPtr in platform/audio
        https://bugs.webkit.org/show_bug.cgi?id=171966

        Reviewed by Ryosuke Niwa.

        Stop using PassRefPtr in platform/audio.

        * platform/audio/AudioBus.h:
        (WebCore::AudioBus::AudioBus):
        * platform/audio/AudioFileReader.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):
        * platform/audio/glib/AudioBusGLib.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/ios/AudioFileReaderIOS.cpp:
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/ios/AudioFileReaderIOS.h:
        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/mac/AudioFileReaderMac.h:

2017-05-11  Mark Lam  <mark.lam@apple.com>

        WorkerThread::stop() should call scheduleExecutionTermination() last.
        https://bugs.webkit.org/show_bug.cgi?id=171775
        <rdar://problem/30975761>

        Reviewed by Geoffrey Garen.

        Currently, WorkerThread::stop() calls scheduleExecutionTermination() to terminate
        JS execution first, followed by posting a cleanup task to the worker, and lastly,
        it invokes terminate() on the WorkerRunLoop.

        As a result, before run loop is terminate, the worker thread may observe the
        TerminatedExecutionException in JS code, bail out, see another JS task to run,
        re-enters the VM to run said JS code, and fails with an assertion due to the
        TerminatedExecutionException still being pending on VM entry.

        WorkerRunLoop::Task::performTask() already has a check to only allow a task to
        run if and only if !runLoop.terminated() and the task is not a clean up task.
        We'll fix the above race by ensuring that having WorkerThread::stop() terminate
        the run loop before it scheduleExecutionTermination() which throws the
        TerminatedExecutionException.  This way, by the time JS code unwinds out of the
        VM due to the TerminatedExecutionException, runLoop.terminated() is guaranteed
        to be true and thereby prevents re-entry into the VM.

        This issue is covered by an existing test that I just unskipped in TestExpectations.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):

2017-05-11  Chris Dumez  <cdumez@apple.com>

        Drop custom bindings code for HTMLFormControlsCollection's named property getter
        https://bugs.webkit.org/show_bug.cgi?id=171964

        Reviewed by Sam Weinig.

        Drop custom bindings code for HTMLFormControlsCollection's named property getter as
        we are able to generate it.

        No new tests, no expected Web-facing behavior change.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateNamedGetter):
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::namedItemOrItems):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormControlsCollection.idl:

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

        [MediaStream] CoreAudioCaptureSource claims to never be muted
        https://bugs.webkit.org/show_bug.cgi?id=171946
        <rdar://problem/32111991>

        Reviewed by Jer Noble.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::stopProducingData): Set m_muted to true.

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

        RELEASE_ASSERT at WebAudioSourceProviderAVFObjC::provideInput()
        https://bugs.webkit.org/show_bug.cgi?id=171711

        Reviewed by Youenn Fablet.

        Before iterating over the channels in either the WebAudioBufferList or the AudioBus, ensure
        we don't walk over the end of either by only iterating over the minimum length of either.
        Also, when the internal format of WebAudioSourceProviderAVFObjC changes, notify the
        MediaStreamAudioSourceNode that the number of channels and sample rate have changed.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):
        (WebCore::WebAudioSourceProviderAVFObjC::prepare):

2017-05-10  Andy Estes  <aestes@apple.com>

        REGRESSION (r167845): ASSERT(!m_renderView.needsLayout()) in svg/custom/bug79798.html
        https://bugs.webkit.org/show_bug.cgi?id=132297

        Reviewed by Simon Fraser.

        We don't know why m_renderView needs layout in this case, but we know that we don't need to
        assert if the client hasn't set the ScrollableInnerFrameTrigger compositing trigger.

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

2017-05-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r216630.

        This change caused assertion failures with webrtc LayoutTests.

        Reverted changeset:

        "RELEASE_ASSERT at
        WebAudioSourceProviderAVFObjC::provideInput()"
        https://bugs.webkit.org/show_bug.cgi?id=171711
        http://trac.webkit.org/changeset/216630

2017-05-09  Sam Weinig  <sam@webkit.org>

        Remove support for legacy Notifications
        https://bugs.webkit.org/show_bug.cgi?id=171487

        Reviewed by Jon Lee.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove files.

        * Configurations/FeatureDefines.xcconfig:
        Remove definition of ENABLE_LEGACY_NOTIFICATIONS.

        * DerivedSources.make:
        Remove IDL files.

        * Modules/notifications/DOMWindowNotifications.cpp: Removed.
        * Modules/notifications/DOMWindowNotifications.h: Removed.
        * Modules/notifications/DOMWindowNotifications.idl: Removed.
        * Modules/notifications/NotificationCenter.cpp: Removed.
        * Modules/notifications/NotificationCenter.h: Removed.
        * Modules/notifications/NotificationCenter.idl: Removed.
        * Modules/notifications/NotificationClient.h:
        * Modules/notifications/NotificationController.cpp:
        * Modules/notifications/NotificationController.h:
        * Modules/notifications/WorkerGlobalScopeNotifications.cpp: Removed.
        * Modules/notifications/WorkerGlobalScopeNotifications.h: Removed.
        * Modules/notifications/WorkerGlobalScopeNotifications.idl: Removed.
        * Modules/notifications/Notification.idl:
        * Modules/notifications/Notification.cpp:
        * Modules/notifications/Notification.h:
        * dom/EventTargetFactory.in:
        * page/DOMWindow.cpp:
        * workers/WorkerThread.h:
        Remove code legacy Notification code. Replace use of NotificationCenter with direct
        calls to the NotificationClient.

2017-05-10  Commit Queue  <commit-queue@webkit.org>

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

        "Some worker tests are failing". (Requested by mlam on #webkit).

        Reverted changeset:

        "WorkerThread::stop() should call
        scheduleExecutionTermination() last."
        https://bugs.webkit.org/show_bug.cgi?id=171775
        http://trac.webkit.org/changeset/216635

2017-05-10  Mark Lam  <mark.lam@apple.com>

        WorkerThread::stop() should call scheduleExecutionTermination() last.
        https://bugs.webkit.org/show_bug.cgi?id=171775
        <rdar://problem/30975761>

        Reviewed by Geoffrey Garen.

        Currently, WorkerThread::stop() calls scheduleExecutionTermination() to terminate
        JS execution first, followed by posting a cleanup task to the worker, and lastly,
        it invokes terminate() on the WorkerRunLoop.

        As a result, before run loop is terminate, the worker thread may observe the
        TerminatedExecutionException in JS code, bail out, see another JS task to run,
        re-enters the VM to run said JS code, and fails with an assertion due to the
        TerminatedExecutionException still being pending on VM entry.

        WorkerRunLoop::Task::performTask() already has a check to only allow a task to
        run if and only if !runLoop.terminated() and the task is not a clean up task.
        We'll fix the above race by ensuring that having WorkerThread::stop() terminate
        the run loop before it scheduleExecutionTermination() which throws the
        TerminatedExecutionException.  This way, by the time JS code unwinds out of the
        VM due to the TerminatedExecutionException, runLoop.terminated() is guaranteed
        to be true and thereby prevents re-entry into the VM.

        This issue is covered by an existing test that I just unskipped in TestExpectations.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):

2017-05-10  Tim Horton  <timothy_horton@apple.com>

        Add an experimental feature flag for viewport-fit
        https://bugs.webkit.org/show_bug.cgi?id=171948
        <rdar://problem/31995518>

        Reviewed by Simon Fraser.

        * dom/ViewportArguments.cpp:
        (WebCore::setViewportFeature):
        * page/Settings.in:
        Disable parsing of viewport-fit if the experimental feature is disabled.

2017-05-10  Chris Dumez  <cdumez@apple.com>

        Simplify relationship between Attr and Element now that Attr is childless
        https://bugs.webkit.org/show_bug.cgi?id=171909

        Reviewed by Ryosuke Niwa.

        Simplify relationship between Attr and Element now that Attr is childless
        after r216259.

        No new tests, no Web facing behavior change.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        Attr::setValue() was only called by Element::setAttributeInternal() to make sure
        we updated the Attr node's Text child. However, now that Attr has no Text child,
        Element no longer needs to update the Attr node's value.
        Attr::setValueForBindings() was thus renamed to setValue(). Its implementation
        was also simplified by calling Element::setAttribute() on its ownerElement, if
        it has one, instead of duplicating a bunch of code from Element::setAttributeInternal().

        (WebCore::Attr::setNodeValue):
        Call setValue() instead of setValueForBindings() now that it has been renamed.

        * dom/Attr.h:
        * dom/Attr.idl:
        Rename valueForBindings / setValueForBindings to value / setValue.

        * dom/Document.h:
        Split shouldInvalidateNodeListAndCollectionCaches() into 2 methods, one taking an Attr name
        and another that does not. There are now 2 calls sites instead of one, so we no longer need
        to branch in this function.

        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        Drop code calling Attr::setValue() on the Attr node since Attr::setValue() was only
        duplicating logic from Element::setAttributeInternal() after r216259. There is nothing
        on Attr that needs updating when an element attribute gets updated.

        (WebCore::Element::attributeChanged):
        Call the new invalidateNodeListAndCollectionCachesInAncestorsForAttribute(). This
        is the only call site that passes an attribute name.

        * dom/Node.cpp:
        (WebCore::Document::shouldInvalidateNodeListAndCollectionCaches):
        (WebCore::Document::shouldInvalidateNodeListAndCollectionCachesForAttribute):
        Split into 2 to avoid branching, as explained above.

        (WebCore::Node::invalidateNodeListAndCollectionCachesInAncestors):
        (WebCore::Node::invalidateNodeListAndCollectionCachesInAncestorsForAttribute):
        - invalidateNodeListAndCollectionCachesInAncestors() used to invalidate childNodeLists
          if the Node was an attribute node. Drop this as this is no longer needed as of r216259.
        - After the change to Attr::setValue(), call sites for
          invalidateNodeListAndCollectionCachesInAncestors() either had no parameters, or both
          parameters present and non-null. There is therefore no longer any need to handle
          having an attrName but no attributeOwnerElement. To make this obvious, I split this
          into 2 methods: invalidateNodeListAndCollectionCachesInAncestors() and
          invalidateNodeListAndCollectionCachesInAncestorsForAttribute(attrName). We no longer
          need the attributeOwnerElement parameter as it was only used to exit early.

        * dom/Node.h:

2017-05-10  Antti Koivisto  <antti@apple.com>

        REGRESSION (r207372) Visibility property is not inherited when used in an animation
        https://bugs.webkit.org/show_bug.cgi?id=171883
        <rdar://problem/32086550>

        Reviewed by Simon Fraser.

        The problem here is that our animation code is tied to renderers. We don't have renderers during
        the initial style resolution so animations are not applied yet. When constructing renderers we set
        their style to the initial animated style but this step can't implement inheritance.

        Normally this is invisible as the first animation frame will immediately inherit the style correctly.
        However in this case the animation is discrete and the first frame is the same as the initial state.
        With r207372 we optimize the descendant style change away.

        This patch fixes the problem by tracking that the renderer has initial animated style and inheriting
        it to descendants during next style resolution even if it doesn't change.

        Test: animations/animation-initial-inheritance.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasInitialAnimatedStyle):
        (WebCore::RenderElement::setHasInitialAnimatedStyle):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createRenderer):

            Set a bit on renderer indicating it has initial animated style.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

            Return at least 'Inherit' for style change when updating renderer with initial animated style.

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

        RELEASE_ASSERT at WebAudioSourceProviderAVFObjC::provideInput()
        https://bugs.webkit.org/show_bug.cgi?id=171711

        Reviewed by Youenn Fablet.

        Before iterating over the channels in either the WebAudioBufferList or the AudioBus, ensure
        we don't walk over the end of either by only iterating over the minimum length of either.
        Also, when the internal format of WebAudioSourceProviderAVFObjC changes, notify the
        MediaStreamAudioSourceNode that the number of channels and sample rate have changed.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):
        (WebCore::WebAudioSourceProviderAVFObjC::prepare):

2017-05-04  Filip Pizlo  <fpizlo@apple.com>

        GCController.cpp's collect() should be Async
        https://bugs.webkit.org/show_bug.cgi?id=171708

        Reviewed by Saam Barati and Geoffrey Garen.

        No new tests because no change in behavior.
        
        This is one step towards not requesting sync GCs in WebCore. I'm landing this incrementally to
        make bisecting super easy.
        
        This is a ~7% JetStream iOS "regression", because JetStream has a bug where it allows trunk
        to sneakily hide GC work between when JetStream measures time. After this change, we are no
        longer trying to be sneaky.

        * bindings/js/GCController.cpp:
        (WebCore::collect):

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

        CoreAudioCaptureSource reports 3 or 5 channel audio output; actually only mono
        https://bugs.webkit.org/show_bug.cgi?id=171940

        Reviewed by Eric Carlson.

        Asking for the Input VPIO stream format will return the internal mic format, before processing. Instead
        ask for the input bus's output format, which is post processing, which will return the correct number
        of channels (one).

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::configureMicrophoneProc):

2017-05-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r216591.

        This change broke an internal build.

        Reverted changeset:

        "REGRESSION (r207372) Visibility property is not inherited
        when used in an animation"
        https://bugs.webkit.org/show_bug.cgi?id=171883
        http://trac.webkit.org/changeset/216591

2017-05-10  Chris Dumez  <cdumez@apple.com>

        Drop custom bindings code now window.open()
        https://bugs.webkit.org/show_bug.cgi?id=171933

        Reviewed by Geoffrey Garen.

        Drop custom bindings code now window.open() as it is not doing anything special.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::open): Deleted.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend):

2017-05-10  Tim Horton  <timothy_horton@apple.com>

        Add an experimental feature flag for constant properties
        https://bugs.webkit.org/show_bug.cgi?id=171913
        <rdar://problem/31995518>

        Reviewed by Ryosuke Niwa.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeCustomPropertyValue):
        * css/parser/CSSParserMode.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseValueStart):
        * css/parser/CSSVariableParser.cpp:
        (WebCore::classifyBlock):
        (WebCore::isValidVariableReference):
        (WebCore::isValidConstantReference):
        (WebCore::classifyVariableRange):
        (WebCore::CSSVariableParser::containsValidVariableReferences):
        (WebCore::CSSVariableParser::parseDeclarationValue):
        * css/parser/CSSVariableParser.h:
        Plumb the experimental feature flag down into CSSVariableParser by way
        of CSSParserContext.

        * page/Settings.in:

2017-05-10  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r206960): Possible null pointer dereference under DOMSelection::getRangeAt()
        https://bugs.webkit.org/show_bug.cgi?id=171925
        <rdar://problem/29931223>

        Reviewed by Wenson Hsieh.

        We have evidence that selection().firstRange() can return null in DOMSelection::getRangeAt().
        When this happens, we now throw an INDEX_SIZE_ERR instead of dereferencing it.

        I believe this can happen if the VisibleSelection is orphaned but not none, because
        rangeCount() only checks for isNone() but VisibleSelection::firstRange() can return null
        if isNoneOrOrphaned().

        No new tests, I do not know how to reproduce.

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

2017-05-10  Matt Rajca  <mrajca@apple.com>

        DumpRenderTree crashed in com.apple.WebCore: std::optional<WTF::MediaTime>::operator-> + 71 :: CRASHING TEST: fullscreen/video-controls-timeline.html
        https://bugs.webkit.org/show_bug.cgi?id=171932

        Reviewed by Eric Carlson.

        Explicitly initialize m_playbackWithoutUserGesture to "None".

        * html/HTMLMediaElement.h:

2017-05-10  Andy Estes  <aestes@apple.com>

        Keyboard input suppression should extend to subframes
        https://bugs.webkit.org/show_bug.cgi?id=171880
        <rdar://problem/31201793>

        Reviewed by Ryosuke Niwa.

        Test: http/tests/navigation/keyboard-events-during-provisional-subframe-navigation.html

        * dom/EventDispatcher.cpp:
        (WebCore::shouldSuppressEventDispatchInDOM): Changed to call shouldSuppressKeyboardInput()
        on the main frame's loader.
        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertText): Ditto.

2017-05-10  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r216563.

        Revision caused 2 api failures

        Reverted changeset:

        "[MediaStream] deviceId constraint doesn't work with
        getUserMedia"
        https://bugs.webkit.org/show_bug.cgi?id=171877
        http://trac.webkit.org/changeset/216563

2017-05-10  Frederic Wang  <fwang@igalia.com>

        Refactor ScrollingCoordinator::setSynchronousScrollingReasons to accept a FrameView
        https://bugs.webkit.org/show_bug.cgi?id=171923

        Reviewed by Simon Fraser.

        Currently ScrollingCoordinator::setSynchronousScrollingReasons implementations assumes
        SynchronousScrollingReasons apply to the main frame. This commit allows to specify
        a FrameView in order to prepare support for fast scrolling of frames.

        No new tests, no behavior changes.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons): Use the FrameView to
        find the state node.
        (WebCore::AsyncScrollingCoordinator::updateScrollLayerPosition): Rename this function
        updateMainFrameScrollLayerPosition and use the specified FrameView.
        * page/scrolling/AsyncScrollingCoordinator.h: Add FrameView parameter.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons): Remove the const since
        AsyncScrollingCoordinator uses scrollLayerForFrameView. Pass the frameView to
        setSynchronousScrollingReasons.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setSynchronousScrollingReasons): Add FrameView parameter.

2017-05-10  Antti Koivisto  <antti@apple.com>

        REGRESSION (r207372) Visibility property is not inherited when used in an animation
        https://bugs.webkit.org/show_bug.cgi?id=171883
        <rdar://problem/32086550>

        Reviewed by Simon Fraser.

        The problem here is that our animation code is tied to renderers. We don't have renderers during
        the initial style resolution so animations are not applied yet. When constructing renderers we set
        their style to the initial animated style but this step can't implement inheritance.

        Normally this is invisible as the first animation frame will immediately inherit the style correctly.
        However in this case the animation is discrete and the first frame is the same as the initial state.
        With r207372 we optimize the descendant style change away.

        This patch fixes the problem by tracking that the renderer has initial animated style and inheriting
        it to descendants during next style resolution even if it doesn't change.

        Test: animations/animation-initial-inheritance.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasInitialAnimatedStyle):
        (WebCore::RenderElement::setHasInitialAnimatedStyle):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createRenderer):

            Set a bit on renderer indicating it has initial animated style.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

            Return at least 'Inherit' for style change when updating renderer with initial animated style.

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

        Tiny cleanup in Font::DerivedFonts
        https://bugs.webkit.org/show_bug.cgi?id=171893

        Reviewed by Jon Lee.

        This variable was written to but never read.

        No new tests because there is no behavior change.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):
        * platform/graphics/Font.cpp:
        (WebCore::Font::verticalRightOrientationFont):
        (WebCore::Font::uprightOrientationFont):
        (WebCore::Font::smallCapsFont):
        (WebCore::Font::noSynthesizableFeaturesFont):
        (WebCore::Font::emphasisMarkFont):
        (WebCore::Font::brokenIdeographFont):
        (WebCore::Font::DerivedFonts::~DerivedFonts): Deleted.
        * platform/graphics/Font.h:
        (WebCore::Font::DerivedFonts::DerivedFonts): Deleted.

2017-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove user agent quirk for Slack
        https://bugs.webkit.org/show_bug.cgi?id=171869

        Reviewed by Carlos Garcia Campos.

        The user agent quirk for Slack does not seem to be necessary anymore. I am able to use Slack
        without difficulty using our default user agent.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):

2017-05-10  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [GTK] Fix compile warnings in CryptoKeyECGCrypt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=171851

        Reviewed by Alex Christensen.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::curveSize):
        (WebCore::curveName):
        (WebCore::uncompressedPointSizeForCurve):
        (WebCore::uncompressedFieldElementSizeForCurve):

2017-05-08  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Remove Blink-specific code for handling orthogonal grid items
        https://bugs.webkit.org/show_bug.cgi?id=171807

        Reviewed by Darin Adler.

        This code was added in r203252 as part of a patch improving the handling of
        {min|max}-content with orthogonal flows. The original code came from Blink which performs a
        pre-layout of orthogonal boxes in FrameView. That is not true in the case of WebKit so we do
        not need this code at all. Actually it was causing incorrect renderings in some tests.

        I'm also removing an invalid return statement just after another return.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild):
        (WebCore::GridTrackSizingAlgorithmStrategy::maxContentForChild):

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

        Unreviewed build fix.

        * platform/wpe/WidgetWPE.cpp:
        (WebCore::Widget::paint): Add the missing SecurityOriginPaintPolicy parameter.

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

        [MediaStream] deviceId constraint doesn't work with getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=171877
        <rdar://problem/31899730>

        Reviewed by Jer Noble.

        Test: fast/mediastream/get-user-media-device-id.html

        * Modules/mediastream/MediaConstraintsImpl.h:
        (WebCore::MediaConstraintsData::MediaConstraintsData): Add a constructor that 
        takes a const MediaConstraints&.

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        (WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin): Don't return
        NULL for the main frame so the origin matches that returned for a UserMediaRequest.

        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::setDeviceIDHashSalt): Deleted, not used.
        (WebCore::UserMediaController::deviceIDHashSalt): Deleted, not used.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow): Add device ID hash salt parameter, set it on
        constraints.
        * Modules/mediastream/UserMediaRequest.h:

        * platform/mediastream/MediaConstraints.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance): ASSERT if called for DeviceId.
        (WebCore::RealtimeMediaSource::selectSettings): Special case DeviceId because it
        we have to hash the device ID before comparing, and because the DeviceId can't be
        changed so it should never be added to the flattened constraints.

        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp:
        (WebCore::RealtimeMediaSourceSupportedConstraints::nameForConstraint): Deleted, unused.
        (WebCore::RealtimeMediaSourceSupportedConstraints::constraintFromName): Deleted, unused.
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints): Pass device
        id, not empty string.

2017-05-09  Jeremy Jones  <jeremyj@apple.com>

        Video fullscreen window level should be below status bar.
        https://bugs.webkit.org/show_bug.cgi?id=171892
        rdar://problem/31771707

        Reviewed by Jer Noble.

        No new tests because it only affects platform window level.

        Move the fullscreen window below the status bar, but above the input field window level.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):

2017-05-09  Sam Weinig  <sam@webkit.org>

        Implement Subresource Integrity (SRI) [Part 2 - Fetch]
        https://bugs.webkit.org/show_bug.cgi?id=148363
        <rdar://problem/18945879>

        Reviewed by Youenn Fablet.

        Tests: http/tests/subresource-integrity/sri-fetch-worker.html
               http/tests/subresource-integrity/sri-fetch.html

        * loader/FetchOptions.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::isolatedCopy):
        * loader/ThreadableLoader.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::LoaderTaskOptions::LoaderTaskOptions):
        Add integrity metadata to the fetch options, and fix the implementation of
        ThreadableLoaderOptions::isolatedCopy to work correctly (it was missing isolated
        copy derivedCachedDataTypesToRetrieve).

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::buildOptions):
        (WebCore::FetchRequest::initializeOptions):
        * Modules/fetch/FetchRequest.h:
        Switch to using the integrity metadata on the fetchOptions, removing the need to
        store them directly on the internal request.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        (WebCore::DocumentThreadableLoader::reportIntegrityMetadataError):
        * loader/DocumentThreadableLoader.h:
        Add a new flag, m_delayCallbacksForIntegrityCheck, which is used when integrity metadata
        is present, so we can implement the 'wait' concept from the fetch spec, and delay informing
        the clients until we have validated the integrity metadata.

2017-05-09  Commit Queue  <commit-queue@webkit.org>

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

        Caused a test failure (Requested by eric_carlson on #webkit).

        Reverted changeset:

        "[MediaStream] deviceId constraint doesn't work with
        getUserMedia"
        https://bugs.webkit.org/show_bug.cgi?id=171877
        http://trac.webkit.org/changeset/216545

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

        resetFlowThreadContainingBlockAndChildInfoIncludingDescendants should not ignore RenderElement subtrees.
        https://bugs.webkit.org/show_bug.cgi?id=171873
        <rdar://problem/32004954>

        Reviewed by Simon Fraser.

        Normally a RenderBlock's parent is another RenderBlock, but In some cases (e.g. tables) a RenderBlock can
        have a non-RenderBlock(RenderBox) ancestor.
        While updating the flow thread state on a subtree, we should descent into subtrees with RenderElement
        roots and not just RenderBlocks so that we clear the state on the entire subtree.

        Test: fast/multicol/crash-when-column-inside-table.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::resetFlowThreadContainingBlockAndChildInfoIncludingDescendants):
        * rendering/RenderBlock.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::resetFlowThreadContainingBlockAndChildInfoIncludingDescendants):
        * rendering/RenderElement.h:

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

        [MediaStream] deviceId constraint doesn't work with getUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=171877
        <rdar://problem/31899730>

        Reviewed by Jer Noble.

        Test: fast/mediastream/get-user-media-device-id.html

        * Modules/mediastream/MediaConstraintsImpl.h:
        (WebCore::MediaConstraintsData::MediaConstraintsData): Add a constructor that 
        takes a const MediaConstraints&.

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        (WebCore::MediaDevicesEnumerationRequest::topLevelDocumentOrigin): Don't return
        NULL for the main frame so the origin matches that returned for a UserMediaRequest.

        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::setDeviceIDHashSalt): Deleted, not used.
        (WebCore::UserMediaController::deviceIDHashSalt): Deleted, not used.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow): Add device ID hash salt parameter, set it on
        constraints.
        * Modules/mediastream/UserMediaRequest.h:

        * platform/mediastream/MediaConstraints.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance): ASSERT if called for DeviceId.
        (WebCore::RealtimeMediaSource::selectSettings): Special case DeviceId because it
        we have to hash the device ID before comparing, and because the DeviceId can't be
        changed so it should never be added to the flattened constraints.

        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp:
        (WebCore::RealtimeMediaSourceSupportedConstraints::nameForConstraint): Deleted, unused.
        (WebCore::RealtimeMediaSourceSupportedConstraints::constraintFromName): Deleted, unused.
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints): Pass device
        id, not empty string.

2017-05-09  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Localized strings aren't loaded
        https://bugs.webkit.org/show_bug.cgi?id=171884

        Reviewed by Dean Jackson.

        Remove the extraneous file extension in the file name.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsScript):

2017-05-09  Chris Dumez  <cdumez@apple.com>

        Introduce DocumentAndElementEventHandlers IDL interface
        https://bugs.webkit.org/show_bug.cgi?id=171879

        Reviewed by Simon Fraser and Ryosuke Niwa.

        Introduce DocumentAndElementEventHandlers IDL interface:
        - https://html.spec.whatwg.org/#documentandelementeventhandlers

        This avoids duplication between Document.idl and Element.idl.

        Also mark oncopy / oncut / onpaste EventHandlers as enumerable to match
        the specification.

        Test: fast/events/DocumentAndElementEventHandlers.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.idl:
        * dom/DocumentAndElementEventHandlers.idl: Added.
        * dom/Element.idl:

2017-05-10  Dean Jackson  <dino@apple.com>

        Restrict SVG filters to accessible security origins
        https://bugs.webkit.org/show_bug.cgi?id=118689
        <rdar://problem/27362159>

        Reviewed by Brent Fulgham.

        Certain SVG filters should only be allowed to operate
        on content that is has SecurityOrigin access to. Implement
        this by including a flag in PaintInfo and LayerPaintingInfo,
        and have RenderWidget make sure the documents have acceptable
        SecurityOrigins as it goes to paint.

        This could be used as the first step in a "safe painting"
        strategy, allowing some content to be rendered into a 
        canvas or via the element() CSS function... but it is only
        a small first step.

        Test: http/tests/css/filters-on-iframes.html

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::paint):
        * platform/Scrollbar.h:
        * platform/Widget.h:
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::shouldBeRestrictedBySecurityOrigin):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::hasFilterThatShouldBeRestrictedBySecurityOrigin):
        * platform/graphics/filters/FilterOperations.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        * rendering/FilterEffectRenderer.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        * rendering/RenderLayer.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paint):
        * rendering/RenderScrollbar.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):

2017-05-09  Chris Dumez  <cdumez@apple.com>

        Move onanimation* EventHandlers to GlobalEventHandlers
        https://bugs.webkit.org/show_bug.cgi?id=171874

        Reviewed by Simon Fraser.

        Move onanimation* EventHandlers to GlobalEventHandlers to match the specification:
        - https://drafts.csswg.org/css-animations/#interface-globaleventhandlers-idl

        We previously have those on Window and Element only. Firefox complies with the
        specification.

        Test: fast/css/onanimation-eventhandlers.html

        * dom/Element.idl:
        * dom/GlobalEventHandlers.idl:
        * page/DOMWindow.idl:

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

        Refresh webrtc WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=171878

        Reviewed by Eric Carlson.

        Tests: imported/w3c/web-platform-tests/webrtc/RTCConfiguration-iceCandidatePoolSize.html
               imported/w3c/web-platform-tests/webrtc/RTCDataChannel-id.html
               imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-canTrickleIceCandidates.html
               imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-constructor.html
               imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-createDataChannel.html
               imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-iceGatheringState.html
               imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-idl.html
               imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription.html
               imported/w3c/web-platform-tests/webrtc/datachannel-idlharness.html
               imported/w3c/web-platform-tests/webrtc/getstats.html
               imported/w3c/web-platform-tests/webrtc/interfaces.html

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createDataChannel): exiting early if libwebrtc is not creating a data channel.

2017-05-09  Javier Fernandez  <jfernandez@igalia.com>

        space-evenly misbehaves with flexbox
        https://bugs.webkit.org/show_bug.cgi?id=170445

        Reviewed by David Hyatt.

        The CSS Box Alignment specification defines the <content-distribution>
        set as some of the allowed values for the Content Distribution
        properties, align-content and justify-content. The 'space-evenly' value
        is not among the ones allowed for these properties according to the CSS
        Flexible Box specification.

        The CSS Flexbible box specification states that it must follow the CSS
        Box Alignment specification, so this new value must be considered as
        part of an upgraded level of the spec, which should be implemented
        eventually.

        Since we have already shipped an implementation of the new CSS Box
        Alignment values for CSS Grid Layout, we need to implement it for
        Flexbox as well.

        No new tests, but several new test cases added.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::initialJustifyContentOffset):
        (WebCore::justifyContentSpaceBetweenChildren):
        (WebCore::initialAlignContentOffset):
        (WebCore::alignContentSpaceBetweenChildren):

2017-05-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Avoid -Wformat warnings in RenderLayerCompositor.cpp and RenderLayerBacking.cpp
        https://bugs.webkit.org/show_bug.cgi?id=171875

        Reviewed by Simon Fraser.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2017-05-09  Chris Dumez  <cdumez@apple.com>

        Drop custom bindings code for Window.location setter
        https://bugs.webkit.org/show_bug.cgi?id=171846

        Reviewed by Sam Weinig.

        Drop custom bindings code for Window.location setter as the custom code was merely needed
        to address a very old Mac widget that has long been fixed (rdar://problem/5695330).

        No new tests, no Web-facing behavior change.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation): Deleted.
        Drop custom code.

        * page/DOMWindow.idl:
        Align Window.location with https://html.spec.whatwg.org/#the-window-object:
        - Mark property as readonly.
        - Add [PutsForward=href] IDL extended attribute.
        Also, we need to mark the atribute as nullable as this reflects our current implementation.
        We currently return null if the associated Window does not have a frame. This does not match
        the specification and we should update our implementation in the future to never return null.

2017-05-09  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r216508.

        The layout test enabled in this change is failing on Sierra.

        Reverted changeset:

        "Invalid MediaSource duration value should throw TyperError
        instead of InvalidStateError"
        https://bugs.webkit.org/show_bug.cgi?id=171653
        http://trac.webkit.org/changeset/216508

2017-05-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Update Chrome and Firefox versions in user agent quirks
        https://bugs.webkit.org/show_bug.cgi?id=171823

        Reviewed by Carlos Alberto Lopez Perez.

        * platform/UserAgentQuirks.cpp:
        (WebCore::UserAgentQuirks::stringForQuirk):
        (WebCore::UserAgentQuirks::firefoxRevisionString):

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

        RealtimeOutgoingAudioSource is crashing when given data with more than two channels
        https://bugs.webkit.org/show_bug.cgi?id=171868

        Reviewed by Eric Carlson.

        Manual testing.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::libwebrtcAudioFormat): Capping the number of channels to 2.
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable):

2017-05-09  Myles C. Maxfield  <mmaxfield@apple.com>

        font-stretch: normal selects expanded fonts instead of condensed fonts
        https://bugs.webkit.org/show_bug.cgi?id=171838
        <rdar://problem/31005481>

        Reviewed by Jon Lee.

        CSS Fonts level 3 says: "If the value of ‘font-stretch’ is ‘normal’ or one of the condensed
        values, narrower width values are checked first, then wider values."

        CSS Fonts level 4 erroneously was incompatible with this, but was updated in
        https://github.com/w3c/csswg-drafts/commit/4559389d183bbaaf3321af5ba1c924caa7c488bb
        to be consistent with this.

        Now, CSS Fonts level 4 states: "If the desired stretch value is less than or equal to100,
        stretch values below the desired stretch value are checked in descending order followed by
        stretch values above the desired stretch value in ascending order"

        Test: fast/text/font-width-100.html

        * platform/graphics/FontSelectionAlgorithm.cpp:

2017-05-09  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Enable creation of ReadableStreamBYOBReader
        https://bugs.webkit.org/show_bug.cgi?id=171665

        Reviewed by Youenn Fablet.

        Enabled the creation of ReadableStreamBYOBReader.

        Test: streams/readable-stream-byob-reader.html

        * CMakeLists.txt: Updated to support ReadableStreamBYOBReader.
        * DerivedSources.cpp: Updated to support ReadableStreamBYOBReader.
        * DerivedSources.make: Updated to support ReadableStreamBYOBReader.
        * Modules/streams/ReadableByteStreamInternals.js: Updated to support ReadableStreamBYOBReader.
        (privateInitializeReadableStreamBYOBReader):
        (isReadableStreamBYOBReader):
        * Modules/streams/ReadableStream.js: Updated to support ReadableStreamBYOBReader.
        (getReader):
        * Modules/streams/ReadableStreamBYOBReader.idl: Added.
        * Modules/streams/ReadableStreamBYOBReader.js: Added.
        (cancel): To be implemented.
        (read): To be implemented.
        (releaseLock): To be implemented.
        (closed): To be implemented.
        * WebCore.xcodeproj/project.pbxproj: Updated to support ReadableStreamBYOBReader.
        * bindings/js/JSDOMGlobalObject.cpp: Updated to support ReadableStreamBYOBReader.
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp: Updated to support ReadableStreamBYOBReader.
        (WebCore::constructJSReadableStreamReaderGeneric):
        (WebCore::constructJSReadableStreamDefaultReader):
        (WebCore::constructJSReadableStreamBYOBReader):
        (WebCore::JSBuiltinReadableStreamBYOBReaderPrivateConstructor::initializeExecutable):
        (WebCore::createReadableStreamBYOBReaderPrivateConstructor):
        * bindings/js/JSReadableStreamPrivateConstructors.h: Updated to support ReadableStreamBYOBReader.
        * bindings/js/WebCoreBuiltinNames.h: Updated to support ReadableStreamBYOBReader.

2017-05-09  Frederic Wang  <fwang@igalia.com>

        Print more properties in the output of scrolling trees
        https://bugs.webkit.org/show_bug.cgi?id=171858

        Reviewed by Simon Fraser.

        No new tests, no behavior changes.

        * page/scrolling/ScrollingCoordinator.cpp: Implement << operator to print ScrollableAreaParameters.
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h: Declare new << operator.
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp: Print new properties.
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.cpp: ditto.
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingTreeScrollingNode.cpp: ditto.
        (WebCore::ScrollingTreeScrollingNode::dumpProperties):

2017-05-09  Chris Dumez  <cdumez@apple.com>

        ontransitionend eventHandler should be in GlobalEventHandlers
        https://bugs.webkit.org/show_bug.cgi?id=171836

        Reviewed by Ryosuke Niwa.

        ontransitionend eventHandler should be in GlobalEventHandlers:
        - https://drafts.csswg.org/css-transitions/#interface-globaleventhandlers-idl

        WebKit currently has in on Window and Element only. Firefox matches the specification.

        Test: fast/css/ontransitionend-eventhandler.html

        * dom/Element.idl:
        * dom/GlobalEventHandlers.idl:
        * page/DOMWindow.idl:

2017-05-09  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        MediaSource.readyState should use an IDL enum
        https://bugs.webkit.org/show_bug.cgi?id=171672

        Reviewed by Eric Carlson and Chris Dumez.

        MediaSource.readyState should use an IDL enum as per specification
        (https://www.w3.org/TR/2016/CR-media-source-20160503/#idl-def-ReadyState).

        No new tests required since no behavior change.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::toString):
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::setPrivateAndOpen):
        (WebCore::MediaSource::buffered):
        (WebCore::MediaSource::setReadyState):
        (WebCore::MediaSource::streamEndedWithError):
        (WebCore::MediaSource::isOpen):
        (WebCore::MediaSource::isClosed):
        (WebCore::MediaSource::isEnded):
        (WebCore::MediaSource::detachFromElement):
        (WebCore::MediaSource::openIfInEndedState):
        (WebCore::MediaSource::stop):
        (WebCore::MediaSource::onReadyStateChange):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSource.idl:

2017-05-09  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        Invalid MediaSource duration value should throw TyperError instead of InvalidStateError
        https://bugs.webkit.org/show_bug.cgi?id=171653

        Reviewed by Youenn Fablet.

        Modify MediaSource::setDuration to throw a TypeError when duration value is invalid as per MSE specification
        (https://www.w3.org/TR/2016/REC-media-source-20161117/#dom-mediasource-duration).

        Update expectation of corresponding WPT test.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setDuration):
        (WebCore::MediaSource::setDurationInternal):

2017-05-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, update binding-tests results
        https://bugs.webkit.org/show_bug.cgi?id=166752

        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:

2017-05-09  Chris Dumez  <cdumez@apple.com>

        Update DocumentOrShadowRoot.idl to match specifications
        https://bugs.webkit.org/show_bug.cgi?id=171845

        Reviewed by Ryosuke Niwa.

        Update DocumentOrShadowRoot.idl to match specifications:
        - https://dom.spec.whatwg.org/#mixin-documentorshadowroot
        - https://w3c.github.io/webcomponents/spec/shadow/#extensions-to-the-documentorshadowroot-mixin
        - https://w3c.github.io/pointerlock/#extensions-to-the-documentorshadowroot-mixin

        No Web-facing behavior change. Things that do not match the specification were merely
        annotated with FIXME comments.

        * dom/Document.idl:
        * dom/DocumentOrShadowRoot.idl:

2017-05-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix macOS ports using ApplePay
        https://bugs.webkit.org/show_bug.cgi?id=166752

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2017-05-09  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [Coordinated Graphics] Debug Visuals don't hide
        https://bugs.webkit.org/show_bug.cgi?id=162704

        Reviewed by Žan Doberšek.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setShowDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::setShowRepaintCounter):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::setDebugBorder):
        showDebugBorders() and showRepaintCounter() of CoordinatedGraphicsLayer should reflect
        the "show" argument to the layer state.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::DebugVisuals::DebugVisuals):
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):
        To set the debug visuals of a layer, the visibility flags of the borders and the repaint
        counters as well as the border width and color are needed. Thus a new bundle struct
        DebugVisuals and its change flag debugVisualsChanged have been introduced in order to
        send the information at once.

2017-05-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Handle IDLPromise<> properly
        https://bugs.webkit.org/show_bug.cgi?id=166752

        Reviewed by Youenn Fablet.

        This patch implements WebIDL Promise type conversion. According to the spec,
        Promise takes a value and convert it to Promise by using Promise.resolve function.
        We implement JSPromise::resolve in JSC and use it in JSDOMConvertPromise.

        In conversion phase, we just convert the value to JSC::JSPromise* and hold it in
        PromiseRejectionEvent. On the other hand, In this patch, we newly introduce a new
        type DOMPromise and use it in RejectedPromiseTracker. And we also rename the previous
        DOMPromise to DOMPromiseDeferred since it is corresponding to JSPromiseDeferred.
        DOMPromise is DOMGuarded object. So it is strongly referenced from ScriptExecutionContext
        and it is weakly referenced from the object itself. This is important since Strong<JSPromise>
        reference in C++ object that has a wrapper (in this case, PromiseRejectionEvent) easily causes
        cyclic reference. We hold it as DOMPromise instead of Strong<JSPromise> in RejectedPromiseTracker
        to break the cyclic reference edge with weak reference.

        In the meantime, we still use JSC::Strong<> in PromiseRejectionEvent. It leaks memory if promise
        refers the wrapper object of PromiseRejectionEvent. CustomEvent also has the same problem.
        This is a general problem that `attribute any` can create cyclic reference. And they should be
        fixed in a different patch.

        Currently, we do not take the following approach. e.g. There is C++ object that represents Promise.
        And its wrapper object is JSPromise thing. When exposing the C++ object, it will be converted to a
        wrapper object. We do not take this approach because PromiseRejectionEvent can take user-provided promise.
        For example, users can create PromiseRejectionEvent in a form
        `new PromiseRejectionEvent("...", { promise: promise })`. In this case, `event.promise === promise`
        is required. And this is not suitable for the above C++ object model.

        Large part of this patch is mechanical one to replace DOMPromise with DOMPromiseDeferred.

        * CMakeLists.txt:
        * Modules/applepay/ApplePaySession.cpp:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySystemAccess.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/encryptedmedia/NavigatorEME.h:
        * Modules/fetch/DOMWindowFetch.h:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/WorkerGlobalScopeFetch.h:
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::replaceTrack):
        (WebCore::MediaEndpointPeerConnection::replaceTrackTask):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::setLocalDescription):
        (WebCore::PeerConnectionBackend::setRemoteDescription):
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::endOfIceCandidates):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):
        (WebCore::RTCPeerConnection::enqueueReplaceTrackTask):
        (WebCore::RTCPeerConnection::replaceTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::replaceTrack):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start):
        (WebCore::UserMediaRequest::UserMediaRequest):
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/streams/ReadableStreamSource.h:
        (WebCore::ReadableStreamSource::start):
        (WebCore::ReadableStreamSource::pull):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::addReaction):
        (WebCore::AudioContext::setState):
        (WebCore::AudioContext::suspend):
        (WebCore::AudioContext::resume):
        (WebCore::AudioContext::close):
        * Modules/webaudio/AudioContext.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/IDLTypes.h:
        * bindings/js/CachedModuleScriptLoaderClient.h:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        * bindings/js/JSDOMConvertPromise.h:
        (WebCore::Converter<IDLPromise<T>>::convert):
        (WebCore::JSConverter<IDLPromise<T>>::convert):
        * bindings/js/JSDOMExceptionHandling.cpp:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGuardedObject.h:
        * bindings/js/JSDOMPromise.h:
        (WebCore::DOMPromise::create):
        (WebCore::DOMPromise::promise):
        (WebCore::DOMPromise::DOMPromise):
        (WebCore::DeferredPromise::create): Deleted.
        (WebCore::DeferredPromise::resolve): Deleted.
        (WebCore::DeferredPromise::resolveWithNewlyCreated): Deleted.
        (WebCore::DeferredPromise::reject): Deleted.
        (WebCore::DeferredPromise::resolveWithCallback): Deleted.
        (WebCore::DeferredPromise::rejectWithCallback): Deleted.
        (WebCore::DeferredPromise::DeferredPromise): Deleted.
        (WebCore::DeferredPromise::deferred): Deleted.
        (WebCore::DOMPromiseBase::DOMPromiseBase): Deleted.
        (WebCore::DOMPromiseBase::operator=): Deleted.
        (WebCore::DOMPromiseBase::reject): Deleted.
        (WebCore::DOMPromiseBase::rejectType): Deleted.
        (WebCore::DOMPromiseBase::promise): Deleted.
        (WebCore::DOMPromise::resolve): Deleted.
        (WebCore::DOMPromise<void>::resolve): Deleted.
        (WebCore::callPromiseFunction): Deleted.
        (WebCore::bindingPromiseFunctionAdapter): Deleted.
        * bindings/js/JSDOMPromiseDeferred.cpp: Renamed from Source/WebCore/bindings/js/JSDOMPromise.cpp.
        (WebCore::DeferredPromise::promise):
        (WebCore::DeferredPromise::callFunction):
        (WebCore::DeferredPromise::reject):
        (WebCore::rejectPromiseWithExceptionIfAny):
        (WebCore::createDeferredPromise):
        (WebCore::createRejectedPromiseWithTypeError):
        (WebCore::parseAsJSON):
        (WebCore::fulfillPromiseWithJSON):
        (WebCore::fulfillPromiseWithArrayBuffer):
        * bindings/js/JSDOMPromiseDeferred.h: Copied from Source/WebCore/bindings/js/JSDOMPromise.h.
        (WebCore::DeferredPromise::create):
        (WebCore::DeferredPromise::resolve):
        (WebCore::DeferredPromise::resolveWithNewlyCreated):
        (WebCore::DeferredPromise::reject):
        (WebCore::DeferredPromise::resolveWithCallback):
        (WebCore::DeferredPromise::rejectWithCallback):
        (WebCore::DeferredPromise::DeferredPromise):
        (WebCore::DeferredPromise::deferred):
        (WebCore::DOMPromiseDeferredBase::DOMPromiseDeferredBase):
        (WebCore::DOMPromiseDeferredBase::operator=):
        (WebCore::DOMPromiseDeferredBase::reject):
        (WebCore::DOMPromiseDeferredBase::rejectType):
        (WebCore::DOMPromiseDeferredBase::promise):
        (WebCore::DOMPromiseDeferred::resolve):
        (WebCore::DOMPromiseDeferred<void>::resolve):
        (WebCore::callPromiseFunction):
        (WebCore::bindingPromiseFunctionAdapter):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        * bindings/js/JSWebGPUCommandBufferCustom.cpp:
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp: Added.
        (WebCore::convertDictionary<TestPromiseRejectionEvent::Init>):
        (WebCore::JSTestPromiseRejectionEventPrototype::create):
        (WebCore::JSTestPromiseRejectionEventPrototype::createStructure):
        (WebCore::JSTestPromiseRejectionEventPrototype::JSTestPromiseRejectionEventPrototype):
        (WebCore::JSTestPromiseRejectionEventConstructor::construct):
        (WebCore::JSTestPromiseRejectionEventConstructor::prototypeForStructure):
        (WebCore::JSTestPromiseRejectionEventConstructor::initializeProperties):
        (WebCore::JSTestPromiseRejectionEventPrototype::finishCreation):
        (WebCore::JSTestPromiseRejectionEvent::JSTestPromiseRejectionEvent):
        (WebCore::JSTestPromiseRejectionEvent::finishCreation):
        (WebCore::JSTestPromiseRejectionEvent::createPrototype):
        (WebCore::JSTestPromiseRejectionEvent::prototype):
        (WebCore::BindingCaller<JSTestPromiseRejectionEvent>::castForAttribute):
        (WebCore::jsTestPromiseRejectionEventPromise):
        (WebCore::jsTestPromiseRejectionEventPromiseGetter):
        (WebCore::jsTestPromiseRejectionEventReason):
        (WebCore::jsTestPromiseRejectionEventReasonGetter):
        (WebCore::jsTestPromiseRejectionEventConstructor):
        (WebCore::setJSTestPromiseRejectionEventConstructor):
        (WebCore::JSTestPromiseRejectionEvent::getConstructor):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h: Added.
        (WebCore::JSTestPromiseRejectionEvent::create):
        (WebCore::JSTestPromiseRejectionEvent::createStructure):
        (WebCore::JSTestPromiseRejectionEvent::wrapped):
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/TestPromiseRejectionEvent.idl: Copied from Source/WebCore/bindings/js/CachedModuleScriptLoaderClient.h.
        * css/FontFace.h:
        * css/FontFaceSet.h:
        * dom/CustomElementRegistry.h:
        * dom/PromiseRejectionEvent.h:
        * dom/RejectedPromiseTracker.cpp:
        (WebCore::UnhandledPromise::UnhandledPromise):
        (WebCore::UnhandledPromise::callStack):
        (WebCore::UnhandledPromise::promise):
        (WebCore::RejectedPromiseTracker::promiseRejected):
        (WebCore::RejectedPromiseTracker::promiseHandled):
        (WebCore::RejectedPromiseTracker::reportUnhandledRejections):
        (WebCore::RejectedPromiseTracker::reportRejectionHandled):
        (WebCore::RejectedPromise::RejectedPromise): Deleted.
        (WebCore::RejectedPromise::globalObject): Deleted.
        (WebCore::RejectedPromise::promise): Deleted.
        * dom/RejectedPromiseTracker.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rejectPendingPlayPromises):
        (WebCore::HTMLMediaElement::resolvePendingPlayPromises):
        (WebCore::HTMLMediaElement::play):
        * html/HTMLMediaElement.h:
        * platform/graphics/gpu/GPUCommandBuffer.h:
        * testing/Internals.h:

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

        Upstream the WPE port
        https://bugs.webkit.org/show_bug.cgi?id=171110

        Reviewed by Alex Christensen.

        webkit-dev thread:
        https://lists.webkit.org/pipermail/webkit-dev/2017-April/028923.html

        Existing files mostly changed to properly use PLATFORM(WPE) build guards.
        In-file changes removed from this ChangeLog entry for brevity.

        * CMakeLists.txt:
        * PlatformWPE.cmake: Added.
        * accessibility/AccessibilityObject.h:
        * accessibility/wpe/AXObjectCacheWPE.cpp: Added.
        * accessibility/wpe/AccessibilityObjectWPE.cpp: Copied from Source/WebCore/platform/audio/glib/AudioBusGLib.cpp.
        * config.h:
        * crypto/keys/CryptoKeyEC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/wpe/EditorWPE.cpp: Added.
        * page/EventHandler.cpp:
        * page/wpe/EventHandlerWPE.cpp: Added.
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/MainThreadSharedTimer.cpp:
        * platform/MainThreadSharedTimer.h:
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/SchemeRegistry.cpp:
        * platform/Widget.h:
        * platform/audio/glib/AudioBusGLib.cpp:
        * platform/glib/FileSystemGlib.cpp:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GLContext.cpp:
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/PlatformDisplay.cpp:
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/egl/GLContextEGL.cpp:
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/egl/GLContextEGLWPE.cpp: Copied from Source/WebCore/platform/audio/glib/AudioBusGLib.cpp.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/wpe/IconWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/graphics/wpe/ImageWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/graphics/wpe/PlatformDisplayWPE.cpp: Added.
        * platform/graphics/wpe/PlatformDisplayWPE.h: Added.
        * platform/wpe/CursorWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/LocalizedStringsWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/PasteboardWPE.cpp: Added.
        * platform/wpe/PlatformKeyboardEventWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/PlatformPasteboardWPE.cpp: Added.
        * platform/wpe/PlatformScreenWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/RenderThemeWPE.cpp: Copied from Source/WebKit2/Shared/NativeWebWheelEvent.h.
        * platform/wpe/RenderThemeWPE.h: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/ScrollbarThemeWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/ScrollbarThemeWPE.h: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/SoundWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/ThemeWPE.cpp: Added.
        * platform/wpe/ThemeWPE.h: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.
        * platform/wpe/WidgetWPE.cpp: Copied from Source/WebKit2/Shared/DrawingAreaInfo.h.

2017-05-09  Frederic Wang  <fwang@igalia.com>

        Fix property names in ScrollingTreeScrollingNode::dumpProperties
        https://bugs.webkit.org/show_bug.cgi?id=171848

        Reviewed by Gyuyoung Kim.

        No new tests, this function is only used for debugging purpose.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::dumpProperties):

2017-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Building Webkit2Gtk without OpenGL fails.
        https://bugs.webkit.org/show_bug.cgi?id=170959

        Reviewed by Žan Doberšek.

        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:

2017-05-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [AppleWin] CaptureDeviceManager.cpp: error C2813: #import is not supported with /MP
        https://bugs.webkit.org/show_bug.cgi?id=171849

        Reviewed by Per Arne Vollan.

        * platform/mediastream/CaptureDeviceManager.cpp: Replaced #import with #include.

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

        Refactor / Clean up DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=171843

        Reviewed by Ryosuke Niwa.

        Refactor / Clean up DOMWindow.idl to match the specification more closely:
        - https://html.spec.whatwg.org/#the-window-object

        No expected Web-facing change. Things that do not match the specification
        have been annotated with FIXME comments.

        * page/DOMWindow.idl:

2017-05-08  Frederic Wang  <fwang@igalia.com>

        Simplify ScrollingStateNode::scrollingStateTreeAsText
        https://bugs.webkit.org/show_bug.cgi?id=171802

        Reviewed by Simon Fraser.

        The following simplifications are performed:
        - Rely on TextStream's internal value to manage indentation.
        - Use TextStream::dumpProperty and << to print simple properties.
        - Try and use TextStream::GroupScope for groups.

        No new tests, only minor format changes in the dumped tree.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::dumpProperties):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::dumpProperties):
        (WebCore::ScrollingStateNode::dump):
        (WebCore::ScrollingStateNode::scrollingStateTreeAsText):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        (WebCore::ScrollingStateOverflowScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::dumpProperties):
        * page/scrolling/ScrollingStateStickyNode.h:

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

        Follow-up to bug 171710: use more references and reject if either audio or video source creation is failing
        https://bugs.webkit.org/show_bug.cgi?id=171824

        Reviewed by Alex Christensen.

        Refactoring to use more references.
        Only behavioral change is the rejection of the getUserMedia promise if either audio or video source creation is
        failing. Previously, if audio source creation was failing, the promise would still resolve if video source was
        sucessfully created.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::audioFactory):
        (WebCore::RealtimeMediaSourceCenter::videoFactory):
        (WebCore::RealtimeMediaSourceCenter::audioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::videoCaptureDeviceManager):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::defaultAudioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::defaultVideoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::defaultAudioCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenter::defaultVideoCaptureDeviceManager): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamDevices):
        (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory):
        (WebCore::RealtimeMediaSourceCenterMac::defaultVideoFactory):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenterMac::defaultVideoCaptureDeviceManager):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::defaultAudioFactory):
        (WebCore::MockRealtimeMediaSourceCenter::defaultVideoFactory):
        (WebCore::MockRealtimeMediaSourceCenter::defaultAudioCaptureDeviceManager):
        (WebCore::MockRealtimeMediaSourceCenter::defaultVideoCaptureDeviceManager):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

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

        Drop [CEReactions] from CharacterData operations
        https://bugs.webkit.org/show_bug.cgi?id=171813

        Reviewed by Ryosuke Niwa.

        Drop [CEReactions] from CharacterData operations to match the DOM specification:
        - https://dom.spec.whatwg.org/#interface-characterdata

        I believe WebKit had this because Attr used to have Text child nodes. Therefore, modifying
        those Text child nodes via the CharacterData API could modify the value of an attribute,
        requiring us to run attributeChangedCallback for Custom Elements. However, as of
        <https://trac.webkit.org/r216259>, Attr can no longer have Text child nodes.

        I have also verified that Blink does not have [CEReactions] for those methods.

        No new tests, no expected Web-facing behavior change.

        * dom/CharacterData.idl:

2017-05-08  Jeremy Jones  <jeremyj@apple.com>

        Remove black background from video layer while in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=171816

        Reviewed by Eric Carlson.

        No new tests because no new behavior in DOM.

        This changes the background of the video layer to clear when it goes into fullscreen
        and back to black when it returns to inline to better facilitate fullsceen animations.

        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        (WebCore::VideoFullscreenLayerManager::setVideoLayer):
        (WebCore::VideoFullscreenLayerManager::setVideoFullscreenLayer):

2017-05-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The Incomplete asynchronously decoded image frame should be decoded every time it's drawn
        https://bugs.webkit.org/show_bug.cgi?id=170836

        Reviewed by Tim Horton.

        The asynchronously decoded image frames has to be cached to prevent flickering,
        but we have to keep requesting new decoding for the incomplete frame every time
        it's drawn. This is to avoid drawing an incomplete image frame even after all
        its encoded data is received.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::cacheAsyncFrameNativeImageAtIndex):
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex):

2017-05-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Guard DragController::cleanupAfterSystemDrag to only clear drag state on Mac
        https://bugs.webkit.org/show_bug.cgi?id=171771
        <rdar://problem/32019149>

        Reviewed by Tim Horton.

        The call to dragEnded here seems to have been added because a client could override Mac WK1
        WebUIDelegate methods to cause this cleanup to never be performed. Since this limitation only
        applies to Mac, guard it as such.

        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::cleanupAfterSystemDrag):

2017-05-08  Commit Queue  <commit-queue@webkit.org>

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

        "It regressed JetStream on iOS by 7%" (Requested by saamyjoon
        on #webkit).

        Reverted changeset:

        "GCController.cpp's collect() should be Async"
        https://bugs.webkit.org/show_bug.cgi?id=171708
        http://trac.webkit.org/changeset/216262

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

        Move offsetParent / offsetLeft / offsetTop / offsetWidth / offsetHeight from Element to HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=171829

        Reviewed by Simon Fraser.

        Move offsetParent / offsetLeft / offsetTop / offsetWidth / offsetHeight from Element to HTMLElement,
        as per the specification:
        - https://drafts.csswg.org/cssom-view/#extensions-to-the-htmlelement-interface

        Both Firefox and Chrome match the specification and also do not have the corresponding API on
        SVGElement.

        Bug tracking the similar move in Blink (completed over 1 year ago):
        - https://bugs.chromium.org/p/chromium/issues/detail?id=463116

        Note that for the inner SVG elements like <rect> and <circle> these attributes were returning 0,
        because those aren't part of the CSS box model. They did return correct values for the <svg>
        element itself, however.

        Test: fast/css/htmlelement-offset-properties.html

        * dom/Element.idl:
        - Drop offset* attributes, now that they are on HTMLElement.

        * html/HTMLElement.idl:
        - Resync HTMLElement.idl with the specification: https://html.spec.whatwg.org/#htmlelement
          No behavior change besides what's indicated in the Changelog above. Things that do not match
          the spec have been annotated with FIXME comments.
        - Add offset* attributes that used to be on Element.

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

        Add support for reading and writing settings from UIProcess audio capture
        https://bugs.webkit.org/show_bug.cgi?id=171633

        Reviewed by Eric Carlson.

        Covered by manual testing and existing test sets.

        Moving success/failure callbacks for applyConstraints.
        Making main RealtimeMediaSource::applyConstraints virtual so that WebProcess source proxies can implement it by
        doing an IPC call directly. Doing so for UIProcess CoreAudioCaptureSource.

        Adding support for volume to CoreAudioCaptureSource by applying gain post-capturing.
        Adding support for toggling echo cancellation in CoreAudioCaptureSource.
        Adding support to change echo cancellation and sample rate by scheduling a reconfiguration of the audio unit.
        To do so, we stop producing data, delete the audio unit and restart producing data.
        Removing CoreAudioCaptureSource::supportedConstraints as it is redundant with
        RealtimeMediaSourceSettings::supportedConstraints.

        Setting sample rate only to the following values: 8000, 16000, 32000, 44100, 48000.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::applyConstraints):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::supportedConstraints):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::processMicrophoneSamples):
        (WebCore::CoreAudioCaptureSource::cleanupAudioUnit):
        (WebCore::CoreAudioCaptureSource::createAudioUnit):
        (WebCore::CoreAudioCaptureSource::configureAudioUnit):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::capabilities):
        (WebCore::CoreAudioCaptureSource::settings):
        (WebCore::CoreAudioCaptureSource::applySampleRate):
        (WebCore::CoreAudioCaptureSource::applyEchoCancellation):
        (WebCore::CoreAudioCaptureSource::scheduleReconfiguration):
        (WebCore::CoreAudioCaptureSource::cleanupAudioUnits): Deleted.
        (WebCore::CoreAudioCaptureSource::setupAudioUnits): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

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

        Drop non-standard document.implementation.createCSSStyleSheet() API
        https://bugs.webkit.org/show_bug.cgi?id=171825

        Reviewed by Simon Fraser.

        Drop non-standard document.implementation.createCSSStyleSheet() API.

        This was never-implemented by Firefox and they actually rejected implementing it:
        - Drop non-standard document.implementation.createCSSStyleSheet() API

        Blink dropped this API back in 2014 after getting UseCounter data showing this was not used:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=363561
        - https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/uDjkuGA9gQs/zytnzJ6WryYJ

        The API is not useful in its current state because even though
        document.implementation.createCSSStyleSheet() allows you to create a stylesheet, there is
        currently no way to associate it with the document.

        Test: fast/css/DOMImplementation.createCSSStyleSheet-obsolete.html

        * dom/DOMImplementation.idl:

2017-05-08  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: don't expose empty roledescription
        https://bugs.webkit.org/show_bug.cgi?id=163647

        Reviewed by Chris Fleizach.

        If the value of aria-roledescription is empty or contains only whitespace
        characters, ignore the value. Also strip out leading or trailing whitespace
        characters in the value.

        No new tests: We already had coverage for an empty aria-roledescription value.
        That test was updated to reflect the new behavior. New test cases were added
        to cover a value that contains only whitespace characters, and a value with
        leading and trailing whitespace characters.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::roleDescription):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):

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

        Drop non-standard Element.scrollByLines() / scrollByPages()
        https://bugs.webkit.org/show_bug.cgi?id=171820

        Reviewed by Simon Fraser.

        Drop non-standard Element.scrollByLines() / scrollByPages().

        Those were added a very long time ago (https://trac.webkit.org/changeset/7901/webkit)
        for Safari RSS but does not seem to be used anymore.

        Blink has already dropped it without issue back in 2014:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=398356

        Their UseCounter data showed no usage:
        - https://www.chromestatus.com/metrics/feature/timeline/popularity/390

        Test: fast/css/element-scrollByLines-scrollByPages-obsolete.html

        * dom/Element.idl:

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

        CoreAudioSharedUnit should own its configuration parameters
        https://bugs.webkit.org/show_bug.cgi?id=171812

        Reviewed by Eric Carlson.

        Covered by manual tests.

        Add sampleRate, volume and echoCancellation parameters to the shared audio unit.
        Set default values when creating the shared audio unit and use those for the creation of new sources.
        Add support for volume.
        Add support for disabling echo cancellation.
        Check valid sample rates when trying to apply a sample rate.

        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::volume):
        (WebCore::CoreAudioSharedUnit::sampleRate):
        (WebCore::CoreAudioSharedUnit::enableEchoCancellation):
        (WebCore::CoreAudioSharedUnit::setVolume):
        (WebCore::CoreAudioSharedUnit::setSampleRate):
        (WebCore::CoreAudioSharedUnit::setEnableEchoCancellation):
        (WebCore::CoreAudioSharedUnit::CoreAudioSharedUnit):
        (WebCore::CoreAudioSharedUnit::setupAudioUnits):
        (WebCore::CoreAudioSharedUnit::configureMicrophoneProc):
        (WebCore::CoreAudioSharedUnit::configureSpeakerProc):
        (WebCore::CoreAudioSharedUnit::processMicrophoneSamples):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::applySampleRate):
        (WebCore::CoreAudioCaptureSource::applyEchoCancellation):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2017-05-08  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Setting aria-orientation="horizontal" on a listbox is being overridden on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=171821

        Reviewed by Chris Fleizach.

        The Mac's AccessibilityObject wrapper was unconditionally returning vertical
        as the orientation of listbox. Removing this override causes the author-specified
        value to be exposed, with the default/implicit orientation continuing to be vertical.

        No new tests. We already have coverage for the default/implicit orientation on a
        listbox. A new test case was added to aria-orientation.html so that we would have
        coverage for aria-orientation="horizontal" on a listbox.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2017-05-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] To decode an image frame asynchronously, pass the native size of the image to CGImageSourceCreateThumbnailAtIndex() if it's smaller than the sizeForDrawing
        https://bugs.webkit.org/show_bug.cgi?id=170864
 
        Reviewed by Simon Fraser.

        Tests: Existing tests were modified to test this patch.
 
        The maxPixelSize was omitted when calling CGImageSourceCreateThumbnailAtIndex()
        for the nativeSize image or when areaOf(nativeSize) < areaOf(sizeForDrawing).
        The assumption was if we don't pass maxPixelSize, CG will create an image with the
        nativeSize regardless how big this size is. It turns out this is wrong. CG has an
        optimization to return a scaled down image if areaOf(nativeSize) is greater than
        some maximum value.
 
        This is not what we want for asynchronously image decoding. We want the decoded
        frame to have the size we ask for, not some scaled down frame. The fix is to pass
        always maxPixelSize to CGImageSourceCreateThumbnailAtIndex(). maxPixelSize will be
        equal to maxDimension(sizeForDrawing) if sizeForDrawing is valid it is less than
        maxDimension(nativeSize). Otherwise it will be equal to maxDimension(nativeSize).

        * platform/graphics/DecodingOptions.h:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::appendImageSourceOption):
        (WebCore::appendImageSourceOptions):
        (WebCore::imageSourceAsyncOptions):
        (WebCore::ImageDecoder::createFrameImageAtIndex):

2017-05-08  Beth Dakin  <bdakin@apple.com>

        WebKit should default to using sRGB with NSColor conversion instead of device 
        color space
        https://bugs.webkit.org/show_bug.cgi?id=171745
        -and corresponding-
        rdar://problem/28314183

        Reviewed by Tim Horton.

        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeRGBAFromNSColor):
        (WebCore::nsColor):

2017-05-08  Alex Christensen  <achristensen@webkit.org>

        Reduce PassRefPtr use
        https://bugs.webkit.org/show_bug.cgi?id=171809

        Reviewed by Chris Dumez.

        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::createCompatibleLayerOrTakeFromPool):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::TileGrid):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::create):
        (PlatformCALayerCocoa::clone):
        (PlatformCALayerCocoa::animationForKey):
        (PlatformCALayerCocoa::createCompatibleLayer):

2017-05-08  Jer Noble  <jer.noble@apple.com>

        [Mac] Audio capture fails when shouldCaptureAudioInUIProcess is set.
        https://bugs.webkit.org/show_bug.cgi?id=171710

        Reviewed by Eric Carlson.

        Both the shouldCaptureAudioInUIProcess setting and useAVFoundationAudioCapture setting were trying to set
        the audio factory for RealtimeMediaSourceCenter, and were stomping on each others' changes. Change the way
        the useAVFoundationAudioCapture works so that it only affects the defaultAudioFactory, allowing that default
        to be overridden by the shuoldCaptureAudioInUIProcess setting when it calls setAudioFactory().

        * page/Settings.cpp:
        (WebCore::Settings::setUseAVFoundationAudioCapture):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::audioFactory):
        (WebCore::RealtimeMediaSourceCenter::videoFactory):
        (WebCore::RealtimeMediaSourceCenter::audioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::videoCaptureDeviceManager):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::audioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::videoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::audioCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenter::videoCaptureDeviceManager): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::setUseAVFoundationAudioCapture):
        (WebCore::RealtimeMediaSourceCenterMac::singleton):
        (WebCore::RealtimeMediaSourceCenter::platformCenter):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioCaptureDeviceManager):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

2017-05-04  Jiewen Tan  <jiewen_tan@apple.com>

        Search events should not fire synchronously for search type input elements with incremental attribute set
        https://bugs.webkit.org/show_bug.cgi?id=171376
        <rdar://problem/31863296>

        Reviewed by Chris Dumez.

        For some reasons, we fire search events immediately for search type input elements with incremental
        attribute set only when the length of the input equals to zero. This behaviour should be prevented
        as event listeners in the middle might perform unexpectedly.

        Test: fast/forms/search/search-incremental-crash.html

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::startSearchEventTimer):

2017-05-08  Zalan Bujtas  <zalan@apple.com>

        Text overlaps on http://www.duden.de/rechtschreibung/Acre
        https://bugs.webkit.org/show_bug.cgi?id=171796
        <rdar://problem/31036028>

        Reviewed by Simon Fraser.

        Simple line layout pre-measures space using the primary font,
        even if the space glyph requires a fallback font (and even if the string does not have a space in it at all).
        When this width gets cached (see WidthCache) we might end up using it later during normal line layout and
        it could produce incorrect layout.
        This patch removes the space width caching from Simple line layout, since Font already caches it.

        Test: fast/text/simple-line-layout-fallback-space-glyph.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createLineRuns):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

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

        Refactor ImageInputType::width() / height() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=171810

        Reviewed by Zalan Bujtas.

        Refactor ImageInputType::width() / height() for clarity.

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::height):
        (WebCore::ImageInputType::width):

2017-05-08  Zalan Bujtas  <zalan@apple.com>

        Bail out of simple line layout when hyphen needs a fallback font.
        https://bugs.webkit.org/show_bug.cgi?id=171811

        Reviewed by Antti Koivisto.

        With hyphen: auto is set, we don't know if the hypen string is going to be used, until
        after we started laying out the content and figured that the text overflows the line.
        However it's too late to bail out of simple line layout at this point, so let's just
        pre-check if the hyphen string needs a fallback font.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):

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

        TURNS gathering is not working properly
        https://bugs.webkit.org/show_bug.cgi?id=171747

        Reviewed by Eric Carlson.

        Covered by manual tests.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration): Reveting TURNS ice server skipping.

2017-05-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r216419.

        Broke 70 layout tests on GTK bot

        Reverted changeset:

        "Ensure clean tree before AX cache update."
        https://bugs.webkit.org/show_bug.cgi?id=171546
        http://trac.webkit.org/changeset/216419

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

        CoreAudioCaptureSource should not modify its shared unit if already started/stopped
        https://bugs.webkit.org/show_bug.cgi?id=171804

        Reviewed by Jer Noble.

        Manual testing only since CoreAudioSharedUnit is not mocked.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::startProducingData): Exit early if source is already started.
        (WebCore::CoreAudioCaptureSource::stopProducingData): Exit early if source is already stopped.

2017-05-08  Antti Koivisto  <antti@apple.com>

        ComposedTreeIterator does not traverse all slotted children if the traversal root is a slot element.
        https://bugs.webkit.org/show_bug.cgi?id=171375
        <rdar://problem/31863184>

        Reviewed by Zalan Bujtas.

        We were hitting an assert when using details element with a flow thread. The root cause for this turned
        out to be that we only traversed the first slotted child if the traversal root was a slot element.

        Test: fast/html/details-flow-thread.html

        * dom/ComposedTreeIterator.cpp:
        (WebCore::ComposedTreeIterator::traverseNextLeavingContext):

            Try to traverse to the next slotted child before testing if we at the end of the current context.

2017-05-08  Mark Lam  <mark.lam@apple.com>

        Introduce ExceptionScope::assertNoException() and releaseAssertNoException().
        https://bugs.webkit.org/show_bug.cgi?id=171776

        Reviewed by Keith Miller.

        No new tests because there's no behavior change in functionality.  We're only
        refactoring the code to use the new assertion utility function.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON):
        (WebCore::getStringFromJSON):
        (WebCore::getBooleanFromJSON):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::whenDefined):
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::propagateExceptionSlowPath):
        (WebCore::throwNotSupportedError):
        (WebCore::throwInvalidStateError):
        (WebCore::throwSecurityError):
        (WebCore::throwDOMSyntaxError):
        (WebCore::throwDataCloneError):
        (WebCore::throwIndexSizeError):
        (WebCore::throwTypeMismatchError):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::makeThisTypeErrorForBuiltins):
        (WebCore::makeGetterTypeErrorForBuiltins):
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMPromise.h:
        (WebCore::callPromiseFunction):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowMicrotaskCallback::call):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::~JSMainThreadExecState):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::isControlledReadableStreamLocked):
        * bindings/js/ReadableStreamDefaultController.h:
        (WebCore::ReadableStreamDefaultController::enqueue):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerFunction):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::serialize):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::serialize):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerialization::serialize):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInherit::serialize):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinal::serialize):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getTypeFlags):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):

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

        Move 'style' from Element to HTMLElement / SVGElement and make it settable
        https://bugs.webkit.org/show_bug.cgi?id=171795

        Reviewed by Alex Christensen.

        Move 'style' from Element to HTMLElement / SVGElement and make it settable
        as per:
        - https://drafts.csswg.org/cssom/#the-elementcssinlinestyle-interface

        Both Firefox and Chrome already match the specification (both for the
        property location and having it settable).

        Test: fast/css/Element-style.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/ElementCSSInlineStyle.idl: Added.
        * css/PropertySetCSSStyleDeclaration.h:
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::ensureCSSStyleDeclaration):
        (WebCore::MutableStyleProperties::ensureInlineCSSStyleDeclaration):
        * css/StyleProperties.h:
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Document.cpp:
        (WebCore::Document::createCSSStyleDeclaration):
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::cssomStyle):
        * dom/StyledElement.h:
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        * html/HTMLElement.idl:

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::height):
        (WebCore::ImageInputType::width):
        Fix bug that was found by fast/forms/input-width-height-attributes-without-renderer-loaded-image.html.
        That test relied on setting HTMLElement.style which did not work until now. Call updateLayout()
        *before* doing the renderer check.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::create):
        (WebCore::InspectorStyle::InspectorStyle):
        (WebCore::InspectorStyle::extractSourceData):
        (WebCore::InspectorStyle::setText):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::didModifyElementAttribute):
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
        (WebCore::InspectorStyleSheetForInlineStyle::ensureParsedDataReady):
        (WebCore::InspectorStyleSheetForInlineStyle::inlineStyle):
        * inspector/InspectorStyleSheet.h:
        * svg/SVGElement.idl:

2017-05-08  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Propagate aria-readonly to grid descendants
        https://bugs.webkit.org/show_bug.cgi?id=171189

        Reviewed by Chris Fleizach.

        Propagate aria-readonly to grid descendants if the property is not
        explicitly set on the descendant.

        Test: accessibility/gtk/aria-readonly-propagated.html
              Additional test cases also added to accessibility/aria-readonly.html

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::ariaReadOnlyValue):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityObject.h:

2017-05-06  Zalan Bujtas  <zalan@apple.com>

        Ensure clean tree before AX cache update.
        https://bugs.webkit.org/show_bug.cgi?id=171546
        <rdar://problem/31934942>

        While updating an accessibility object state, we might
        perform unintentional style updates. This style update could
        end up destroying renderes that are still referenced by function calls 
        on the callstack.
        To avoid that, AXObjectCache should operate on a clean tree only. 

        Reviewed by Chris Fleizach.

        Test: accessibility/crash-when-render-tree-is-not-clean.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::checkedStateChanged):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::handleAriaModalChange):
        (WebCore::AXObjectCache::labelChanged):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::checkedStateChanged):
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::handleAriaModalChange):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):

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

        Unprefix unicode-bidi CSS values
        https://bugs.webkit.org/show_bug.cgi?id=171761

        Reviewed by Simon Fraser.

        Create new values which parse to the same internal state as the
        prefixed values.

        Tests: fast/text/bidi-unprefix.html
               imported/w3c/i18n/bidi/bidi-embed-001.html
               imported/w3c/i18n/bidi/bidi-embed-002.html
               imported/w3c/i18n/bidi/bidi-embed-003.html
               imported/w3c/i18n/bidi/bidi-embed-004.html
               imported/w3c/i18n/bidi/bidi-embed-005.html
               imported/w3c/i18n/bidi/bidi-embed-006.html
               imported/w3c/i18n/bidi/bidi-embed-007.html
               imported/w3c/i18n/bidi/bidi-embed-008.html
               imported/w3c/i18n/bidi/bidi-embed-009.html
               imported/w3c/i18n/bidi/bidi-embed-010.html
               imported/w3c/i18n/bidi/bidi-embed-011.html
               imported/w3c/i18n/bidi/bidi-isolate-001.html
               imported/w3c/i18n/bidi/bidi-isolate-002.html
               imported/w3c/i18n/bidi/bidi-isolate-003.html
               imported/w3c/i18n/bidi/bidi-isolate-004.html
               imported/w3c/i18n/bidi/bidi-isolate-005.html
               imported/w3c/i18n/bidi/bidi-isolate-006.html
               imported/w3c/i18n/bidi/bidi-isolate-007.html
               imported/w3c/i18n/bidi/bidi-isolate-008.html
               imported/w3c/i18n/bidi/bidi-isolate-009.html
               imported/w3c/i18n/bidi/bidi-isolate-010.html
               imported/w3c/i18n/bidi/bidi-isolate-011.html
               imported/w3c/i18n/bidi/bidi-isolate-override-001.html
               imported/w3c/i18n/bidi/bidi-isolate-override-002.html
               imported/w3c/i18n/bidi/bidi-isolate-override-003.html
               imported/w3c/i18n/bidi/bidi-isolate-override-004.html
               imported/w3c/i18n/bidi/bidi-isolate-override-005.html
               imported/w3c/i18n/bidi/bidi-isolate-override-006.html
               imported/w3c/i18n/bidi/bidi-isolate-override-007.html
               imported/w3c/i18n/bidi/bidi-isolate-override-008.html
               imported/w3c/i18n/bidi/bidi-isolate-override-009.html
               imported/w3c/i18n/bidi/bidi-isolate-override-010.html
               imported/w3c/i18n/bidi/bidi-isolate-override-011.html
               imported/w3c/i18n/bidi/bidi-isolate-override-012.html
               imported/w3c/i18n/bidi/bidi-normal-001.html
               imported/w3c/i18n/bidi/bidi-normal-002.html
               imported/w3c/i18n/bidi/bidi-normal-003.html
               imported/w3c/i18n/bidi/bidi-normal-004.html
               imported/w3c/i18n/bidi/bidi-normal-005.html
               imported/w3c/i18n/bidi/bidi-normal-006.html
               imported/w3c/i18n/bidi/bidi-normal-007.html
               imported/w3c/i18n/bidi/bidi-normal-008.html
               imported/w3c/i18n/bidi/bidi-normal-009.html
               imported/w3c/i18n/bidi/bidi-normal-010.html
               imported/w3c/i18n/bidi/bidi-normal-011.html
               imported/w3c/i18n/bidi/bidi-override-001.html
               imported/w3c/i18n/bidi/bidi-override-002.html
               imported/w3c/i18n/bidi/bidi-override-003.html
               imported/w3c/i18n/bidi/bidi-override-004.html
               imported/w3c/i18n/bidi/bidi-override-005.html
               imported/w3c/i18n/bidi/bidi-override-006.html
               imported/w3c/i18n/bidi/bidi-override-007.html
               imported/w3c/i18n/bidi/bidi-override-008.html
               imported/w3c/i18n/bidi/bidi-override-009.html
               imported/w3c/i18n/bidi/bidi-override-010.html
               imported/w3c/i18n/bidi/bidi-override-011.html
               imported/w3c/i18n/bidi/bidi-override-012.html
               imported/w3c/i18n/bidi/bidi-plaintext-001.html
               imported/w3c/i18n/bidi/bidi-plaintext-003.html
               imported/w3c/i18n/bidi/bidi-plaintext-005.html
               imported/w3c/i18n/bidi/bidi-plaintext-006.html
               imported/w3c/i18n/bidi/bidi-plaintext-007.html
               imported/w3c/i18n/bidi/bidi-plaintext-008.html
               imported/w3c/i18n/bidi/bidi-plaintext-009.html
               imported/w3c/i18n/bidi/bidi-plaintext-010.html
               imported/w3c/i18n/bidi/bidi-plaintext-011.html
               imported/w3c/i18n/bidi/bidi-table-001.html
               imported/w3c/i18n/bidi/bidi-unset-001.html
               imported/w3c/i18n/bidi/bidi-unset-002.html
               imported/w3c/i18n/bidi/bidi-unset-003.html
               imported/w3c/i18n/bidi/bidi-unset-004.html
               imported/w3c/i18n/bidi/bidi-unset-005.html
               imported/w3c/i18n/bidi/bidi-unset-006.html
               imported/w3c/i18n/bidi/bidi-unset-007.html
               imported/w3c/i18n/bidi/bidi-unset-008.html
               imported/w3c/i18n/bidi/bidi-unset-009.html
               imported/w3c/i18n/bidi/bidi-unset-010.html
               imported/w3c/i18n/bidi/block-embed-001.html
               imported/w3c/i18n/bidi/block-embed-002.html
               imported/w3c/i18n/bidi/block-embed-003.html
               imported/w3c/i18n/bidi/block-override-001.html
               imported/w3c/i18n/bidi/block-override-002.html
               imported/w3c/i18n/bidi/block-override-003.html
               imported/w3c/i18n/bidi/block-override-004.html
               imported/w3c/i18n/bidi/block-override-isolate-001.html
               imported/w3c/i18n/bidi/block-override-isolate-002.html
               imported/w3c/i18n/bidi/block-override-isolate-003.html
               imported/w3c/i18n/bidi/block-override-isolate-004.html
               imported/w3c/i18n/bidi/block-plaintext-001.html
               imported/w3c/i18n/bidi/block-plaintext-002.html
               imported/w3c/i18n/bidi/block-plaintext-003.html
               imported/w3c/i18n/bidi/block-plaintext-004.html
               imported/w3c/i18n/bidi/block-plaintext-005.html
               imported/w3c/i18n/bidi/block-plaintext-006.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/html.css:
        (bdi, output):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * html/HTMLElement.cpp:
        (WebCore::unicodeBidiAttributeForDirAuto):
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):

2017-05-07  Ben Kelly  <ben@wanderview.com>

        Set the Response.blob() type based on the content-type header value.
        https://bugs.webkit.org/show_bug.cgi?id=170849

        Reviewed by Youenn Fablet.

        There are two problems to fix here:

        1.  Currently the FetchResponse class only called updateContentType()
        when first created even though all the headers were not available.  This
        patch calls updateContentType() again after the headers are populated.

        2.  The fetch design requires propagating the normalized blob
        type to FetchBodyConsumer as well.  Currently this is only done if
        Response.blob() is called after the body is completely loaded.  If
        we hit the consumeOnceLoadingFinished() path, then the type is not
        passed.  This is similar to what was happening in bug 171489 with
        ReadableStream bodies.  This patch sets the type on the
        FetchBodyConsumer in consumeOnceLoadingFinished() as well.

        Theses changes allow WebKit to pass the "Consume response's body: from
        fetch to blob" case in the WPT response-consume.html test.

        Test: http://w3c-test.org/fetch/api/response/response-consume.html

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse): Modified to
        call FetchBodyOwner::updateContentType() after filling m_headers.
        (WebCore::FetchBody::consumeOnceLoadingFinished): Call
        FetchBodyConsumer::setContentType() when being consumed as
        a blob.
        * Modules/fetch/FetchBody.h: Modify consumeOnceLoadingFinished()
        to take the content type string.
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::consumeOnceLoadingFinished): Pass
        the content type string down to FetchBody so it can be
        propagated to the FetchBodyConsumer.

2017-05-07  Simon Fraser  <simon.fraser@apple.com>

        [iOS] REGRESSION (r209409): getBoundingClientRect is wrong for fixed-position elements in resize/orientationchange
        https://bugs.webkit.org/show_bug.cgi?id=171140

        Reviewed by Sam Weinig.

        WebPage::dynamicViewportSizeUpdate() is called during rotation, and does a layout which needs to have
        an up-to-date layout viewport, since the layout viewport state is detectable in orientationchange and
        resize events via fetching the client rect of fixed elements. Normally we send in the layout viewport
        from the UI process, but in this case we need to compute one in the web process. So factor code
        into FrameView to do the computation, called from both places.

        Tests: fast/events/ios/rotation/layout-viewport-during-rotation.html
               fast/events/ios/rotation/layout-viewport-during-safari-type-rotation.html

        * page/FrameView.cpp:
        (WebCore::FrameView::computeUpdatedLayoutViewportRect):
        * page/FrameView.h:

2017-05-07  Chris Dumez  <cdumez@apple.com>

        Drop remaining uses of PassRefPtr in editing code
        https://bugs.webkit.org/show_bug.cgi?id=171787

        Reviewed by Darin Adler.

        Drop remaining uses of PassRefPtr in editing code.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::toIdentifier):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::didApplyCommand):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertFragment):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::willWriteSelectionToPasteboard):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForMisspelledOrUngrammatical):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::changeBackToReplacedString):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertFragment):
        (WebCore::Editor::command):
        (WebCore::Editor::Command::Command):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::fixOrphanedListChild):
        (WebCore::InsertListCommand::mergeWithNeighboringLists):
        (WebCore::InsertListCommand::doApplyForSingleParagraph):
        (WebCore::InsertListCommand::unlistifyParagraph):
        (WebCore::InsertListCommand::listifyParagraph):
        * editing/InsertListCommand.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::InsertTextCommand):
        * editing/InsertTextCommand.h:
        (WebCore::InsertTextCommand::createWithMarkerSupplier):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::MoveSelectionCommand):
        * editing/MoveSelectionCommand.h:
        (WebCore::MoveSelectionCommand::create):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeNodePreservingChildren):
        (WebCore::ReplacementFragment::removeNode):
        (WebCore::ReplacementFragment::insertNodeBefore):
        (WebCore::ReplacementFragment::restoreAndRemoveTestRenderingNodesToFragment):
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor):
        (WebCore::removeHeadContents):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/ReplaceSelectionCommand.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest):
        (WebCore::SpellCheckRequest::create):
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::isCheckable):
        (WebCore::SpellChecker::requestCheckingFor):
        (WebCore::SpellChecker::invokeRequest):
        (WebCore::SpellChecker::enqueueRequest):
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:
        (WebCore::SpellCheckRequest::checkingRange):
        (WebCore::SpellCheckRequest::paragraphRange):
        * editing/TextCheckingHelper.cpp:
        (WebCore::expandToParagraphBoundary):
        (WebCore::TextCheckingParagraph::TextCheckingParagraph):
        (WebCore::TextCheckingParagraph::expandRangeToNextEnd):
        (WebCore::TextCheckingParagraph::rangeLength):
        (WebCore::TextCheckingParagraph::paragraphRange):
        (WebCore::TextCheckingParagraph::subrange):
        (WebCore::TextCheckingParagraph::offsetTo):
        (WebCore::TextCheckingParagraph::offsetAsRange):
        (WebCore::TextCheckingParagraph::text):
        (WebCore::TextCheckingParagraph::checkingStart):
        (WebCore::TextCheckingParagraph::checkingEnd):
        (WebCore::TextCheckingParagraph::checkingLength):
        (WebCore::TextCheckingHelper::TextCheckingHelper):
        (WebCore::TextCheckingHelper::findFirstMisspelling):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstGrammarDetail):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::isUngrammatical):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        (WebCore::TextCheckingHelper::unifiedTextCheckerEnabled):
        * editing/TextCheckingHelper.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::replaceSelectionWithAttributedString):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::pasteWithPasteboard):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::pasteWithPasteboard):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::replaceNodeFromPasteboard):
        * editing/win/EditorWin.cpp:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::createFragmentFromPlatformData):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::startDrag):

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

        [MediaStream] r216197 caused some webrtc tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=171728

        Reviewed by Eric Carlson.

        Covered by existing tests.

        Rename MediaStream::endStream to MediaStream::endCaptureTracks and only stopping capture tracks.
        Using it when Document is asked to stop media capture.

        Adding the ability to have only one active capture source at a time in a WebProcess.
        This is done by keeping in its related factory the active capture source.
        When a new source is created and started, it replaces the active capture source which becomes muted.
        Using that mechanism for iOS.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::endCaptureTracks):
        (WebCore::MediaStream::endStream): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::isCaptureTrack):
        * dom/Document.cpp:
        (WebCore::Document::stopMediaCapture):
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSourceFactory::setActiveSource):
        (WebCore::AVAudioCaptureSource::setupCaptureSession):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSourceFactory::setActiveSource):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSourceFactory::setActiveSource):
        (WebCore::CoreAudioSharedUnit::startProducingData):

2017-05-07  Tim Horton  <timothy_horton@apple.com>

        Clean up some WebProcessProxy, WebPage, and message handler includes
        https://bugs.webkit.org/show_bug.cgi?id=171791

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/CompositionUnderline.h: Added.
        (WebCore::CompositionUnderline::CompositionUnderline):
        * editing/Editor.h:
        (WebCore::CompositionUnderline::CompositionUnderline): Deleted.
        Move CompositionUnderline out of Editor.h, so that other files can
        include that without Editor.h (which is quite large). Also, modernize it slightly.

2017-05-07  Sam Weinig  <sam@webkit.org>

        Implement Subresource Integrity (SRI)
        https://bugs.webkit.org/show_bug.cgi?id=148363
        <rdar://problem/18945879>

        Reviewed by Daniel Bates.

        Tests: http/tests/subresource-integrity/sri-disabled-with-setting.html
               http/tests/subresource-integrity/sri-enabled-with-setting.html
               http/tests/subresource-integrity/sri-script-cors.html
               http/tests/subresource-integrity/sri-style-cors.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::create):
        (WebCore::LoadableClassicScript::notifyFinished):
        * dom/LoadableClassicScript.h:
        * dom/LoadableScript.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestClassicScript):
        Store integrity metadata in the script fetcher so it can be passed to
        the checked when script load finishes.

        * html/HTMLAttributeNames.in:
        Add 'integrity'.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        When requesting a stylesheet, cache the integrity metadata so it can
        be used when the load completes (accessing the attribute at load completion
        time is incorrect, as a script might have changed the attributes value since
        the request was made).

        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        Add an integrity check using the cached integrity metadata when a load
        finishes.

        * html/HTMLLinkElement.h:
        Add cached integrity metadata member.

        * html/HTMLLinkElement.idl:
        * html/HTMLScriptElement.idl:
        Add integrity property.

        * html/parser/HTMLParserIdioms.h:
        (WebCore::isNotHTMLSpace):
        Templatize isNotHTMLSpace so it can work for both UChar and LChar.

        * loader/ResourceCryptographicDigest.cpp:
        (WebCore::parseCryptographicDigestImpl):
        (WebCore::parseEncodedCryptographicDigestImpl):
        (WebCore::parseEncodedCryptographicDigest):
        (WebCore::decodeEncodedResourceCryptographicDigest):
        * loader/ResourceCryptographicDigest.h:
        Add concept of an encoded digest to more closely model the spec so that hashes
        that match the grammar but are invalid (say, mixing base64 and base64URL) make
        it through the algorithm longer, and don't cause us to load something that should
        be blocked.

        * loader/SubresourceIntegrity.cpp: Added.
        * loader/SubresourceIntegrity.h: Added.
        Add implementation of Subresource Integrity metadata validation allowing
        for a CachedResource and integrity metadata to be passed for validation.

        * page/Settings.in:
        Add setting for Subresource Integrity, defaulted to enabled.

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

        [GTK] Cannot sign in with new Google sign-in page
        https://bugs.webkit.org/show_bug.cgi?id=171770

        Reviewed by Carlos Garcia Campos.

        Google's new authentication page does not work with the Firefox user
        agent that's required to make various Google websites work. Special-case
        accounts.google.com so that it receives our standard user agent.

        * platform/UserAgentQuirks.cpp:
        (WebCore::isGoogle):
        (WebCore::urlRequiresFirefoxBrowser):

2017-05-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] CTFontDescriptorCreateMatchingFontDescriptor() is not case insensitive
        https://bugs.webkit.org/show_bug.cgi?id=171636
        <rdar://problem/30811218>

        Reviewed by Dean Jackson.

        LastResort is the only name which needs to be looked up case-sensitively. We can handle
        this in our existing function which handles special font names (like -apple-system) to
        make sure that we always do the right thing.

        Test: fast/text/lastResort.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/spi/cocoa/CoreTextSPI.h:

2017-05-06  Chris Dumez  <cdumez@apple.com>

        Implement the concept of cookie-averse document
        https://bugs.webkit.org/show_bug.cgi?id=171746
        <rdar://problem/32004466>

        Reviewed by Sam Weinig.

        Implement the concept of cookie-averse document:
        - https://html.spec.whatwg.org/#cookie-averse-document-object

        Test: fast/cookies/cookie-averse-document.html

        * dom/Document.cpp:
        (WebCore::Document::isCookieAverse):
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        * dom/Document.h:

2017-05-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r216339.

        * dom/Document.h:
        (WebCore::Document::readyState):

2017-05-06  Chris Dumez  <cdumez@apple.com>

        Align our IDL files with the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=171777

        Reviewed by Sam Weinig.

        Align our IDL files with the latest DOM specification:
        - https://dom.spec.whatwg.org

        No Web-facing behavior change. Things that do not match the specification
        have been annotated with FIXME comments.

        * dom/CharacterData.idl:
        * dom/Comment.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/Document.cpp:
        * dom/Document.h:
        (WebCore::Document::readyState):
        * dom/Document.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/NonDocumentTypeChildNode.idl:
        * dom/ParentNode.idl:
        * dom/ProcessingInstruction.idl:
        * dom/Range.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TreeWalker.idl:
        * html/DOMTokenList.idl:

2017-05-06  Tim Horton  <timothy_horton@apple.com>

        Reduce the number of includes in WebPage.h and WebProcess.h
        https://bugs.webkit.org/show_bug.cgi?id=171779

        Reviewed by Sam Weinig.

        * page/TextIndicator.h:

2017-05-06  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r216294): The new test fails on WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=171780

        Rolling back https://trac.webkit.org/r216294, https://trac.webkit.org/r216296,
        https://trac.webkit.org/216299, https://trac.webkit.org/216330

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::paint):
        * platform/Scrollbar.h:
        * platform/Widget.h:
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::movesPixels):
        (WebCore::FilterOperation::shouldBeRestrictedBySecurityOrigin): Deleted.
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::hasFilterThatShouldBeRestrictedBySecurityOrigin): Deleted.
        * platform/graphics/filters/FilterOperations.h:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::paint):
        * platform/ios/WidgetIOS.mm:
        (WebCore::Widget::paint):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::paint):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        * rendering/FilterEffectRenderer.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        (): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        * rendering/RenderLayer.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paint):
        * rendering/RenderScrollbar.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):

2017-05-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r216333.

        Caused layout test failures

        Reverted changeset:

        "Implement the concept of cookie-averse document"
        https://bugs.webkit.org/show_bug.cgi?id=171746
        http://trac.webkit.org/changeset/216333

2017-05-06  Chris Dumez  <cdumez@apple.com>

        Implement the concept of cookie-averse document
        https://bugs.webkit.org/show_bug.cgi?id=171746
        <rdar://problem/32004466>

        Reviewed by Sam Weinig.

        Implement the concept of cookie-averse document:
        - https://html.spec.whatwg.org/#cookie-averse-document-object

        Test: fast/cookies/cookie-averse-document.html

        * dom/Document.cpp:
        (WebCore::Document::isCookieAverse):
        (WebCore::Document::cookie):
        (WebCore::Document::setCookie):
        * dom/Document.h:

2017-05-06  Myles C. Maxfield  <mmaxfield@apple.com>

        REGERSSION(r213499): Emoji with Fitzpatrick modifiers are drawn as two separate glyphs
        https://bugs.webkit.org/show_bug.cgi?id=171750
        <rdar://problem/31122612>

        Reviewed by Zalan Bujtas.

        Emoji with Fitzpatrick modifiers need to take our complex text codepath. When looking through
        the string to determine which code path to use, we ask if a particular codepoint is an emoji
        group candidate. r213499 expanded the set of these candidates to include Fitzpatrick modifiers,
        which means the next "if" statement would never be hit. Instead, we should check that "if"
        statement first (because order is not important here). The next checks do not intersect with
        any emoji group candidates.

        Test: fast/text/fitzpatrick-combination.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::characterRangeCodePath):

2017-05-06  Youenn Fablet  <youenn@apple.com>

        RealtimeMediaSourceCenter callbacks should be passed as r-values
        https://bugs.webkit.org/show_bug.cgi?id=171407

        Reviewed by Eric Carlson.

        No change of behavior, this is mostly style here.

        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2017-05-05  Zalan Bujtas  <zalan@apple.com>

        Renderers being destroyed should not be added to AX's deferred list.
        https://bugs.webkit.org/show_bug.cgi?id=171768
        <rdar://problem/31955660>

        Reviewed by Simon Fraser.

        In certain cases, when custom scrollbars are present, while destroying the scrollbars' block parent, we
          - first remove the block from the AX's deferred list (AXObjectCache::remove)
          - destroy the render layer that owns the custom scrollbars (RenderLayer::destroyLayer) 
          - detach the scrollbars from the parent (block) (RenderObject::removeFromParent)
            - clean up the block's lines (RenderBlock::deleteLines)
              - push the block back to the AX's deferred list (AXObjectCache::recomputeDeferredIsIgnored)
        At this point no one will remove the current block from AX's deferred list.

        Test: accessibility/crash-when-renderers-are-added-back-to-deferred-list.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::recomputeDeferredIsIgnored):
        (WebCore::AXObjectCache::deferTextChanged):

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

        Crash in ImageFrameCache::decodedSizeChanged() after image load cancellation
        https://bugs.webkit.org/show_bug.cgi?id=171736

        Reviewed by Tim Horton.

        Tests: Covered by run-webkit-tests fast/images/image-formats-support.html
        --guard-malloc.

        Because an image format is not supported, the ImageObserver of the Image
        is deleted then the Image itself is deleted. In BitmapImage destructor,
        we make a call which ends up accessing the deleted ImageObserver.

        To fix this, we need to change the BitImage destructor to avoid calling 
        ImageFrameCache::decodedSizeChanged() since it is not really needed.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::~BitmapImage):

2017-05-05  Timothy Horton  <timothy_horton@apple.com>

        [Mac] Adjust cursor position for dragged link (and stop it from moving based on how fast you are dragging)
        https://bugs.webkit.org/show_bug.cgi?id=171764
        <rdar://problem/32005865>

        Reviewed by Simon Fraser.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        Compute dragImageAnchorPoint only if it is needed.
        Don't compute a random unused imageRect.
        Factor link drag image offset computation out into DragImage functions
        for platforms to override.

        Pass dragOrigin (the mouseDown point), not mouseDraggedPoint, to
        doSystemDrag, just like all the other drag types. This plus the
        WebKit2 change makes the link stable vs. the cursor, instead of
        positioned based on how fast you move after the mouse down.

        * page/DragController.h:
        * page/gtk/DragControllerGtk.cpp:
        * page/mac/DragControllerMac.mm:
        * page/win/DragControllerWin.cpp:
        Move LinkDragBorderInset into DragImage, and share between the non-Mac platforms.

        * platform/DragImage.cpp:
        (WebCore::dragOffsetForLinkDragImage):
        (WebCore::anchorPointForLinkDragImage):
        * platform/DragImage.h:
        As previously mentioned, move the computation of drag image offset here.

        * platform/mac/DragImageMac.mm:
        (WebCore::dragOffsetForLinkDragImage):
        (WebCore::anchorPointForLinkDragImage):
        Put the new drag image to the bottom right of the cursor.

2017-05-05  Dean Jackson  <dino@apple.com>

        ...and now the GTK and Windows builds.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::paint):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::paint):

2017-05-05  Brady Eidson  <beidson@apple.com>

        API test WebKit2.WebsiteDataStoreCustomPaths is failing on ios-simulator.
        <rdar://problem/31977294> and https://bugs.webkit.org/show_bug.cgi?id=171513

        Reviewed by Andy Estes.

        Covered by API test.

        * platform/spi/cf/CFNetworkSPI.h:

2017-05-05  Dean Jackson  <dino@apple.com>

        Try to fix iOS build.

        * platform/ios/WidgetIOS.mm:
        (WebCore::Widget::paint):

2017-05-05  Dean Jackson  <dino@apple.com>

        Restrict SVG filters to accessible security origins
        https://bugs.webkit.org/show_bug.cgi?id=118689
        <rdar://problem/27362159>

        Reviewed by Brent Fulgham.

        Certain SVG filters should only be allowed to operate
        on content that is has SecurityOrigin access to. Implement
        this by including a flag in PaintInfo and LayerPaintingInfo,
        and have RenderWidget make sure the documents have acceptable
        SecurityOrigins as it goes to paint.

        This could be used as the first step in a "safe painting"
        strategy, allowing some content to be rendered into a 
        canvas or via the element() CSS function... but it is only
        a small first step.

        Test: http/tests/css/filters-on-iframes.html

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::paint):
        * platform/Scrollbar.h:
        * platform/Widget.h:
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::shouldBeRestrictedBySecurityOrigin):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::hasFilterThatShouldBeRestrictedBySecurityOrigin):
        * platform/graphics/filters/FilterOperations.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        * rendering/FilterEffectRenderer.h:
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        * rendering/RenderLayer.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paint):
        * rendering/RenderScrollbar.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):

2017-05-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r216273.

        This change caused an assertion failure on WK1.

        Reverted changeset:

        "Crash in ImageFrameCache::decodedSizeChanged() after image
        load cancellation"
        https://bugs.webkit.org/show_bug.cgi?id=171736
        http://trac.webkit.org/changeset/216273

2017-05-05  Brian Burg  <bburg@apple.com>

        [Cocoa] Converting from WebCore::Cookie to NSHTTPCookie always marks cookies as session cookies
        https://bugs.webkit.org/show_bug.cgi?id=171748
        <rdar://problem/32027327>

        Reviewed by Michael Catanzaro.

        The function that we use to convert from WebCore::Cookie to NSHTTPCookie was
        also misusing the NSHTTPCookieDiscard property. If any value is provided for
        this key, even @NO, CFNetwork interprets that to mean that the cookie has the
        "session" flag.

        This is known to affect cookies set via WebCookieManager, WKHTTPCookieStore,
        and WebAutomationSession.

        This is covered by existing test WebKit2.WKHTTPCookieStore.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie *):
        Don't include the property if the cookie is not a session cookie.

2017-05-05  Youenn Fablet  <youenn@apple.com>

        TURNS gathering is not working properly
        https://bugs.webkit.org/show_bug.cgi?id=171747

        Reviewed by Eric Carlson.

        Did manual testing on real TURNS servers.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::configurationFromMediaEndpointConfiguration): Disabling TURNS servers gathering.

2017-05-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r216275.

        This change broke internal builds.

        Reverted changeset:

        "[Cocoa] CTFontDescriptorCreateMatchingFontDescriptor() is not
        case insensitive"
        https://bugs.webkit.org/show_bug.cgi?id=171636
        http://trac.webkit.org/changeset/216275

2017-05-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] CTFontDescriptorCreateMatchingFontDescriptor() is not case insensitive
        https://bugs.webkit.org/show_bug.cgi?id=171636
        <rdar://problem/30811218>

        Reviewed by Dean Jackson.

        LastResort is the only name which needs to be looked up case-sensitively. We can handle
        this in our existing function which handles special font names (like -apple-system) to
        make sure that we always do the right thing.

        Test: fast/text/lastResort.html

        * platform/spi/cocoa/CoreTextSPI.h:
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):

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

        Crash in ImageFrameCache::decodedSizeChanged() after image load cancellation
        https://bugs.webkit.org/show_bug.cgi?id=171736

        Reviewed by Tim Horton.

        Tests: Covered by run-webkit-tests fast/images/image-formats-support.html
        --guard-malloc.

        Because an image format is not supported, the ImageObserver of the Image
        is deleted then the Image itself is deleted. In BitmapImage destructor,
        we make a call which ends up accessing the deleted ImageObserver.

        To fix this, we need to setImageObsever of the Image to-be-deleted to 
        nullptr. So the Image can avoid accessing its ImageObserver, while it is
        being deleted. Also we can change the BitImage destructor to avoid calling 
        ImageFrameCache::decodedSizeChanged() since it is not really needed.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::clearImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::~BitmapImage):

2017-05-05  Brian Burg  <bburg@apple.com>

        CrashTracer: [USER] com.apple.WebKit.WebContent.Development at com.apple.WebCore: WebCore::commonVMSlow + 57
        https://bugs.webkit.org/show_bug.cgi?id=171669
        <rdar://problem/31967684>

        Reviewed by Mark Lam.

        * bindings/js/CommonVM.h:
        (WebCore::commonVMOrNull):
        Add an inline accessor function to expose the global variable.

2017-05-05  Filip Pizlo  <fpizlo@apple.com>

        GCController.cpp's collect() should be Async
        https://bugs.webkit.org/show_bug.cgi?id=171708

        Reviewed by Saam Barati.

        No new tests because no change in behavior.
        
        This is one step towards not requesting sync GCs in WebCore. I'm landing this incrementally to
        make bisecting super easy.

        * bindings/js/GCController.cpp:
        (WebCore::collect):

2017-05-05  Chris Dumez  <cdumez@apple.com>

        Attr Nodes should not have children
        https://bugs.webkit.org/show_bug.cgi?id=171688
        <rdar://problem/31998412>

        Reviewed by Andreas Kling.

        Attr Nodes should not have children as per the latest DOM specification:
        - https://dom.spec.whatwg.org/#interface-attr
        - https://dom.spec.whatwg.org/#dom-attr-value
        - https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity (Step 1)

        Firefox and Chrome both have been matching the DOM specification for a while so I think
        we should do the same. This aligns us with other browsers, simplifies the code, is
        more efficient and the code being removed has been prone to security bugs.

        Test: fast/dom/Attr/cannot-have-children.html

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        (WebCore::Attr::create):
        (WebCore::Attr::setValue):
        (WebCore::Attr::cloneNodeInternal):
        * dom/Attr.h:
        - Have Attr subclass Node instead of ContainerNode as it can no longer have children.
        - Drop logic to dealing with children / creating a Text child.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::notifyParentAfterChange):
        Drop useless check found by the compiler. parentNode() can no longer be an Attr node.

        * dom/Node.cpp:
        (WebCore::appendTextContent):
        appendTextContent() is called by Node.TextContent(). For Attr Nodes, we should no longer traverse
        its subtree to gather Text Nodes. Instead, we now return Attr.value, as per the specification:
        - https://dom.spec.whatwg.org/#dom-node-textcontent

        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode):
        As per https://dom.spec.whatwg.org/#concept-node-length, we should return the number of children
        for Attr Nodes, which will always be 0.

        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):
        Always return true for TEXT_NODE as the !(node->parentNode() && node->parentNode()->isAttributeNode())
        check will also with true now. This is because a parentNode() cannot be an Attribute Node.

2017-05-05  Brian Burg  <bburg@apple.com>

        [Cocoa] Converting from WebCore::Cookie to NSHTTPCookie always marks cookies as secure
        https://bugs.webkit.org/show_bug.cgi?id=171700
        <rdar://problem/32017975>

        Reviewed by Brady Eidson.

        The function that we use to convert from WebCore::Cookie to NSHTTPCookie was
        misusing the NSHTTPCookieSecure property. If any value is provided for this key,
        even @NO, CFNetwork interprets that to mean that the cookie has the "secure" flag.
        Thus, in some cases we would store an "insecure" cookie on a site that uses the
        http:// protocol, and be unable to later retrieve the cookie. This is known to
        affect cookies set via WebCookieManager, WKHTTPCookieStore, and WebAutomationSession.

        This is covered by existing test WebKit2.WKHTTPCookieStore.
        The test had a bug that masked this problem.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie *):
        Don't include the property if the cookie is not secure.

2017-05-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add SPI to WebItemProviderPasteboard to synchronously load data with a given timeout
        https://bugs.webkit.org/show_bug.cgi?id=171725
        <rdar://problem/32014052>

        Reviewed by Beth Dakin.

        Adds a synchronousTimeout: argument to doAfterLoadingProvidedContentIntoFileURLs:. If a positive timeout
        interval is specified by the client, then we will block the main thread for at most that amount of time after
        beginning to load from the item providers.

        To do this, we introduce another `dispatch_group_t` in parallel to the `fileLoadingGroup` that is entered and
        left in the same places. However, instead of attaching a handler block, we simply perform a synchronous wait for
        either the time limit to be reached, or the item providers to finish loading.

        No new tests -- no change in behavior yet.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:]):
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):

2017-05-05  Chris Dumez  <cdumez@apple.com>

        Clean up Attr.idl
        https://bugs.webkit.org/show_bug.cgi?id=171691

        Reviewed by Andreas Kling.

        Clean up Attr.idl to match the spec:
        - https://dom.spec.whatwg.org/#interface-attr

        No Web-facing behavior change except for Attr properties being enumerated
        in a slightly different order.

        * dom/Attr.idl:

2017-05-05  Antti Koivisto  <antti@apple.com>

        ASSERTION FAILED: !frame().document()->inRenderTreeUpdate() in WebCore::FrameView::layout(bool)
        https://bugs.webkit.org/show_bug.cgi?id=171717

        Reviewed by Brent Fulgham.

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

            Don't allow frame load to complete in the middle of a render tree update. Instead delay the check.

2017-05-05  Chris Dumez  <cdumez@apple.com>

        Refactor / Clean up Element.idl
        https://bugs.webkit.org/show_bug.cgi?id=171734

        Reviewed by Sam Weinig.

        Refactor / Clean up Element.idl to match the latest specification:
        - https://dom.spec.whatwg.org/#interface-element

        There is no Web-facing behavior change in this patch besides the Element properties
        being enumerated in a slightly different order. Things that do not match the
        specification have merely been annotated with FIXME comments for now. This makes
        it much more obvious what's standard, what's not and what needs fixing.

        * dom/Element.idl:

2017-05-05  Tim Horton  <timothy_horton@apple.com>

        Link drag images for apple.com front page links have a lot of spurious whitespace
        https://bugs.webkit.org/show_bug.cgi?id=171719
        <rdar://problem/32010854>

        Reviewed by Wenson Hsieh.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        Use the white-space-simplified string that we put on the pasteboard
        for the drag image, too!

2017-05-04  Mark Lam  <mark.lam@apple.com>

        DRT's setAudioResultCallback() and IDBRequest::setResult() need to acquire the JSLock.
        https://bugs.webkit.org/show_bug.cgi?id=171716
        <rdar://problem/30878027>

        Reviewed by Saam Barati.

        No new tests.  This issue was caught by existing tests.

        IDBRequest::setResult() needs to acquire the JSLock before calling toJS() (which
        does JS conversion and therefore, potentially JS allocations).

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):

2017-05-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Do not report more errors after the first one
        https://bugs.webkit.org/show_bug.cgi?id=171722

        Reviewed by Xabier Rodriguez-Calvar.

        We can receive several error messages for the same error from different elements. That's not expected by the
        media source selection algorithm implementation. I don't know if didn't happen with previous versions of GST,
        but since the upgrade to 1.10.4 several tests are failing because of this.

        Fixes: media/video-error-does-not-exist.html
               media/video-load-networkState.html
               media/video-source-error.html
               media/video-source-none-supported.html
               media/video-source-moved.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Return early also when an error already occured.

2017-05-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Fix handling of gst errors in MediaPlayerPrivateGStreamer::handleMessage
        https://bugs.webkit.org/show_bug.cgi?id=171721

        Reviewed by Xabier Rodriguez-Calvar.

        We are checking the GError only comparing the code, and ignoring the domain in some cases. Use g_error_matches()
        in those cases instead of only checking the code.

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

2017-05-04  Commit Queue  <commit-queue@webkit.org>

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

        Multiple LayoutTests crashing in Document::page() (Requested
        by ap on #webkit).

        Reverted changeset:

        "Remove support for legacy Notifications"
        https://bugs.webkit.org/show_bug.cgi?id=171487
        http://trac.webkit.org/changeset/216206

2017-05-04  Chris Dumez  <cdumez@apple.com>

        Drop remaining uses of PassRefPtr from CompositeEditCommand
        https://bugs.webkit.org/show_bug.cgi?id=171645

        Reviewed by Darin Adler.

        Drop remaining uses of PassRefPtr from CompositeEditCommand.

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        (WebCore::ApplyBlockElementCommand::endOfNextParagraphSplittingTextNodesIfNeeded):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::replaceWithSpanOrRemoveIfWithoutAttributes):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::splitTextAtStart):
        (WebCore::ApplyStyleCommand::splitTextAtEnd):
        (WebCore::ApplyStyleCommand::splitTextElementAtStart):
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::addBlockStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::applyCommand):
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::removeNode):
        (WebCore::CompositeEditCommand::removeNodePreservingChildren):
        (WebCore::CompositeEditCommand::removeNodeAndPruneAncestors):
        (WebCore::CompositeEditCommand::moveRemainingSiblingsToNewParent):
        (WebCore::CompositeEditCommand::replaceElementWithSpanPreservingChildrenAndAttributes):
        (WebCore::CompositeEditCommand::prune):
        (WebCore::CompositeEditCommand::splitTextNode):
        (WebCore::CompositeEditCommand::splitElement):
        (WebCore::CompositeEditCommand::mergeIdenticalElements):
        (WebCore::CompositeEditCommand::splitTextNodeContainingElement):
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::removeNodeAttribute):
        (WebCore::CompositeEditCommand::setNodeAttribute):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        (WebCore::CompositeEditCommand::pushAnchorElementDown):
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::handleSpecialCaseBRDelete):
        (WebCore::DeleteSelectionCommand::removeNodeUpdatingStates):
        (WebCore::DeleteSelectionCommand::removeNode):
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::removePreviouslySelectedEmptyTableRows):
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks):
        * editing/DeleteSelectionCommand.h:
        * editing/Editor.cpp:
        (WebCore::ClearTextCommand::CreateAndApply):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::handleAcceptedCandidate):
        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::fixOrphanedListChild):
        (WebCore::InsertListCommand::doApplyForSingleParagraph):
        (WebCore::InsertListCommand::unlistifyParagraph):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTab):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeBefore):
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeAfter):
        (WebCore::ModifySelectionListLevelCommand::appendSiblingNodeRange):
        (WebCore::DecreaseSelectionListLevelCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand):
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.h:
        (WebCore::RemoveNodePreservingChildrenCommand::create):
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::ReplaceNodeWithSpanCommand::ReplaceNodeWithSpanCommand):
        (WebCore::ReplaceNodeWithSpanCommand::doApply):
        (WebCore::ReplaceNodeWithSpanCommand::doUnapply):
        (WebCore::ReplaceNodeWithSpanCommand::getNodesInCommand):
        * editing/ReplaceNodeWithSpanCommand.h:
        (WebCore::ReplaceNodeWithSpanCommand::create):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeNodePreservingChildren):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor):
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::SetNodeAttributeCommand):
        (WebCore::SetNodeAttributeCommand::getNodesInCommand):
        * editing/SetNodeAttributeCommand.h:
        (WebCore::SetNodeAttributeCommand::create):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove):
        * editing/SimplifyMarkupCommand.h:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::SplitElementCommand):
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::getNodesInCommand):
        * editing/SplitElementCommand.h:
        (WebCore::SplitElementCommand::create):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::SplitTextNodeCommand):
        (WebCore::SplitTextNodeCommand::doApply):
        (WebCore::SplitTextNodeCommand::doUnapply):
        (WebCore::SplitTextNodeCommand::doReapply):
        (WebCore::SplitTextNodeCommand::insertText1AndTrimText2):
        * editing/SplitTextNodeCommand.h:
        (WebCore::SplitTextNodeCommand::create):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::SplitTextNodeContainingElementCommand):
        (WebCore::SplitTextNodeContainingElementCommand::doApply):
        * editing/SplitTextNodeContainingElementCommand.h:
        (WebCore::SplitTextNodeContainingElementCommand::create):
        * editing/TextInsertionBaseCommand.cpp:
        (WebCore::TextInsertionBaseCommand::applyTextInsertionCommand):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::makeEditableRootEmpty):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):

2017-05-04  Daniel Bates  <dabates@apple.com>

        Fix misspelled word "interrupt" as pointed out by Darin Adler
        in <https://bugs.webkit.org/show_bug.cgi?id=171577>.

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

2017-05-04  Jeremy Jones  <jeremyj@apple.com>

        UIColor +whiteColor and +clearColor are ambiguous and need to be casted when soft linked.
        https://bugs.webkit.org/show_bug.cgi?id=171704

        Reviewed by Jer Noble.

        No new tests because no behavior change.

        Fix build by casting result of +clearColor to UIColor.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (clearUIColor):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        (WebVideoFullscreenInterfaceAVKit::didStopPictureInPicture):

2017-05-04  Chris Dumez  <cdumez@apple.com>

        Element.slot should be marked as [Unscopable]
        https://bugs.webkit.org/show_bug.cgi?id=171683

        Reviewed by Darin Adler.

        Element.slot should be marked as [Unscopable]:
        - https://dom.spec.whatwg.org/#interface-element
        - https://heycam.github.io/webidl/#Unscopable

        Test: fast/shadow-dom/Element-slot-unscopable.html

        * dom/Element.idl:

2017-05-04  Don Olmstead  <don.olmstead@am.sony.com>

        [Win] Remove redundant macros that are set in the CMake config
        https://bugs.webkit.org/show_bug.cgi?id=171571

        Reviewed by Brent Fulgham.

        No new tests. No change in behavior.

        * WebCorePrefix.h:
        * config.h:
        * platform/win/COMPtr.h:
        * platform/win/WindowsTouch.h:
        * testing/js/WebCoreTestSupportPrefix.h:

2017-05-04  Tim Horton  <timothy_horton@apple.com>

        [Mac] Modernize image for dragged link
        https://bugs.webkit.org/show_bug.cgi?id=171701
        <rdar://problem/31978818>

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/DragControllerMac.mm:
        * platform/mac/DragImageMac.mm:
        (WebCore::dragImageSize):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::LinkImageLayout::LinkImageLayout):
        (WebCore::LinkImageLayout::layOutText):
        (WebCore::LinkImageLayout::addLine):
        (WebCore::createDragImageForLink):
        (WebCore::fontFromNSFont): Deleted.
        (WebCore::canUseFastRenderer): Deleted.
        (WebCore::widthWithFont): Deleted.
        (WebCore::drawAtPoint): Deleted.
        (WebCore::drawDoubledAtPoint): Deleted.
        * platform/spi/cocoa/LinkPresentationSPI.h: Added.
        Improve the design of URL drag images.
        The margins are increased, the background is now white, the text is
        not drawn doubled-up, the title will now wrap to two lines, and the
        domain name will appear simplified and de-punycoded.

        Much of the implementation of text painting is borrowed from
        <attachment> for now, but we should figure out how to generalize
        it for UI-like parts of WebKit in the future.

2017-05-04  Commit Queue  <commit-queue@webkit.org>

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

        not quite ready (Requested by thorton on #webkit).

        Reverted changeset:

        "[Mac] Modernize image for dragged link"
        https://bugs.webkit.org/show_bug.cgi?id=171701
        http://trac.webkit.org/changeset/216223

2017-05-04  Tim Horton  <timothy_horton@apple.com>

        [Mac] Modernize image for dragged link
        https://bugs.webkit.org/show_bug.cgi?id=171701
        <rdar://problem/31978818>

        Reviewed by Simon Fraser.

        * page/mac/DragControllerMac.mm:
        * platform/mac/DragImageMac.mm:
        (WebCore::dragImageSize):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::LinkImageLayout::LinkImageLayout):
        (WebCore::LinkImageLayout::addLine):
        (WebCore::createDragImageForLink):
        (WebCore::fontFromNSFont): Deleted.
        (WebCore::canUseFastRenderer): Deleted.
        (WebCore::widthWithFont): Deleted.
        (WebCore::drawAtPoint): Deleted.
        (WebCore::drawDoubledAtPoint): Deleted.
        Improve the design of URL drag images.
        The margins are increased, the background is now white, the text is
        not drawn doubled-up, the title will now wrap to two lines, and the
        domain name will appear simplified and de-punycoded.

        Much of the implementation of text painting is borrowed from
        <attachment> for now, but we should figure out how to generalize
        it for UI-like parts of WebKit in the future.

2017-05-04  Jeremy Jones  <jeremyj@apple.com>

        Use if instead of return early for 13 places in WebAVPlayerController
        https://bugs.webkit.org/show_bug.cgi?id=171692

        Reviewed by Jer Noble.

        No new tests because no behavior change.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController play:]):
        (-[WebAVPlayerController pause:]):
        (-[WebAVPlayerController togglePlayback:]):
        (-[WebAVPlayerController beginScrubbing:]):
        (-[WebAVPlayerController endScrubbing:]):
        (-[WebAVPlayerController seekToTime:]):
        (-[WebAVPlayerController beginScanningForward:]):
        (-[WebAVPlayerController endScanningForward:]):
        (-[WebAVPlayerController beginScanningBackward:]):
        (-[WebAVPlayerController endScanningBackward:]):
        (-[WebAVPlayerController seekToBeginning:]):
        (-[WebAVPlayerController seekToEnd:]):
        (-[WebAVPlayerController toggleMuted:]):

2017-05-04  Filip Pizlo  <fpizlo@apple.com>

        JSC::Heap should expose a richer API for requesting GCs
        https://bugs.webkit.org/show_bug.cgi?id=171690

        Reviewed by Geoffrey Garen.

        No new tests because this is just a refactoring.
        
        Change some function calls now that some JSC::Heap APIs got renamed.

        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::garbageCollectNowIfNotDoneRecently):

2017-05-04  Mark Lam  <mark.lam@apple.com>

        NeverDestroyed<String>(ASCIILiteral(...)) is not thread safe.
        https://bugs.webkit.org/show_bug.cgi?id=171586
        <rdar://problem/31873190>

        Reviewed by Yusuke Suzuki.

        No new tests because we're just converting uses of ASCIILiteral (in the
        instantiation of NeverDestroyed<String> and NeverDestroyed<const String>) to
        MAKE_STATIC_STRING_IMPL.

        The correctness of using MAKE_STATIC_STRING_IMPL is tested in the newly added
        API test in this patch.

        Also changed "static NeverDestroyed<ASCIILiteral>" instances in
        SQLiteIDBBackingStore.cpp to "static const char* const" because they are only
        ever used to get the underlying const char*.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatementForGetAllObjectStoreRecords):
        * Modules/mediastream/MediaEndpointSessionDescription.cpp:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        * Modules/mediastream/SDPProcessor.cpp:
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::customHandlersStateString):
        (WebCore::NavigatorContentUtils::isProtocolHandlerRegistered):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::boundaryEventOccurred):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):
        (WebCore::AccessibilityMediaControl::title):
        (WebCore::AccessibilityMediaControlsContainer::elementTypeName):
        (WebCore::AccessibilityMediaTimeline::helpText):
        (WebCore::AccessibilityMediaTimeDisplay::accessibilityDescription):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::eventParameterName):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::displayNoneCSSRule):
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::screenEval):
        (WebCore::printEval):
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        * dom/Document.cpp:
        (WebCore::Document::readyState):
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::pseudoElementNameForEvents):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::shouldAddNamespaceElement):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::dataDetectorURLProtocol):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::styleNodeCloseTag):
        (WebCore::createMarkupInternal):
        * html/FormController.cpp:
        (WebCore::formStateSignature):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::appendFormData):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::realizeSaves):
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
        * html/track/VTTCue.cpp:
        (WebCore::startKeyword):
        (WebCore::middleKeyword):
        (WebCore::endKeyword):
        (WebCore::leftKeyword):
        (WebCore::rightKeyword):
        (WebCore::verticalGrowingLeftKeyword):
        (WebCore::verticalGrowingRightKeyword):
        (WebCore::VTTCue::determineTextDirection):
        (WebCore::VTTCue::markFutureAndPastNodes):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::computePseudoClassMask):
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sourceMapURLForResource):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::sourceMapURLForScript):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::corsPolicyPreventedLoad):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultDatabaseFilename):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::urlWithUniqueSecurityOrigin):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::parse):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::defaultMIMEType):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::initialName):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::engineDescription):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::engineDescription):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::similarFont):
        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString):
        * platform/mock/mediasource/MockBox.cpp:
        (WebCore::MockTrackBox::type):
        (WebCore::MockInitializationBox::type):
        (WebCore::MockSampleBox::type):
        * platform/network/HTTPHeaderValues.cpp:
        (WebCore::HTTPHeaderValues::textPlainContentType):
        (WebCore::HTTPHeaderValues::formURLEncodedContentType):
        (WebCore::HTTPHeaderValues::noCache):
        (WebCore::HTTPHeaderValues::maxAge0):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseXSSProtectionHeader):
        * replay/MemoizedDOMResult.cpp:
        (JSC::InputTraits<MemoizedDOMResultBase>::type):
        * svg/SVGTransformValue.cpp:
        (WebCore::SVGTransformValue::transformTypePrefixForParsing):

2017-05-04  Jeremy Jones  <jeremyj@apple.com>

        Add muted to WebPlaybackSessionModel.
        https://bugs.webkit.org/show_bug.cgi?id=171592
        rdar://problem/31814074

        Reviewed by Jer Noble.

        No behavior change. This just adds the ability for UI to mute.

        * platform/cocoa/WebPlaybackSessionModel.h:
        (WebCore::WebPlaybackSessionModelClient::mutedChanged):
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::WebPlaybackSessionModelMediaElement::toggleMuted):
        (WebCore::WebPlaybackSessionModelMediaElement::observedEventNames):
        (WebCore::WebPlaybackSessionModelMediaElement::isMuted):
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController toggleMuted:]):
        * platform/ios/WebPlaybackSessionInterfaceAVKit.h:
        * platform/ios/WebPlaybackSessionInterfaceAVKit.mm:
        (WebCore::WebPlaybackSessionInterfaceAVKit::mutedChanged):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::mutedChanged):
        (WebVideoFullscreenControllerContext::isMuted):
        (WebVideoFullscreenControllerContext::toggleMuted):
        * platform/spi/ios/MediaPlayerSPI.h:

2017-05-04  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r216138): Web Inspector: ASSERT(!content.isNull()) when checking for source map url opening inspector
        https://bugs.webkit.org/show_bug.cgi?id=171697
        <rdar://problem/31999512>

        Reviewed by Matt Baker.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        Always set base64Encoded when returning true. Return the empty
        string instead of a null string matching previous behavior.

2017-05-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add support for keeping the selection in a focused editable element when dragging begins
        https://bugs.webkit.org/show_bug.cgi?id=171585
        <rdar://problem/31544320>

        Reviewed by Beth Dakin and Zalan Bujtas.

        Covered by 4 API tests.

        * dom/DocumentMarker.h:

        Introduces the DraggedContent DocumentMarker type, which applies to the Range in the DOM that is being used as
        a drag source. Also adds DraggedContentData, which contains nodes found by the TextIterator in the process of
        finding Ranges to mark.

        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addDraggedContentMarker):
        (WebCore::shouldInsertAsSeparateMarker):
        (WebCore::DocumentMarkerController::addMarker):

        When adding DocumentMarkers of type DraggedContent, keep adjacent RenderReplaced elements separate, rather than
        merging them into existing RenderedDocumentMarkers. This is because the data for each of these (i.e. the target
        node) needs to be preserved.

        (WebCore::DocumentMarkerController::markersFor):

        Bail and return an empty list if the map of document markers cannot possibly contain a dragged content marker.

        * dom/DocumentMarkerController.h:
        * page/DragController.h:
        * page/DragState.h:

        Add draggedContentRange to DragState. This tracks the Range that is being dragged; it is created when the drag
        session has begun, and ends when drag session finishes (either via WebPage::dragEnded or WebPage::dragCancelled).

        * page/EventHandler.cpp:
        (WebCore::repaintContentsOfRange):
        (WebCore::EventHandler::dragCancelled):

        Called when a drag is cancelled in the UI process without a session ever getting a chance to begin. We use this
        as a hook to remove all DraggedContent document markers from the document of the dragged content range.

        (WebCore::EventHandler::didStartDrag):

        Called when a drag session has begun in the UI process. We use this as a hook to set up document markers for the
        Range of content being dragged.

        (WebCore::EventHandler::dragSourceEndedAt):

        Called when a drag session ends. We use this as a hook to remove all DraggedContent document markers from the
        document of the dragged content range.

        (WebCore::EventHandler::draggedElement):
        * page/EventHandler.h:
        * page/FocusController.cpp:
        (WebCore::shouldClearSelectionWhenChangingFocusedElement):

        Prevent the selection from clearing when the previously focused element is editable and also contains the drag
        source element. Ideally, we should experiment with clearing out the selection whenever the element is blurred
        (and not have additional restrictions on editability and containing the drag source), but this change is much
        riskier.

        (WebCore::FocusController::setFocusedElement):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):

        Use RenderText::draggedContentStartEnd to find the range of text (if any) that is dragged content, and paint
        these ranges of text at a lower alpha using TextPainter::paintTextInRange.

        * rendering/RenderReplaced.cpp:
        (WebCore::draggedContentContainsReplacedElement):

        Determines whether or not the element being rendered is contained within a dragged content range. Assuming that
        the DraggedContent type flag is set in DocumentMarkerController, we first look to see whether or not the
        container node is in the document marker map. If so, instead of consulting node offset ranges (since this is, in
        the worst-case, linear in the number of sibling nodes per RenderReplaced) we simply check the DraggedContentData
        to see if the current element being rendered matches one of the target nodes.

        (WebCore::RenderReplaced::paint):

        If the element rendered by this RenderReplaced is dragged content, then render it at a low alpha.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::draggedContentRangesBetweenOffsets):

        Determines what range of text, if any, contains dragged content by consulting the Document's DocumentMarkers.

        * rendering/RenderText.h:
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextInRange):

        Teach TextPainter to only paint a given range in a TextRun.

        * rendering/TextPainter.h:

        Add TextPainter support for specifying special text offset ranges when rendering a TextRun, such that each
        special range in text is rendered after applying some modification to the GraphicsContext.

2017-05-04  Jeremy Jones  <jeremyj@apple.com>

        Crash when pointer lock element is removed before pointer lock allowed arrives.
        https://bugs.webkit.org/show_bug.cgi?id=171642

        Reviewed by Jer Noble.

        Make sure there a pending lock before attempting to complete pointer lock.

        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::didAcquirePointerLock):

2017-05-04  Chris Dumez  <cdumez@apple.com>

        Reformat / Clean up Node.idl to match the specification
        https://bugs.webkit.org/show_bug.cgi?id=171686

        Reviewed by Sam Weinig.

        Reformat / Clean up Node.idl to match the specification:
        - https://dom.spec.whatwg.org/#node

        There should be no Web-facing behavior change, except for Node properties
        being enumerated in a slightly different order.

        * dom/Node.idl:

2017-05-04  Sam Weinig  <sam@webkit.org>

        Remove support for legacy Notifications
        https://bugs.webkit.org/show_bug.cgi?id=171487

        Reviewed by Jon Lee.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove files.

        * Configurations/FeatureDefines.xcconfig:
        Remove definition of ENABLE_LEGACY_NOTIFICATIONS.

        * DerivedSources.make:
        Remove IDL files.

        * Modules/notifications/DOMWindowNotifications.cpp: Removed.
        * Modules/notifications/DOMWindowNotifications.h: Removed.
        * Modules/notifications/DOMWindowNotifications.idl: Removed.
        * Modules/notifications/NotificationCenter.cpp: Removed.
        * Modules/notifications/NotificationCenter.h: Removed.
        * Modules/notifications/NotificationCenter.idl: Removed.
        * Modules/notifications/NotificationClient.h:
        * Modules/notifications/NotificationController.cpp:
        * Modules/notifications/NotificationController.h:
        * Modules/notifications/WorkerGlobalScopeNotifications.cpp: Removed.
        * Modules/notifications/WorkerGlobalScopeNotifications.h: Removed.
        * Modules/notifications/WorkerGlobalScopeNotifications.idl: Removed.
        * Modules/notifications/Notification.idl:
        * Modules/notifications/Notification.cpp:
        * Modules/notifications/Notification.h:
        * dom/EventTargetFactory.in:
        * page/DOMWindow.cpp:
        * workers/WorkerThread.h:
        Remove code legacy Notification code. Replace use of NotificationCenter with direct
        calls to the NotificationClient.

2017-05-04  Antti Koivisto  <antti@apple.com>

        REGRESSION (Safari 10.1): When 'transition' contains -ms-transform, transform-origin is also transitioned
        https://bugs.webkit.org/show_bug.cgi?id=171250
        <rdar://problem/31827243>

        Reviewed by Geoffrey Garen.

        We were mapping unknown properties to 'all' animation. With this patch we ignore them instead.
        The patch also implements roundtripping of unknown properties via CSSOM, matching Blink and Gecko.

        Test: transitions/transition-unknown-property-ignore.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createTransitionPropertyValue):

            Return the correct name for unknown properties.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationProperty):

            Map any unknown property to AnimateUnknownProperty mode instead of falling back to the default of AnimateAll.
            Save the unknown property name so we can roundtrip it properly.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):

            Ignore AnimateUnknownProperty like AnimateNone.

        * platform/animation/Animation.h:
        (WebCore::Animation::unknownProperty):
        (WebCore::Animation::setUnknownProperty):

2017-05-04  Chris Dumez  <cdumez@apple.com>

        Clean up MutationRecord.idl
        https://bugs.webkit.org/show_bug.cgi?id=171685

        Reviewed by Sam Weinig.

        Clean up MutationRecord.idl to match the specification:
        - https://dom.spec.whatwg.org/#mutationrecord

        There is no Web-facing behavior change.

        * dom/MutationRecord.idl:

2017-05-04  Chris Dumez  <cdumez@apple.com>

        Reformat / clean up Event.idl
        https://bugs.webkit.org/show_bug.cgi?id=171675

        Reviewed by Sam Weinig.

        Reformat / clean up Event.idl to match the latest spec more closely:
        - https://dom.spec.whatwg.org/#interface-event

        There is no web-facing behavior change, except for properties being
        enumerated in a slightly different order.

        * dom/Event.idl:

2017-05-04  Daniel Bates  <dabates@apple.com>

        Cleanup: Extract CachedScript::mimeTypeAllowedByNosniff() into a common function
        https://bugs.webkit.org/show_bug.cgi?id=171678

        Reviewed by Andy Estes.

        Extract CachedScript::mimeTypeAllowedByNosniff() into a common function that can
        be shared by LoadableClassicScript and WorkerScriptLoader.

        No functionality was changed. So, no new tests.

        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished): Modified to use WebCore::isScriptAllowedByNosniff().
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::mimeType): Deleted; incorporated into WebCore::isScriptAllowedByNosniff().
        (WebCore::CachedScript::mimeTypeAllowedByNosniff): Deleted; incorporated into WebCore::isScriptAllowedByNosniff().
        * loader/cache/CachedScript.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isScriptAllowedByNosniff): Added. Note that it is sufficient to extract the MIME type
        as-is and query the MIME type registry because the MIME type registry performs look ups case-insensitively.
        * platform/network/ResourceResponseBase.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveResponse): Modified to use WebCore::isScriptAllowedByNosniff().
        (WebCore::mimeTypeAllowedByNosniff): Deleted.

2017-05-04  Sam Weinig  <sam@webkit.org>

        Make the [EnabledBySetting] extended attribute work for any attribute or operation on a prototype
        https://bugs.webkit.org/show_bug.cgi?id=171588

        Reviewed by Dean Jackson.

        * bindings/js/JSDOMIterator.h:
        (WebCore::JSDOMIterator::createPrototype):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDOMWrapperCache.h:
        (WebCore::getDOMStructure):
        (WebCore::getDOMPrototype):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        Update to account for createPrototype and prototype taking the global object by reference.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsSettingsCheckForPrototypeProperty):
        Add predicate to determine if an interface has any settings enabled properties on the prototype,
        needed to determine if we should pass the global object to finishCreation.

        (GenerateHeader):
        Update signature of both createPrototype and prototype to take JSDOMGlobalObject& rather than
        a JSC::JSGlobalObject*, this allows us to pass the more specific type to the prototype constructor,
        and access the ScriptExecutionContext for the Settings.

        (GeneratePropertiesHashTable):
        Update to return, via out parameter, arrays with the attributes and operations that specify EnabledBySetting. This
        mimics the model used for RuntimeEnabledFeatures.

        (GenerateImplementation):
        In {Class}Prototype::finishCreation, add code to check settings to see if an attribute or operation should be enabled,
        and if it shouldn't remove it from the object. This, again, is modeled on RuntimeEnabledFeatures.

        (GeneratePrototypeDeclaration):
        Update signatures to take JSDOMGlobalObject& and specialize finishCreation to take one if there are any properties
        that require settings to enable.

        (GenerateConstructorHelperMethods):
        Update for new signature of prototype(...).

        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        * bindings/scripts/test/JS/JSInterfaceName.h:
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSMapLike.h:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.h:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.h:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestIterable.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.h:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        Update test results for new test values and changes in signatures to pass JSDOMGlobalObject.

        * bindings/scripts/test/TestObj.idl:
        Add tests for [EnableBySetting] for attributes and operations.

        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:
        * inspector/CommandLineAPIHost.cpp:
        Update createPrototype function to take the global object by reference.

2017-05-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow host application to enable/disable media capture
        https://bugs.webkit.org/show_bug.cgi?id=171292
        <rdar://problem/31821492>

        Reviewed by Jer Noble.

        No new layout tests, added an API test instead.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::endStream): New, stop all tracks.
        * Modules/mediastream/MediaStream.h:

        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::unregisterStream): Minor cleanup.
        (WebCore::MediaStreamRegistry::forEach): New, call the lambda with each stream.
        (WebCore::MediaStreamRegistry::MediaStreamRegistry): Deleted, unused.
        * Modules/mediastream/MediaStreamRegistry.h:

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::stopTrack): Add parameter so caller can specify if an 'ended' 
        event should be sent or not.
        (WebCore::MediaStreamTrack::trackMutedChanged): Don't post an event if the track has ended.
        * Modules/mediastream/MediaStreamTrack.h:

        * dom/Document.cpp:
        (WebCore::Document::stopMediaCapture): Stop all streams in the document.
        * dom/Document.h:

        * page/Page.cpp:
        (WebCore::Page::stopMediaCapture): Stop all streams.
        * page/Page.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Display a black frame
        when the stream ends.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Signal a characteristics
        change to HTMLMediaElement refresh state.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::stopProducingData): Don't return early if the session isn't 
        running, we always need to clear m_session on iOS.

2017-05-04  Zalan Bujtas  <zalan@apple.com>

        Should never hit layout while updating the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=171643

        Reviewed by Antti Koivisto.

        Laying out a half-baked render tree is not a great idea. Especially considering
        that layout (sadly) can mutate the render tree.  

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2017-05-04  Daniel Bates  <dabates@apple.com>

        importScripts() should respect X-Content-Type-Options: nosniff
        https://bugs.webkit.org/show_bug.cgi?id=171248
        <rdar://problem/31819023>

        Reviewed by Andy Estes.

        Do not load a worker script if it has the HTTP response header "X-Content-Type-Options: nosniff"
        and its Content-type header is not an allowed JavaScript script mime type. This behavior follows
        from <https://html.spec.whatwg.org/multipage/webappapis.html#fetch-a-classic-worker-imported-script> (3 May 2017),
        <https://fetch.spec.whatwg.org/#concept-fetch> (2 May 2017), and <https://fetch.spec.whatwg.org/#concept-main-fetch>.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::mimeTypeAllowedByNosniff): Added.
        (WebCore::WorkerScriptLoader::didReceiveResponse): Mark the load as failed if the response
        is not allowed by X-Content-Type-Options: nosniff.

2017-05-04  Dave Hyatt  <hyatt@apple.com>

        REGRESSION(STP): rgb() with calc() containing variables doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=169939

        Reviewed by Zalan Bujtas.

        Added new test in fast/css/variables.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        Treat floats in calcs as integers when we can.

2017-05-04  Commit Queue  <commit-queue@webkit.org>

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

        FTBFS for iOS due to missing WebPageProxy::stopMediaCapture()
        implementation. (Requested by ddkilzer on #webkit).

        Reverted changeset:

        "[MediaStream] Allow host application to enable/disable media
        capture"
        https://bugs.webkit.org/show_bug.cgi?id=171292
        http://trac.webkit.org/changeset/216172

2017-05-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r215686): Incremental reads from SharedBuffer are wrong after r215686
        https://bugs.webkit.org/show_bug.cgi?id=171602

        Reviewed by Michael Catanzaro.

        In TextTrackLoader::processNewCueData() and PNGImageReader::decode() we changed the patter to read data from a
        SharedBuffer at a given offset. The new pattern is not correct, because it assumes the whole segment is always
        read, and the new offset is not correct when that's not the case. This has broken the rendering of png images in
        the GTK+ port, only the first bytes are correctly decoded and drawn, but not the rest of the image.

        Fixes: editing/pasteboard/paste-image-using-image-data.html

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):

2017-05-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow host application to enable/disable media capture
        https://bugs.webkit.org/show_bug.cgi?id=171292
        <rdar://problem/31821492>

        Reviewed by Jer Noble.

        No new layout tests, added an API test instead.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::endStream): New, stop all tracks.
        * Modules/mediastream/MediaStream.h:

        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::unregisterStream): Minor cleanup.
        (WebCore::MediaStreamRegistry::forEach): New, call the lambda with each stream.
        (WebCore::MediaStreamRegistry::MediaStreamRegistry): Deleted, unused.
        * Modules/mediastream/MediaStreamRegistry.h:

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::stopTrack): Add parameter so caller can specify if an 'ended' 
        event should be sent or not.
        (WebCore::MediaStreamTrack::trackMutedChanged): Don't post an event if the track has ended.
        * Modules/mediastream/MediaStreamTrack.h:

        * dom/Document.cpp:
        (WebCore::Document::stopMediaCapture): Stop all streams in the document.
        * dom/Document.h:

        * page/Page.cpp:
        (WebCore::Page::stopMediaCapture): Stop all streams.
        * page/Page.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Display a black frame
        when the stream ends.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Signal a characteristics
        change to HTMLMediaElement refresh state.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::stopProducingData): Don't return early if the session isn't 
        running, we always need to clear m_session on iOS.

2017-05-03  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove all statistics for modifiedSince website data removals
        https://bugs.webkit.org/show_bug.cgi?id=171584
        <rdar://problem/24702576>

        Reviewed by Brent Fulgham.

        Test: http/tests/loading/resourceLoadStatistics/clear-in-memory-and-persistent-store-one-hour.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::clearInMemoryAndPersistentStore):
            Now clears all regardless of the modifiedSince parameter's value.

2017-05-03  Andy Estes  <aestes@apple.com>

        Try to fix the macOS Public SDK build
        https://bugs.webkit.org/show_bug.cgi?id=171635
        <rdar://problem/31812751>

        Unreviewed because the commit queue told me to say this.

        * platform/spi/cocoa/AVKitSPI.h:

2017-05-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: aria-rowspan value should be ignored if td/th rowspan value is provided
        https://bugs.webkit.org/show_bug.cgi?id=171214

        Reviewed by Chris Fleizach.

        Return -1 in AccessibilityTableCell::ariaColumnSpan() and ariaRowSpan() if the
        cell element has an explicit value for the native host language's span attribute.
        Add checks to AccessibilityTableCell::columnIndexRange() and rowIndexRange() so
        that we prefer an author-provided ARIA span value over an implicit host-language
        span value. Similarly, add checks to AccessibilityARIAGridCell::columnIndexRange()
        and rowIndexRange() so that we fall back on implicit host-language span values
        when there is no author-provided ARIA span value and the ARIA cell is associated
        with a cell element.

        Test: accessibility/aria-cellspans-with-native-cellspans.html

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::ariaRowSpanWithRowIndex):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        (WebCore::AccessibilityTableCell::ariaColumnSpan):
        (WebCore::AccessibilityTableCell::ariaRowSpan):

2017-05-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r216160 and r216161.
        https://bugs.webkit.org/show_bug.cgi?id=171640

        These changes broke the iOS build. (Requested by mlewis13 on
        #webkit).

        Reverted changesets:

        "[MediaStream] Allow host application to enable/disable media
        capture"
        https://bugs.webkit.org/show_bug.cgi?id=171292
        http://trac.webkit.org/changeset/216160

        "[MediaStream] Allow host application to enable/disable media
        capture"
        https://bugs.webkit.org/show_bug.cgi?id=171292
        http://trac.webkit.org/changeset/216161

2017-05-03  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Allow host application to enable/disable media capture
        https://bugs.webkit.org/show_bug.cgi?id=171292
        <rdar://problem/31821492>

        Reviewed by Jer Noble.

        No new layout tests, added an API test instead.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::endStream): New, stop all tracks.
        * Modules/mediastream/MediaStream.h:

        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::unregisterStream): Minor cleanup.
        (WebCore::MediaStreamRegistry::forEach): New, call the lambda with each stream.
        (WebCore::MediaStreamRegistry::MediaStreamRegistry): Deleted, unused.
        * Modules/mediastream/MediaStreamRegistry.h:

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::stopTrack): Add parameter so caller can specify if an 'ended' 
        event should be sent or not.
        (WebCore::MediaStreamTrack::trackMutedChanged): Don't post an event if the track has ended.
        * Modules/mediastream/MediaStreamTrack.h:

        * dom/Document.cpp:
        (WebCore::Document::stopMediaCapture): Stop all streams in the document.
        * dom/Document.h:

        * page/Page.cpp:
        (WebCore::Page::stopMediaCapture): Stop all streams.
        * page/Page.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Display a black frame
        when the stream ends.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Signal a characteristics
        change to HTMLMediaElement refresh state.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::stopProducingData): Don't return early if the session isn't 
        running, we always need to clear m_session on iOS.

2017-05-03  Zalan Bujtas  <zalan@apple.com>

        SearchInputType could end up with a mismatched renderer.
        https://bugs.webkit.org/show_bug.cgi?id=171547
        <rdar://problem/31935047>

        Reviewed by Antti Koivisto.

        Normally we've got the correct renderer by the time we call into SearchInputType.
        However, since HTMLInputElement::updateType() eagerly updates the type while the associated renderers are done lazily
        (so we don't get them updated until after the next tree update), we could actually end up
        with a mismatched renderer (e.g. through form submission).

        Test: fast/forms/change-input-type-and-submit-form-crash.html

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::addSearchResult):
        (WebCore::SearchInputType::didSetValueByUserEdit):

2017-05-03  Jer Noble  <jer.noble@apple.com>

        Make the VPIO audio unit a singleton, shared between multiple CaptureSources
        https://bugs.webkit.org/show_bug.cgi?id=171622

        Reviewed by Eric Carlson.

        Move the implemnetation of CoreAudioCaptureSource into a shared singleton class, CoreAudioSharedUnit,
        which will send audio to each of it's client CoreAudioCaptureSources. The first registered client will
        define the settings used by the shared unit.

        Drive-by fixes: Fix up setUseAVFoundationAudioCapture() to always accept the first value set.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::isProducingData):
        (WebCore::CoreAudioSharedUnit::microphoneFormat):
        (WebCore::CoreAudioSharedUnit::singleton):
        (WebCore::CoreAudioSharedUnit::addClient):
        (WebCore::CoreAudioSharedUnit::removeClient):
        (WebCore::CoreAudioSharedUnit::addEchoCancellationSource):
        (WebCore::CoreAudioSharedUnit::removeEchoCancellationSource):
        (WebCore::CoreAudioSharedUnit::preferredIOBufferSize):
        (WebCore::CoreAudioSharedUnit::setupAudioUnits):
        (WebCore::CoreAudioSharedUnit::configureMicrophoneProc):
        (WebCore::CoreAudioSharedUnit::configureSpeakerProc):
        (WebCore::CoreAudioSharedUnit::checkTimestamps):
        (WebCore::CoreAudioSharedUnit::provideSpeakerData):
        (WebCore::CoreAudioSharedUnit::speakerCallback):
        (WebCore::CoreAudioSharedUnit::processMicrophoneSamples):
        (WebCore::CoreAudioSharedUnit::microphoneCallback):
        (WebCore::CoreAudioSharedUnit::cleanupAudioUnits):
        (WebCore::CoreAudioSharedUnit::startProducingData):
        (WebCore::CoreAudioSharedUnit::stopProducingData):
        (WebCore::CoreAudioSharedUnit::suspend):
        (WebCore::CoreAudioSharedUnit::defaultInputDevice):
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::factory):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::addEchoCancellationSource):
        (WebCore::CoreAudioCaptureSource::removeEchoCancellationSource):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        (WebCore::CoreAudioCaptureSource::audioSourceProvider):
        (WebCore::CoreAudioCaptureSource::preferredSampleRate): Deleted.
        (WebCore::CoreAudioCaptureSource::preferredIOBufferSize): Deleted.
        (WebCore::CoreAudioCaptureSource::configureMicrophoneProc): Deleted.
        (WebCore::CoreAudioCaptureSource::configureSpeakerProc): Deleted.
        (WebCore::CoreAudioCaptureSource::checkTimestamps): Deleted.
        (WebCore::CoreAudioCaptureSource::provideSpeakerData): Deleted.
        (WebCore::CoreAudioCaptureSource::speakerCallback): Deleted.
        (WebCore::CoreAudioCaptureSource::processMicrophoneSamples): Deleted.
        (WebCore::CoreAudioCaptureSource::microphoneCallback): Deleted.
        (WebCore::CoreAudioCaptureSource::cleanupAudioUnits): Deleted.
        (WebCore::CoreAudioCaptureSource::defaultInputDevice): Deleted.
        (WebCore::CoreAudioCaptureSource::setupAudioUnits): Deleted.
        (WebCore::CoreAudioCaptureSource::suspend): Deleted.
        (WebCore::CoreAudioCaptureSource::resume): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::setUseAVFoundationAudioCapture):

2017-05-03  Jer Noble  <jer.noble@apple.com>

        getUserMedia() fails because devices list is empty / inactive
        https://bugs.webkit.org/show_bug.cgi?id=171626

        Reviewed by Eric Carlson.

        When creating a AVAudioSessionCaptureDevice, set the device's enabled state to true if the port description
        has any items in its dataSources property (which is the best analogue to "isActive" we have in AVAudioSession).

        Also, when creating the generic list of CaptureDevices, use the copy constructor to ensure the enabled state
        gets copied to the new generic device.

        * platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:
        (WebCore::AVAudioSessionCaptureDevice::create):
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices):

2017-05-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Implement the imageready event to reliably test the async image decoding
        https://bugs.webkit.org/show_bug.cgi?id=171016

        Reviewed by Simon Fraser.

        The event will be fired for each client of the image. Firing the event
        will happen after finishing the decoding and repainting the client.

        Existing tests will be modified in a separate patch to use this event.

        * dom/Element.cpp:
        (WebCore::Element::dispatchWebKitImageReadyEventForTesting):
        * dom/Element.h:
        * page/Settings.in:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::imageFrameAvailable):

2017-05-03  Tim Horton  <timothy_horton@apple.com>

        Maintain interaction information URL as a URL, not a string
        https://bugs.webkit.org/show_bug.cgi?id=171623

        Reviewed by Simon Fraser.

        No new tests, not a behavior change.

        * platform/URL.h:

2017-05-03  Yoav Weiss  <yoav@yoav.ws>

        Link preload HTMLPreloadScanner support
        https://bugs.webkit.org/show_bug.cgi?id=170747

        Reviewed by Youenn Fablet.

        Test: http/tests/preload/preloadscanner_download_resources.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner): Initialize link preload flag.
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest): Create a request only if the type is known (so ignore
        preloads with unknown type).
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Add handling for link preload and the `as` attribute.
        (WebCore::TokenPreloadScanner::StartTagScanner::relAttributeIsStyleSheet): Get LinkRelAttribute as input.
        (WebCore::TokenPreloadScanner::StartTagScanner::resourceType): Return an std::optional, in case the preload type is unknown.
        (WebCore::TokenPreloadScanner::StartTagScanner::shouldPreload): Return true for the link preload case.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload): Return the resource rather than a nullptr if it's already in m_preloads.

2017-05-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        YouTube user agent quirk breaks new YouTube
        https://bugs.webkit.org/show_bug.cgi?id=171603

        Reviewed by Carlos Garcia Campos.

        Our user agent quirk to make YouTube 360 work breaks the new YouTube UI, causing it to
        attempt to use the obsolete custom elements v0 API. WebKit only supports the v1 API. We
        have to remove this quirk.

        Note this does not affect Safari as Apple ports don't use our user agent quirks.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):

2017-05-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: 404 Image Load does not appear as a failure in Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=171587
        <rdar://problem/13222846>

        Reviewed by Matt Baker.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        (WebCore::prepareCachedResourceBuffer): Deleted.
        Inline the function to make this less confusing.

        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        Treat a DecodeError as a failure.

2017-05-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Async image decoding should be disabled for snapshots, printing and preview
        https://bugs.webkit.org/show_bug.cgi?id=171467
 
        Reviewed by Simon Fraser.
 
        Asynchronous image decoding should only be used for window display where
        RenderElements can be repainted and painted. For cases where there is only
        one chance to draw the image, synchronous decoding should be used. 

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):

2017-05-03  Nan Wang  <n_wang@apple.com>

        AX: VO skips cells after cell with aria-colspan
        https://bugs.webkit.org/show_bug.cgi?id=171579

        Reviewed by Chris Fleizach.

        We should consider the previous cells' column span value when
        calculating the column index.

        Test: accessibility/mac/aria-grid-column-span.html

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):

2017-05-03  Jiewen Tan  <jiewen_tan@apple.com>

        ASSERTION FAILED: m_scriptExecutionContext->isContextThread() seen with LayoutTest crypto/workers/crypto-random-values-limits-worker.html
        https://bugs.webkit.org/show_bug.cgi?id=171462
        <rdar://problem/31906859>

        Reviewed by Brent Fulgham.

        Covered by existing tests.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        Clear Crypto early in destruction since its ContextDestructionObserver
        destruction makes checks about the WorkerThread.

2017-05-03  Zalan Bujtas  <zalan@apple.com>

        RenderSearchField should not use isTextField() in SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT
        https://bugs.webkit.org/show_bug.cgi?id=171608

        Reviewed by Simon Fraser.

        isTextField() is true for any generic single line text control.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSearchField):
        * rendering/RenderSearchField.h:

2017-05-03  Frederic Wang  <fwang@igalia.com>

        Remove ScrollingCoordinator::supportsFixedPositionLayers()
        https://bugs.webkit.org/show_bug.cgi?id=171557

        Reviewed by Simon Fraser.

        No new tests, behavior is not changed.

        * page/FrameView.cpp:
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::supportsFixedPositionLayers): Deleted.
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        (): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2017-05-03  Chris Dumez  <cdumez@apple.com>

        Use PassRefPtr less in CompositeEditCommand
        https://bugs.webkit.org/show_bug.cgi?id=171590

        Reviewed by Sam Weinig.

        Use PassRefPtr less in CompositeEditCommand.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::hasNoAttributeOrOnlyStyleAttribute):
        (WebCore::isStyleSpanOrSpanWithOnlyStyleAttribute):
        (WebCore::isSpanWithoutAttributesOrUnstyledStyleSpan):
        (WebCore::isEmptyFontTag):
        (WebCore::ApplyStyleCommand::doApply):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::dummySpanAncestorForNode):
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun):
        (WebCore::ApplyStyleCommand::removeConflictingInlineStyleFromRun):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::replaceWithSpanOrRemoveIfWithoutAttributes):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::shouldSplitTextElement):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::addBlockStyle):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::shouldRemoveInlineStyleFromElement):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::mergeIdenticalElements):
        (WebCore::CompositeEditCommand::insertTextIntoNode):
        (WebCore::CompositeEditCommand::deleteTextFromNode):
        (WebCore::CompositeEditCommand::replaceTextInNode):
        (WebCore::CompositeEditCommand::replaceSelectedTextInNode):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::removeNodeAttribute):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring):
        (WebCore::CompositeEditCommand::prepareWhitespaceAtPositionForSplit):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::removePlaceholderAt):
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::DeleteFromTextNodeCommand):
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        (WebCore::DeleteFromTextNodeCommand::getNodesInCommand):
        * editing/DeleteFromTextNodeCommand.h:
        (WebCore::DeleteFromTextNodeCommand::create):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::deleteTextFromNode):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        * editing/DeleteSelectionCommand.h:
        * editing/EditingAllInOne.cpp:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode):
        (WebCore::elementMatchesAndPropertyIsNotInInlineStyleDecl):
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        (WebCore::styleFromMatchedRulesForElement):
        (WebCore::EditingStyle::mergeStyleFromRules):
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        (WebCore::EditingStyle::removePropertiesInElementDefaultStyle):
        * editing/EditingStyle.h:
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand):
        (WebCore::InsertIntoTextNodeCommand::getNodesInCommand):
        * editing/InsertIntoTextNodeCommand.h:
        (WebCore::InsertIntoTextNodeCommand::create):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::mergeWithNeighboringLists):
        (WebCore::InsertListCommand::listifyParagraph):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::performOverwrite):
        (WebCore::InsertTextCommand::doApply):
        (WebCore::InsertTextCommand::insertTab):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::MergeIdenticalElementsCommand):
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        (WebCore::MergeIdenticalElementsCommand::getNodesInCommand):
        * editing/MergeIdenticalElementsCommand.h:
        (WebCore::MergeIdenticalElementsCommand::create):
        * editing/RemoveCSSPropertyCommand.cpp: Removed.
        * editing/RemoveCSSPropertyCommand.h: Removed.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):
        (WebCore::styleFromMatchedRulesAndInlineDecl):
        (WebCore::createMarkupInternal):

2017-05-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Treat cells with ARIA table cell properties as cells
        https://bugs.webkit.org/show_bug.cgi?id=171178

        Reviewed by Chris Fleizach.

        Add the following checks to heuristics in AccessibilityTable::isDataTable():
        1. If the author has provided a valid aria-rowcount or aria-colcount value on
           the table element, expose it as a data table.
        2. If the author has provided a valid aria-colindex or aria-rowindex on the
           cell element, expose it as a data table.
        3. If the author has provided a valid aria-rowindex on the row element, expose
           it as a data table.
        4. If the author has provided a value for aria-colspan or aria-rowspan on a cell,
           expose it as a data table (even though we are supposed to ignore the value for
           the purpose of exposing the span via platform accessibility APIs)

        Remove the heuristic that a table with only one cell is "not a good AXTable candidate."
        It prevents us from ever doing the above checks.

        Test: accessibility/minimal-table-with-aria-is-data-table.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):

2017-05-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Cairo] Handle extended colors in gradients
        https://bugs.webkit.org/show_bug.cgi?id=171596

        Reviewed by Michael Catanzaro.

        Check if every gradient color step is an extended color and use asExtended() instead of getRGBA() in such case.

        Fixes: css3/color/gradients.html

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformGradient):

2017-05-03  Daniel Bates  <dabates@apple.com>

        Abandon the current load once the provisional loader detaches from the frame
        https://bugs.webkit.org/show_bug.cgi?id=171577
        <rdar://problem/31581227>

        Reviewed by Brent Fulgham and Brady Eidson.

        We detach all child frames as part of setting our document loader to the provisional
        document loader when committing a load for a frame. Detaching child frames invokes
        the unload event handler on the child frames that can run arbitrary JavaScript script.
        Among other things, such script can initiate a new load in the frame whose current
        load is being committed. We should stop processing the current load as soon as we
        detect that updating our document loader has started a new provisional load.

        Test: fast/loader/inner-iframe-loads-data-url-into-parent-on-unload-crash.html

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

2017-05-03  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove out-of-date comment and null check from DocumentLoader::detachFromFrame()
        https://bugs.webkit.org/show_bug.cgi?id=171604

        Reviewed by Brady Eidson.

        We no longer want to passively allow DocumentLoader::detachFromFrame() to be called twice.
        It does not make sense to be called twice and should never be called twice. A release assert
        in DocumentLoader::cancelPolicyCheckIfNeeded() (added in r187558) called by DocumentLoader::detachFromFrame()
        enforces this invariant. Therefore we can remove the null check of DocumentLoader::m_frame
        and the comment that explains the purpose of this null check from DocumentLoader::detachFromFrame().

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::detachFromFrame):

2017-05-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed attempt to fix the Windows build after r216117.
        https://bugs.webkit.org/show_bug.cgi?id=171601

        * css/CSSAllInOne.cpp:

2017-05-03  Antti Koivisto  <antti@apple.com>

        Rename StyleInvalidationAnalysis to Style::Invalidator
        https://bugs.webkit.org/show_bug.cgi?id=171601

        Reviewed by Žan Doberšek.

        Also move it to the 'style' directory.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleInvalidationAnalysis.cpp: Removed.
        * css/StyleInvalidationAnalysis.h: Removed.
        * dom/ExtensionStyleSheets.cpp:
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::AttributeChangeInvalidation::invalidateDescendants):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::invalidateDescendantStyle):
        * style/StyleInvalidator.cpp: Copied from Source/WebCore/css/StyleInvalidationAnalysis.cpp.
        (WebCore::Style::Invalidator::Invalidator):
        (WebCore::Style::Invalidator::invalidateIfNeeded):
        (WebCore::Style::Invalidator::invalidateStyleForTree):
        (WebCore::Style::Invalidator::invalidateStyle):
        (WebCore::shouldDirtyAllStyle): Deleted.
        (WebCore::StyleInvalidationAnalysis::StyleInvalidationAnalysis): Deleted.
        (WebCore::StyleInvalidationAnalysis::invalidateIfNeeded): Deleted.
        (WebCore::StyleInvalidationAnalysis::invalidateStyleForTree): Deleted.
        (WebCore::StyleInvalidationAnalysis::invalidateStyle): Deleted.
        * style/StyleInvalidator.h: Copied from Source/WebCore/css/StyleInvalidationAnalysis.h.
        (WebCore::StyleInvalidationAnalysis::dirtiesAllStyle): Deleted.
        (WebCore::StyleInvalidationAnalysis::hasShadowPseudoElementRulesInAuthorSheet): Deleted.
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):
        (WebCore::Style::Scope::analyzeStyleSheetChange):

2017-05-02  Andrew Gold  <agold@apple.com>

        Typo in AVAudioSessionCaptureDeviceManager.mm
        https://bugs.webkit.org/show_bug.cgi?id=171572

        Reviewed by Jer Noble.

        We attempt to call +[AVAudioSession sharedSession], but the actual method is 
        called +[AVAudioSession sharedInstance].

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices):

2017-05-02  Simon Fraser  <simon.fraser@apple.com>

        Improve scrolling tree logging
        https://bugs.webkit.org/show_bug.cgi?id=171574

        Reviewed by Tim Horton.

        Make a call to showScrollingStateTree() print debugging-related information like node and layer IDs.
        Required fixing scrolling state tree nodes to respect ScrollingStateTreeAsTextBehavior, and fixing
        fixed and sticky nodes to call super.

        Also enhance compositing logging to show layer IDs, and to log for layer scrolling tree registration.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollingStateTreeAsText):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::dumpProperties):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::dumpProperties):
        (WebCore::ScrollingStateNode::scrollingStateTreeAsText):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::dumpProperties):
        * page/scrolling/ScrollingStateTree.cpp:
        (showScrollingStateTree):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2017-05-02  Daniel Bates  <dabates@apple.com>

        Using StringView.split() instead of String.split() in some places
        https://bugs.webkit.org/show_bug.cgi?id=170925

        Reviewed by Darin Adler and Sam Weinig.

        Replace some uses of String.split() with StringView.split() (added in r211087) as the latter
        avoids the need to allocate an intermediary Vector of substrings. Instead StringView.split()
        returns an iterator for traversing the substrings.

        No functionality changed. So, no new tests.

        * accessibility/AccessibilityObject.cpp: Convert some typedefs to modern C++ using declarations.
        (WebCore::AccessibilityObject::ariaRoleToWebCoreRole): Modified code to use StringView.split().
        (WebCore::AccessibilityObject::elementsFromAttribute): Ditto.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getElementById): Added.
        * dom/TreeScope.h:
        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::LinkRelAttribute): Modified code to use StringView.split().
        * html/parser/XSSAuditor.cpp:
        (WebCore::semicolonSeparatedValueContainsJavaScriptURL): Ditto.
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::createSession): Ditto.
        * platform/network/CacheValidation.cpp:
        (WebCore::collectVaryingRequestHeaders): Simplify code by using the String.split(UChar, Vector<String>&) overload.
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeyTimes): Modified code to use StringView.split().
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Ditto.
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Ditto.
        (WebCore::Internals::setMediaElementRestrictions): Ditto.
        (WebCore::Internals::setAudioContextRestrictions): Ditto.
        (WebCore::Internals::setPageMuted): Ditto.
        * testing/Internals.h:

2017-05-02  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Drop coordinated surfaces from the compositing thread as soon as possible
        https://bugs.webkit.org/show_bug.cgi?id=171544

        Reviewed by Žan Doberšek.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        Remove atlasesToRemove from the GraphicsState. It is not a commit
        state anymore.

2017-05-02  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Recycle textures while handling tiles
        https://bugs.webkit.org/show_bug.cgi?id=171541

        Reviewed by Žan Doberšek.

        * platform/graphics/texmap/TextureMapperTile.h:
        Modified m_texture as a protected member to avoid unnessary
        refcountings from the CoordinatedBackingStore.
        * platform/graphics/texmap/coordinated/CoordinatedSurface.h:
        Use reference instead of RefPtr to pass BitmapTexture

        No new tests since there should be no change in behavior.

2017-05-02  Zalan Bujtas  <zalan@apple.com>

        Defer AX cache update when text content changes until after layout is finished.
        https://bugs.webkit.org/show_bug.cgi?id=171429
        <rdar://problem/31885984>

        Reviewed by Simon Fraser.

        When the content of the RenderText changes (even as the result of a text-transform change)
        instead of updating the AX cache eagerly (and trigger layout on a half-backed render tree)
        we should just defer it until after the subsequent layout is done. 

        Test: accessibility/crash-while-adding-text-child-with-transform.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::recomputeDeferredIsIgnored):
        (WebCore::AXObjectCache::deferTextChanged):
        (WebCore::AXObjectCache::performDeferredIsIgnoredChange): Deleted.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::deferTextChanged):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::performDeferredIsIgnoredChange): Deleted.
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):

2017-05-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove an extraneous call to dispatch_group_async in WebItemProviderPasteboard.mm
        https://bugs.webkit.org/show_bug.cgi?id=171561

        Reviewed by Tim Horton.

        In -[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:], the lifetime of the dispatch group
        `fileLoadingGroup` is already guarded by dispatch_group_enter/leave calls when beginning and concluding an
        item provider load, respectively. As such, the call to dispatch_group_async serves no purpose and should be removed.

        No new tests, since there is no change in behavior.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:]):

2017-05-02  Youenn Fablet  <youenn@apple.com>

        [LibWebRTC] Set explicitly logging level in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=171562

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::initializePeerConnectionFactoryAndThreads): Setting explictly LibWebRTC logging to Info level for
        debug builds if WebRTC channel is on.

2017-05-02  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Update implementation of aria-orientation
        https://bugs.webkit.org/show_bug.cgi?id=171166

        Reviewed by Chris Fleizach.

        Update AccessibilityRenderObject::orientation() to be consistent with what is
        in the ARIA 1.1 spec. Also add an isTreeGrid() convenience method to be consistent
        with what we do for other roles.

        Test: accessibility/aria-orientation.html

        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::isARIATreeGridRow):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isTreeGrid):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::orientation):

2017-05-02  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION (r211382): Partial right-to-left text runs are painted at an offset (breaks Find indicators, Look Up, and custom ::selection style)
        https://bugs.webkit.org/show_bug.cgi?id=169517
        <rdar://problem/30652443>

        Reviewed by Dean Jackson.

        FontCascade::getGlyphsAndAdvancesForComplexText() is tasked with calculating paint advances for a
        subrange of RTL text. It does this by creating a ComplexTextController, telling it to iterate to
        the beginning of the subrange (outputting to a GlyphBuffer), then telling it to iterate to the end
        of the subrange (outputting to another GlyphBuffer). Because the text is RTL, the sum of the
        advances gathered so far is the distance from the right edge of the text to the left edge of the
        subrange (because we advance in logical order). Therefore, the x-coordinate we are at now is the
        total width minus the sum of both of the GlyphBuffers. For some reason, when I wrote this code I
        forgot to add in the contribution from the first GlyphBuffer. Unfortunately, this particular
        codepath is rarely hit in practice and completely untested, which made me miss it when I wrote it.

        Test: fast/text/complex-text-selection.html

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText):

2017-05-02  Chris Dumez  <cdumez@apple.com>

        [macOS] Flaky Crash under EventTarget::fireEventListeners on imported/blink/paint/deprecatedpaintlayer/non-self-painting-layer-overrides-visibility.html
        https://bugs.webkit.org/show_bug.cgi?id=171406
        <rdar://problem/30945281>

        Reviewed by Eric Carlson.

        I was unfortunately unable to reproduce the flaky crash locally. However, the crash trace
        indicates that one of the EventTarget::scriptExecutionContext() overrides is returning a
        stale ScriptExecutionContext pointer. Since a GenericEventQueue is involved, the EventTarget
        is likely a media-related object. I therefore audited media classes that override
        EventTarget::scriptExecutionContext() and found several that look unsafe. I am fixing those
        by having them override ContextDestructionObserver, instead of having a raw
        ScriptExecutionContext pointer member. This makes sure the pointer gets nulled out whenever
        the scriptexecutioncontext gets destroyed, ensuring that those classes's
        EventTarget::scriptExecutionContext() overrides can never return a stale pointer.

        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::SourceBufferList):
        * Modules/mediasource/SourceBufferList.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        * html/track/TextTrack.h:
        * html/track/TrackListBase.cpp:
        (TrackListBase::TrackListBase):
        * html/track/TrackListBase.h:

2017-05-02  Antti Koivisto  <antti@apple.com>

        Document style resolvers should share user rulesets
        https://bugs.webkit.org/show_bug.cgi?id=171549

        Reviewed by Andreas Kling.

        Large user stylesheets (like those used by ad blockers) can end up using lots of memory if
        a document uses large number of shadow trees. User style is inherently per-document and
        the resulting rulesets can be shared between the document and the shadow trees.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::DocumentRuleSets):
        (WebCore::DocumentRuleSets::userStyle):

            Return per-document user style for shadow trees.

        (WebCore::DocumentRuleSets::collectFeatures):
        * css/DocumentRuleSets.h:
        (WebCore::DocumentRuleSets::setUsesSharedUserStyle):
        (WebCore::DocumentRuleSets::userStyle): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::initializeUserStyle):

            Separate user style initialization from construction.

        * css/StyleResolver.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):

            Don't initialize user style for user agents shadow trees.

2017-05-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Font Loading API specifies font is loaded but sizing of font after load reports inconsistent values
        https://bugs.webkit.org/show_bug.cgi?id=168533

        Reviewed by Zalan Bujtas.

        Previously, we were marking all local() fonts as immediately successful,
        regardless of whether or not they were present on the system. Instead, we
        should use the load() function to make this determination and mark the font
        as failed if it doesn't exist. (This is, after all, the whole point of the
        load() function). This brings us in-line with Firefox's and Chrome's
        behavior.

        Test: fast/text/font-loading-local.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::pump): Remote loading requires the FontSelector,
        but it isn't available for local fonts. Now that load() is called for both
        local and remote fonts, the ASSERT() should be lowered into the load()
        function and scoped to just the case where we have a remote font.
        (WebCore::CSSFontFace::font): Ditto.
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource): Don't immediatley set
        the success/failure state for local fonts.
        (WebCore::CSSFontFaceSource::load): Move loading logic from font() to
        load(). None of this code is new; it just is moved.
        (WebCore::CSSFontFaceSource::font): Delete code moved to load().
        * css/CSSFontFaceSource.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::create):

2017-05-02  Youenn Fablet  <youenn@apple.com>

        Allow media stream based videos with sound to autoplay if the page is already playing sound
        https://bugs.webkit.org/show_bug.cgi?id=171447

        Reviewed by Eric Carlson.

        Test: http/tests/media/autoplay-if-audio-is-playing.html for ensuring non-mediastream based video will not autoplay.
        Manual testing for the autoplay of media stream based videos since such a test should happen without using getUserMedia.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):

2017-05-02  Chris Dumez  <cdumez@apple.com>

        Use PassRefPtr less in editing code
        https://bugs.webkit.org/show_bug.cgi?id=171534

        Reviewed by Geoffrey Garen.

        Use PassRefPtr less in editing code.

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand):
        (WebCore::AppendNodeCommand::getNodesInCommand):
        * editing/AppendNodeCommand.h:
        (WebCore::AppendNodeCommand::create):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::positionToComputeInlineStyleChange):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeBefore):
        (WebCore::CompositeEditCommand::insertNodeAfter):
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::appendNode):
        (WebCore::CompositeEditCommand::moveRemainingSiblingsToNewParent):
        (WebCore::CompositeEditCommand::mergeIdenticalElements):
        (WebCore::CompositeEditCommand::insertNodeAtTabSpanPosition):
        (WebCore::CompositeEditCommand::appendBlockPlaceholder):
        (WebCore::CompositeEditCommand::insertBlockPlaceholder):
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        (WebCore::CompositeEditCommand::insertNewDefaultParagraphElementAt):
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertLineBreakCommand.h:
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::fixOrphanedListChild):
        (WebCore::InsertListCommand::doApplyForSingleParagraph):
        (WebCore::InsertListCommand::unlistifyParagraph):
        (WebCore::InsertListCommand::listifyParagraph):
        * editing/InsertListCommand.h:
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand):
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        (WebCore::InsertNodeBeforeCommand::getNodesInCommand):
        * editing/InsertNodeBeforeCommand.h:
        (WebCore::InsertNodeBeforeCommand::create):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::positionInsideTextNode):
        (WebCore::InsertTextCommand::insertTab):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeBefore):
        (WebCore::ModifySelectionListLevelCommand::insertSiblingNodeRangeAfter):
        (WebCore::ModifySelectionListLevelCommand::appendSiblingNodeRange):
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor):
        (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove):

2017-05-02  Ben Kelly <ben@wanderview.com>

        Set Response.blob() type correctly when body is a ReadableStream.
        https://bugs.webkit.org/show_bug.cgi?id=171489

        Reviewed by Youenn Fablet

        The Fetch API specification requires setting the blob contentType
        using the Content-Type header value, if present.  Currently WebKit
        only sets the type on the FetchBodyConsumer when FetchBody::blob()
        is called.  Unfortunately, this is never called if the body is
        actually a ReadableStream.

        This change allows WebKit to pass the "Consume response's body: from
        stream to blob" case in the WPT response-consume.html test.

        Test: http://w3c-test.org/fetch/api/response/response-consume.html

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::startConsumingStream): Modified to call
        FetchBodyConsumer::setContentType() before processing the stream.

2017-05-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r216069.

        This change broke the build.

        Reverted changeset:

        "Document style resolvers should share user rulesets"
        https://bugs.webkit.org/show_bug.cgi?id=171549
        http://trac.webkit.org/changeset/216069

2017-05-02  Antti Koivisto  <antti@apple.com>

        Document style resolvers should share user rulesets
        https://bugs.webkit.org/show_bug.cgi?id=171549

        Reviewed by Andreas Kling.

        Large user stylesheets (like those used by ad blockers) can end up using lots of memory if
        a document uses large number of shadow trees. User style is inherently per-document and
        the resulting rulesets can be shared between the document and the shadow trees.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::DocumentRuleSets):
        (WebCore::DocumentRuleSets::userStyle):

            Return per-document user style for shadow trees.

        (WebCore::DocumentRuleSets::collectFeatures):
        * css/DocumentRuleSets.h:
        (WebCore::DocumentRuleSets::setUsesSharedUserStyle):
        (WebCore::DocumentRuleSets::userStyle): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::initializeUserStyle):

            Separate user style initialization from construction.

        * css/StyleResolver.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):

            Don't initialize user style for user agents shadow trees.

2017-05-02  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Remove undefined nativeImage method from the ImageBuffer's header
        https://bugs.webkit.org/show_bug.cgi?id=171502

        Unreviewed, remove a dead code accidentally committed in r194630.

        * platform/graphics/ImageBuffer.h: Remove nativeImage method.
        It is accidentally added during a refectorying at r194630, and there is
        no definition for this method.

2017-05-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Dailymotion live stream videos don't play
        https://bugs.webkit.org/show_bug.cgi?id=170767

        Reviewed by Sergio Villar Senin.

        The video shows a message saying that an error occurred and nothing is played. There are actually several
        problems with dailymotion. The main issue is that URLs are redirected by the server, and GStreamer needs to
        know the redirected URL. Once GStreamer knows the redirected URL the error message no longer appears, the video
        starts but it always stops after a few seconds. This is because the source receives an early EOS while still
        downloading the fragments. The reason of the early EOS is because dailymotion sends a wrong Content-Length header,
        something that is expected to happen and we correctly handle that case when receiving the data, by updating the
        size accordingly if the bytes received are longer than the expected content length. This particular case
        doesn't work well with GStreamer automatic EOS handling, which is the default. At some point, GStreamer detects
        that the bytes received are at least the expected ones and emits a GST_EVENT_EOS that the GstUriDownloader
        handles finishing the download early. We should always disable automatic EOS, since we know when EOS actually
        happens and we already call gst_app_src_end_of_stream(). This patch also emits a GST_EVENT_CUSTOM_DOWNSTREAM_STICKY
        event to let GStreamer know about the HTTP headers sent and received.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init): Disable automatic EOS.
        (webKitWebSrcGetProperty): Return the redirected URL in case of redirection.
        (webKitWebSrcStart): Pass the ResourceRequest to the stream clients.
        (webKitWebSrcQueryWithParent): Set the redirected URL in the query in case of redirection.
        (webKitWebSrcSetUri): Clear also the redirected URL when setting a new URI.
        (StreamingClient::StreamingClient): Use GRefPtr for the source and initialize the request too.
        (StreamingClient::~StreamingClient): Remove explicit unref.
        (StreamingClient::createReadBuffer):
        (StreamingClient::handleResponseReceived): Initialize the redirected URL in case of redirection. Create and push
        the HTTP headers event.
        (StreamingClient::handleDataReceived):
        (StreamingClient::handleNotifyFinished):
        (CachedResourceStreamingClient::CachedResourceStreamingClient):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::accessControlCheckFailed):
        (CachedResourceStreamingClient::loadFailed):
        (ResourceHandleStreamingClient::ResourceHandleStreamingClient):
        (ResourceHandleStreamingClient::didFail):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):

2017-05-02  Youenn Fablet  <youenn@apple.com>

        Adding logging to RTCPeerConnection to allow WebRTC application debugging
        https://bugs.webkit.org/show_bug.cgi?id=171531

        Reviewed by Jon Lee.

        No change of behavior.
        This allows easier debugging of webrtc-enabled web pages.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        (WebCore::PeerConnectionBackend::newICECandidate):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::queuedCreateOffer):
        (WebCore::RTCPeerConnection::queuedCreateAnswer):
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):

2017-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash at WebCore::ResourceHandle::clearClient() when streaming live video from dailymotion
        https://bugs.webkit.org/show_bug.cgi?id=169725

        Reviewed by Michael Catanzaro.

        Make ResourceHandleStreamingClient refcounted and add an invalidate method to do the cleanup in the networking
        thread while keeping a reference.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop): Call invalidate before reseting client pointer.
        (webKitWebSrcStart): Ditto.
        (ResourceHandleStreamingClient::ResourceHandleStreamingClient): Remove all cleanup code after the run loop run call.
        (ResourceHandleStreamingClient::~ResourceHandleStreamingClient): Just detach the thread.
        (ResourceHandleStreamingClient::invalidate): Schedule a task on the networking thread to clean up and fiish the
        run loop, protecting this.
        (ResourceHandleStreamingClient::setDefersLoading): Protect this.
        (ResourceHandleStreamingClient::didReceiveResponse): Do nothing if client was invalidated.
        (ResourceHandleStreamingClient::didReceiveBuffer): Ditto.
        (ResourceHandleStreamingClient::didFinishLoading): Ditto.

2017-05-01  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] ECDSA signing and verification support
        https://bugs.webkit.org/show_bug.cgi?id=171103

        Reviewed by Carlos Garcia Campos.

        Implement WebCrypto ECDSA support for configurations that
        are using libgcrypt.

        For signing, the provided data is first hashed with the specified
        digest algorithm and embedded into a data s-expression. It's then
        passed to gcry_pk_sign() along with the private key, returning a
        sig-val s-expression. The r and s parameters are then retrieved from
        that sig-val and their data extracted and concatenated in the output
        Vector<>.

        For verification, the data is again hashed and embedded into a data
        s-expression. The r and s parameters are extracted from the passed-in
        signature Vector<> and embedded into a sig-val s-expression. The data
        and sig-val s-expressions are then passed to gcry_pk_verify() along
        with the public key. The verification succeeds if no error is returned
        and fails if the returned error code is GPG_ERR_BAD_SIGNATURE.

        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        (WebCore::hashCryptoDigestAlgorithm):
        (WebCore::hashAlgorithmName):
        (WebCore::mpiData):
        (WebCore::gcryptSign):
        (WebCore::gcryptVerify):
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):

2017-05-01  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] HKDF bit derivation support
        https://bugs.webkit.org/show_bug.cgi?id=171074

        Reviewed by Michael Catanzaro.

        Implement bit derivation support for the HKDF algorithm for configurations
        that use libgcrypt.

        libgcrypt doesn't provide HKDF support out of the box, so we have to
        implement the two steps manually. In the first one, we retrieve the
        pseudo-random key by using the specified MAC algorithm with the salt data
        as the key and the key data as the input keying material.

        In the expand step, we do the required amount of iterations to derive
        a sufficient amount of data, using the same MAC algorithm with the
        pseudo-random key from the previous step on the data we compose from the
        previous block data, the info data, and the current iteration value. The
        resulting blocks are appended together until they can be clipped to the
        desired output length.

        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::macAlgorithmForHashFunction):
        (WebCore::gcryptDeriveBits):
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):

2017-05-01  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] ECDH bit derivation support
        https://bugs.webkit.org/show_bug.cgi?id=171070

        Reviewed by Michael Catanzaro.

        Implement bit derivation support for the ECDH algorithm for configurations
        that use libgcrypt.

        This is done by retrieving the private key data and wrapping it in a new
        data s-expression. That's then encrypted with the public key, and the
        returned s-expression contains the shared point data. That data is then
        decoded into an EC point, from which the x-coordinate is retrieved. This
        coordinate data is finally our bit derivation result.

        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
        (WebCore::gcryptDerive):
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):

2017-05-01  Youenn Fablet  <youenn@apple.com>

        Ensure RealtimeOutgoingVideoSource sends a black frame when its related source is muted
        https://bugs.webkit.org/show_bug.cgi?id=171497

        Reviewed by Eric Carlson.

        Covered by updated test.

        When the track is being muted or disabled, send a black frame explicitly.
        VideoToolBox sometimes does not output a frame until it receives the other.
        That is why we end up sending two frames, the second asynchronously so that libwebrtc will not skip it.
        Also storing the rotation so that we keep the same rotation for black frames.
        Storing width and height for consistency as well.

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::RealtimeOutgoingVideoSource):
        (WebCore::RealtimeOutgoingVideoSource::setSource):
        (WebCore::RealtimeOutgoingVideoSource::stop):
        (WebCore::RealtimeOutgoingVideoSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingVideoSource::sourceEnabledChanged):
        (WebCore::RealtimeOutgoingVideoSource::setSizeFromSource):
        (WebCore::RealtimeOutgoingVideoSource::sendBlackFrame):
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:

2017-05-01  Joseph Pecoraro  <pecoraro@apple.com>

        Simplify Resource Timing handling of cached resource
        https://bugs.webkit.org/show_bug.cgi?id=171526

        Reviewed by Youenn Fablet.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::reportResourceTiming):
        Use auto in ResourceTiming construction.
        Eliminate an outdated comment.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        We can avoid the checks around the request.origin. It should already
        be the cases we were checking and asserting because of login in
        CachedResourceLoader::prepareFetch.

2017-05-01  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r216024.

        This change caused ios-simulator LayoutTests to exit early
        with assertion failures.

        Reverted changeset:

        "Add audio device change notifications to AudioSession."
        https://bugs.webkit.org/show_bug.cgi?id=171403
        http://trac.webkit.org/changeset/216024

2017-05-01  Timothy Horton  <timothy_horton@apple.com>

        Expose viewport-fit instead of clip-to-safe-area
        https://bugs.webkit.org/show_bug.cgi?id=171503
        <rdar://problem/31918249>

        Reviewed by Simon Fraser.

        Tests: fast/viewport/ios/viewport-fit-auto.html
               fast/viewport/ios/viewport-fit-contain.html
               fast/viewport/ios/viewport-fit-cover.html

        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::buildValues):
        (WebCore::ConstantPropertyMap::updateConstantsForUnobscuredSafeAreaInsets):
        (WebCore::ConstantPropertyMap::didChangeSafeAreaInsets):
        (WebCore::ConstantPropertyMap::updateConstantsForObscuredInsets): Deleted.
        (WebCore::ConstantPropertyMap::didChangeObscuredInsets): Deleted.
        * dom/ConstantPropertyMap.h:
        Retrieve the safe area insets from page, instead of assuming that we should
        just expose the entire obscured inset. Also, do some renames.

        * dom/ViewportArguments.cpp:
        (WebCore::ViewportArguments::resolve):
        (WebCore::parseViewportFitValue):
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::operator==):
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::enableSpeculativeTilingIfNeeded):
        (WebCore::FrameView::calculateExtendedBackgroundMode):
        (WebCore::FrameView::setClipToSafeArea): Deleted.
        * page/FrameView.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::operator<<):
        (WebCore::ViewportConfiguration::description):
        (WebCore::ViewportConfiguration::dump):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::avoidsUnsafeArea):
        (WebCore::ViewportConfiguration::Parameters::Parameters):
        (WebCore::ViewportConfiguration::clipToSafeArea): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootContentLayerClipping):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        Un-do changes to support clip-to-safe-area, and instead implement
        a new viewport-fit argument in the viewport meta tag, which takes
        "auto", "contain", and "cover". "auto" and "contain" cause web content
        to lay out excluding the safe area inset from the layout size, while
        "cover" causes web content to expand into the unsafe area.

        * page/Page.cpp:
        (WebCore::Page::setUnobscuredSafeAreaInsets):
        (WebCore::Page::setObscuredInsets): Deleted.
        * page/Page.h:
        (WebCore::Page::setObscuredInsets):
        (WebCore::Page::unobscuredSafeAreaInsets):
        Keep safe area and obscured insets separately.

2017-05-01  Chris Dumez  <cdumez@apple.com>

        Documents created using DOMParser.parseFromString should inherit their context document's origin / URL
        https://bugs.webkit.org/show_bug.cgi?id=171499

        Reviewed by Sam Weinig.

        Documents created using DOMParser.parseFromString should inherit their context document's
        origin / URL:
        - https://w3c.github.io/DOM-Parsing/#dom-domparser-parsefromstring

        Test: fast/dom/domparser-parsefromstring-origin.html

        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):

2017-05-01  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: ASSERT(!m_startedComposite) fails when recording on non-Cocoa Timeline
        https://bugs.webkit.org/show_bug.cgi?id=171363

        Reviewed by Matt Baker.

        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateIncludingSubframes): Add PLATFORM(COCOA) guard.

2017-05-01  David Kilzer  <ddkilzer@apple.com>

        Stop using strcpy() in fullyQualifiedInfoTableName() from Database.cpp
        <https://webkit.org/b/171517>

        Reviewed by Brady Eidson.

        * Modules/webdatabase/Database.cpp:
        (WebCore::fullyQualifiedInfoTableName): Switch from strcpy() to
        snprintf().

2017-05-01  Chris Fleizach  <cfleizach@apple.com>

        AX: Support time@datetime for verbosity clarification of dates, times, and durations
        https://bugs.webkit.org/show_bug.cgi?id=171498
        <rdar://problem/12985540>

        Reviewed by Joanmarie Diggs.

        Expose the datetime attribute value.

        Test: accessibility/datetime-attribute.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::datetimeAttributeValue):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper accessibilityDatetimeValue]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2017-05-01  Joseph Pecoraro  <pecoraro@apple.com>

        RejectedPromiseTracker should produce better callstacks and avoid capturing callstacks unless there is a debugger/inspector
        https://bugs.webkit.org/show_bug.cgi?id=171416
        <rdar://problem/31899425>

        Reviewed by Saam Barati and Brian Burg.

        Test: inspector/console/message-stack-trace.html

        * dom/RejectedPromiseTracker.cpp:
        (WebCore::UnhandledPromise::UnhandledPromise):
        (WebCore::UnhandledPromise::callStack):
        Switch to RefPtr to allow not capturing the stack.

        (WebCore::createScriptCallStackFromReason):
        Use the VM's lastException if the value in the exception is the
        rejected promise value. Using the Exception call stack is important
        because uncaught exceptions in promise rejections trigger a built-in
        try/catch and re-enter JavaScript before passing the Error through
        to the RejectionTracker. When possible, we don't want to capture the
        new stack originating from the try/catch. Instead, we want the stack
        from before the try/catch when the error was created.

        * dom/ScriptExecutionContext.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection):
        Switch to a pointer since the stack could be empty.

2017-05-01  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r216033.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create):

2017-05-01  Jer Noble  <jer.noble@apple.com>

        Use AVAudioSession to enumerate audio capture devices on iOS
        https://bugs.webkit.org/show_bug.cgi?id=170861
        <rdar://problem/31653658>

        Reviewed by Eric Carlson.

        Hook up the new AVAudioSessionCaptureDeviceManager class to CoreAudioCaptureSource and to the (increasingly ill-named)
        RealtimeMediaSourceCenterMac.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::setUseAVFoundationAudioCapture):

2017-05-01  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Expose values of aria-rowcount, aria-colcount, aria-rowindex, aria-colindex, aria-rowspan, and aria-colspan as object attributes
        https://bugs.webkit.org/show_bug.cgi?id=171496

        Reviewed by Chris Fleizach.

        Expose valid, author-provided values as an object attribute. In order to distinguish
        author-provided values from the default returned by WebCore Accessibility (1), change
        the default return value to -1. We cannot return 0 because the ARIA spec states that
        0 is a valid value for authors to provide to indicate that the cell spans the remaining
        rows in the row group.

        Also removed some legacy code. The "layout-guess" attribute was needed and expected
        as a way for AT-SPI2-based assistive technologies to identify layout tables. WebCore
        Accessibility does not expose tables which are purely for layout as accessible tables,
        and WebKitGtk uses that implementation, thus this attribute is no longer relevant.

        No new tests. Unskipped existing test which is now passing.

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::ariaRowSpanWithRowIndex):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::ariaColumnSpan):
        (WebCore::AccessibilityTableCell::ariaRowSpan):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2017-05-01  Jer Noble  <jer.noble@apple.com>

        Add audio device change notifications to AudioSession.
        https://bugs.webkit.org/show_bug.cgi?id=171403

        Reviewed by Eric Carlson.

        Add notifications to AudioSession which fire when the current input and output audio devices
        change. Also add a notification when audio services are lost (which will only fire on iOS).
        Take this opportunity to make the existing hardwareMutedStateDidChange() notification be
        platform agnostic, to move the outputDeviceSupportsLowPowerMode() code from AudioHardwareListener,
        and to do a few more clean-ups of the AudioSession code.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        * html/HTMLMediaElement.h:
        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::AudioSession):
        * platform/audio/AudioSession.h:
        (WebCore::AudioSession::Observer::hardwareMutedStateDidChange):
        (WebCore::AudioSession::Observer::audioInputDeviceChanged):
        (WebCore::AudioSession::Observer::audioOutputDeviceChanged):
        (WebCore::AudioSession::Observer::audioServicesLost):
        (WebCore::AudioSession::Observer::audioServicesReset):
        (WebCore::AudioSession::MutedStateObserver::~MutedStateObserver): Deleted.
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSessionPrivate::AudioSessionPrivate):
        (WebCore::AudioSession::AudioSession):
        (WebCore::AudioSession::setCategoryOverride):
        (WebCore::AudioSession::categoryOverride):
        (WebCore::AudioSession::isMuted):
        (WebCore::AudioSession::outputDeviceSupportsLowPowerMode):
        (WebCore::AudioSession::addObserver):
        (WebCore::AudioSession::removeObserver):
        * platform/audio/mac/AudioSessionMac.mm: Renamed from Source/WebCore/platform/audio/mac/AudioSessionMac.cpp.
        (WebCore::defaultDevice):
        (WebCore::AudioSessionPrivate::AudioSessionPrivate):
        (WebCore::AudioSession::AudioSession):
        (WebCore::AudioSession::~AudioSession):
        (WebCore::AudioSession::category):
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::categoryOverride):
        (WebCore::AudioSession::setCategoryOverride):
        (WebCore::AudioSession::sampleRate):
        (WebCore::AudioSession::bufferSize):
        (WebCore::AudioSession::numberOfOutputChannels):
        (WebCore::AudioSession::tryToSetActive):
        (WebCore::AudioSession::preferredBufferSize):
        (WebCore::AudioSession::setPreferredBufferSize):
        (WebCore::AudioSession::isMuted):
        (WebCore::currentDeviceSupportsLowPowerBufferSize):
        (WebCore::AudioSession::outputDeviceSupportsLowPowerMode):
        (WebCore::AudioSession::addObserver):
        (WebCore::AudioSession::removeObserver):

2017-05-01  Chris Dumez  <cdumez@apple.com>

        Do not dispatch SVG load event in frameless documents
        https://bugs.webkit.org/show_bug.cgi?id=171505
        <rdar://problem/31799776>

        Reviewed by Andreas Kling.

        We should not dispatch SVG load events in frameless documents. <https://trac.webkit.org/changeset/173028/webkit>
        took care of most load events but forgot the SVG load event.

        Test: fast/dom/domparser-parsefromstring-svg-load-event.html

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

2017-05-01  Chris Dumez  <cdumez@apple.com>

        Remove some usage of PassRefPtr in editing code
        https://bugs.webkit.org/show_bug.cgi?id=171490

        Reviewed by Darin Adler.

        Remove some usage of PassRefPtr in editing code.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::markersInRange):
        (DocumentMarkerController::hasMarkers):
        (DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        * dom/DocumentMarkerController.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::isSpellingMarkerAllowed):
        (WebCore::AlternativeTextController::show):
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        (WebCore::AlternativeTextController::timerFired):
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult):
        (WebCore::AlternativeTextController::recordAutocorrectionResponse):
        (WebCore::AlternativeTextController::markReversed):
        (WebCore::AlternativeTextController::markCorrection):
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult):
        (WebCore::AlternativeTextController::applyDictationAlternative):
        * editing/AlternativeTextController.h:
        (WebCore::AlternativeTextController::UNLESS_ENABLED):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::createFontElement):
        (WebCore::createStyleSpanElement):
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::copyStyleOrCreateEmpty):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeConflictingInlineStyleFromRun):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::shouldSplitTextElement):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        (WebCore::ApplyStyleCommand::positionToComputeInlineStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::create):
        (WebCore::ApplyStyleCommand::shouldRemoveInlineStyleFromElement):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::applyCommandToComposite):
        (WebCore::CompositeEditCommand::applyStyledElement):
        (WebCore::CompositeEditCommand::removeStyledElement):
        (WebCore::CompositeEditCommand::replaceElementWithSpanPreservingChildrenAndAttributes):
        (WebCore::CompositeEditCommand::inputText):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::pushAnchorElementDown):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        * editing/DictationCommand.cpp:
        (WebCore::DictationCommand::insertTextRunWithoutNewlines):
        * editing/EditingStyle.cpp:
        (WebCore::copyEditingProperties):
        (WebCore::copyPropertiesFromComputedStyle):
        (WebCore::extractPropertyValue):
        (WebCore::HTMLAttributeEquivalent::attributeValueAsCSSValue):
        (WebCore::HTMLFontSizeEquivalent::attributeValueAsCSSValue):
        (WebCore::EditingStyle::setStyle):
        (WebCore::EditingStyle::copy):
        (WebCore::EditingStyle::extractAndRemoveBlockProperties):
        (WebCore::EditingStyle::extractAndRemoveTextDirection):
        (WebCore::EditingStyle::mergeInlineStyleOfElement):
        (WebCore::extractEditingProperties):
        (WebCore::EditingStyle::styleAtSelectionStart):
        (WebCore::getPropertiesNotIn):
        * editing/EditingStyle.h:
        * editing/Editor.cpp:
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::insertOrderedList):
        (WebCore::Editor::insertUnorderedList):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::rangeForPoint):
        * editing/Editor.h:
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevel):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelOrdered):
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevelUnordered):
        * editing/ModifySelectionListLevel.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::requestCheckingFor):
        (WebCore::SpellChecker::didCheckSucceed):
        * editing/SpellChecker.h:
        (WebCore::SpellCheckRequest::checkingRange):
        (WebCore::SpellCheckRequest::paragraphRange):
        (WebCore::SpellCheckRequest::rootEditableElement):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::SpellingCorrectionCommand):
        (WebCore::SpellingCorrectionCommand::willApplyCommand):
        (WebCore::SpellingCorrectionCommand::doApply):
        (WebCore::SpellingCorrectionCommand::targetRanges):
        * editing/SpellingCorrectionCommand.h:
        (WebCore::SpellingCorrectionCommand::create):
        * editing/SurroundingText.h:
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::expandRangeToNextEnd):
        (WebCore::TextCheckingParagraph::rangeLength):
        (WebCore::TextCheckingParagraph::paragraphRange):
        (WebCore::TextCheckingParagraph::subrange):
        (WebCore::TextCheckingParagraph::offsetTo):
        (WebCore::TextCheckingParagraph::offsetAsRange):
        (WebCore::TextCheckingParagraph::text):
        (WebCore::TextCheckingParagraph::checkingStart):
        * editing/TextCheckingHelper.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::computedStylePropertyForElement):
        (HTMLConverterCaches::inlineStylePropertyForElement):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot):

2017-05-01  Jer Noble  <jer.noble@apple.com>

        Add notifications from CaptureDeviceManager (and subclasses) when device lists change
        https://bugs.webkit.org/show_bug.cgi?id=171442

        Reviewed by Youenn Fablet.

        Add a new callback-based notification to CaptureDeviceManager which fires when the underlying list
        of devices changes. Add support for enumerating AVAudioSession capture devices.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/CaptureDeviceManager.cpp:
        (nextObserverToken):
        (CaptureDeviceManager::addCaptureDeviceChangedObserver):
        (CaptureDeviceManager::removeCaptureDeviceChangedObserver):
        * platform/mediastream/CaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.h: Added.
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.mm: Added.
        (WebCore::AVAudioSessionCaptureDevice::create):
        (WebCore::AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice):
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h: Added.
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm: Added.
        (-[WebAVAudioSessionAvailableInputsListener initWithCallback:]):
        (-[WebAVAudioSessionAvailableInputsListener invalidate]):
        (-[WebAVAudioSessionAvailableInputsListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::AVAudioSessionCaptureDeviceManager::singleton):
        (WebCore::AVAudioSessionCaptureDeviceManager::captureDevices):
        (WebCore::AVAudioSessionCaptureDeviceManager::audioSessionCaptureDevices):
        (WebCore::AVAudioSessionCaptureDeviceManager::audioSessionDeviceWithUID):
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::deviceConnected):
        (WebCore::AVCaptureDeviceManager::deviceDisconnected):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::devicesChanged):

2017-05-01  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: AccessibilityTable::ariaRowCount() and ariaColumnCount() should not return -1 unless that is the author-provided value
        https://bugs.webkit.org/show_bug.cgi?id=171475

        Reviewed by Chris Fleizach.

        If the author has provided a valid value, return it. Otherwise, return 0.

        No new tests needed. Update existing test expectations to reflect the change.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::ariaColumnCount):
        (WebCore::AccessibilityTable::ariaRowCount):

2017-05-01  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for ARIA "figure" and "term" roles; update AXRoleDescription mapping for "feed" role
        https://bugs.webkit.org/show_bug.cgi?id=171183

        Reviewed by Chris Fleizach.

        Create FeedRole, FigureRole, and TermRole and map them on the Mac and Gtk
        ports. Also rename AccessibilityObject::isFigure() to isFigureElement()
        for clarity as this method is specific to the HTML element and not the role.

        No new tests needed: We have existing tests that cover mappings. Add new test cases
        to roles-exposed.html, xml-roles-exposed.html, and roles-computedRoleString.html.

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::captionForFigure):
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::isFigureElement): Added.
        (WebCore::AccessibilityObject::isFigure): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXFeedText):
        * platform/LocalizedStrings.h:

2017-04-30  Chris Dumez  <cdumez@apple.com>

        Drop support for legacy ClientRect / ClientRectList
        https://bugs.webkit.org/show_bug.cgi?id=171418

        Reviewed by Sam Weinig.

        Drop support for legacy ClientRect / ClientRectList types now we use
        DOMRect everywhere.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ClientRect.cpp: Removed.
        * dom/ClientRect.h: Removed.
        * dom/ClientRect.idl: Removed.
        * dom/ClientRectList.cpp: Removed.
        * dom/ClientRectList.h: Removed.
        * dom/ClientRectList.idl: Removed.
        * dom/DOMAllInOne.cpp:
        * dom/Element.cpp:
        * html/HTMLMediaElement.cpp:
        * html/track/VTTRegion.cpp:
        * page/DragController.cpp:

2017-04-30  Zalan Bujtas  <zalan@apple.com>

        Initialize a new layout state while bailing out of simple line layout only when needed.
        https://bugs.webkit.org/show_bug.cgi?id=171481
        <rdar://problem/31906382>

        '-webkit-border-fit: lines' requires inline box tree.
        We normally bail out of simple line layout early when we see this property. 
        When this property is dynamically set and we already have a simple line layout context,
        RenderBlockFlow::ensureLineBoxes() takes care of the switch by calling layoutLineBoxes().
        This patch makes sure that we create the layout state for this (forced)line layout only when
        we don't yet have one.

        Reviewed by Antti Koivisto.

        Test: fast/multicol/simple-line-layout-switch-to-normal-layout-while-inside-layout.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutStateForPaginationIfNeeded):
        (WebCore::RenderView::pushLayoutStateForPagination): Deleted.
        * rendering/RenderView.h:

2017-04-30  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build after r215992

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:

2017-04-30  Brady Eidson  <beidson@apple.com>

        Fix r215991
        https://bugs.webkit.org/show_bug.cgi?id=171483

        Unreviewed.

        * platform/spi/cf/CFNetworkSPI.h:

2017-04-30  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build after r215992

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebAVPlayerLayerView_pictureInPicturePlayerLayerView):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):

2017-04-30  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Replaces uses of [get…() alloc] with alloc…Instance()
        https://bugs.webkit.org/show_bug.cgi?id=171485

        Reviewed by Geoffrey Garen.

        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::contentKeySession):
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):
        * platform/ios/ValidationBubbleIOS.mm:
        (-[WebValidationBubbleTapRecognizer initWithPopoverController:]):
        (WebCore::ValidationBubble::ValidationBubble):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::setUpFullscreen):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebAVPlayerLayerView_pictureInPicturePlayerLayerView):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        * platform/mac/WebVideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC setUpPIPForVideoView:withFrame:inWindow:]):
        * platform/network/ios/PreviewConverter.mm:
        (WebCore::PreviewConverter::PreviewConverter):
        * rendering/RenderThemeIOS.mm:
        (WebCore::iconForAttachment):

2017-04-30  Brady Eidson  <beidson@apple.com>

        Updates to _WKWebsiteDataStoreConfiguration cookie storage location SPI.
        <rdar://problem/31906397> and https://bugs.webkit.org/show_bug.cgi?id=171483

        Reviewed by Geoff Garen (and kind of Andy Estes).

        No new tests (Covered by API test).

        * platform/spi/cf/CFNetworkSPI.h:

2017-04-30  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/31906525> WebCore-7604.1.19 has failed to build

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]): Resolved type ambiguity
          by using allocUIItemProviderInstance() instead of [getUIItemProviderClass() alloc].

2017-04-30  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Implement support for aria-autocomplete
        https://bugs.webkit.org/show_bug.cgi?id=171167

        Reviewed by Chris Fleizach.

        Expose ATK_STATE_SUPPORTS_AUTOCOMPLETION in the state set, and the value
        of aria-autocomplete as an object attribute, for elements which indicate
        they support autocompletion.

        Test: accessibility/gtk/aria-autocomplete.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAAutoComplete):
        (WebCore::AccessibilityObject::ariaAutoCompleteValue):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (setAtkStateSetFromCoreObject):
        * html/HTMLAttributeNames.in:

2017-04-30  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] ARIA treegrid role should be exposed as ATK_ROLE_TREE_TABLE; not ATK_ROLE_TABLE
        https://bugs.webkit.org/show_bug.cgi?id=171170

        Reviewed by Chris Fleizach.

        AccessibilityTable::roleValue() was returning GridRole for both grid and treegrid.
        Change this so that GridRole is returned for grid and TreeGridRole is returned for
        treegrid. Add TreeGridRole to, or call isTable() in, methods where the behavior
        should be the same as GridRole.

        Test: accessibility/gtk/interface-table.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::roleValue):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        (getInterfaceMaskFromObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2017-04-30  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Emit object:state-changed:busy event when aria-busy value changes
        https://bugs.webkit.org/show_bug.cgi?id=171181

        Reviewed by Chris Fleizach.

        Emit object:state-changed:busy for AXElementBusyChanged notifications.

        Test: accessibility/gtk/aria-busy-changed-notification.html

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

2017-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        Zero out PerformanceResourceTiming properties for cached cross-origin responses without Timing-Allow-Origin
        https://bugs.webkit.org/show_bug.cgi?id=171394

        Reviewed by Youenn Fablet.

        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::fromCache):
        (WebCore::ResourceTiming::ResourceTiming):
        * loader/ResourceTiming.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        Include the timing-allow-origin check for cached responses.
        Also, avoid including an extra entry for an ongoing cached resource
        load, since when that load completes it should be reported.

2017-04-29  Youenn Fablet  <youenn@apple.com>

        Readd assertion removed accidentally in r215955
        https://bugs.webkit.org/show_bug.cgi?id=171466

        Reviewed by Eric Carlson.

        Unreviewed.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::orientationChanged): Improved FIXME after review.

2017-04-29  Andy Estes  <aestes@apple.com>

        [macOS] Picture-in-picture should be disabled in WebPlaybackControlsManager during external media playback
        https://bugs.webkit.org/show_bug.cgi?id=171468
        <rdar://problem/31900349>

        Reviewed by Eric Carlson.

        * platform/mac/WebPlaybackControlsManager.h: Declared canTogglePictureInPicture as a
        readwrite property.
        * platform/mac/WebPlaybackControlsManager.mm: Synthesize canTogglePictureInPicture.
        (-[WebPlaybackControlsManager canTogglePictureInPicture]): Deleted.
        * platform/mac/WebPlaybackSessionInterfaceMac.h:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::externalPlaybackChanged): Called
        -[WebPlaybackControlsManager setCanTogglePictureInPicture:].

2017-04-29  Simon Fraser  <simon.fraser@apple.com>

        Fix tests broken by r215964.

        Fix copy-paste error that caused the wrong paint phase to get passed to the fire writeLayerRenderers()
        call, causing extra renderer dumping.

        Also remove unused default arguments.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayerRenderers):
        (WebCore::writeLayers):

2017-04-28  Zalan Bujtas  <zalan@apple.com>

        iBooks text can overlap, sometimes columns are shifted splitting words.
        https://bugs.webkit.org/show_bug.cgi?id=171472
        <rdar://problem/31096037>

        Reviewed by Antti Koivisto.

        Instead of just checking if the glyph is taller than the line, we need to ensure that both the
        ascent and the descent have enough space (this is for -webkit-line-box-contain: glyph).

        Test: fast/text/simple-line-layout-glyph-overflows-line.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText): compute the available space for the ascent/descent
        and check them against the ceil-ed(see FontCascade::floatWidthForSimpleText) glyph min/max y.

2017-04-29  Nan Wang  <n_wang@apple.com>

        AX: Improve performance of addChildren()/childrenChanged()
        https://bugs.webkit.org/show_bug.cgi?id=171443

        Reviewed by Chris Fleizach.

        There's a lot of unnecessary work happening when childrenChanged() is being called.
        Some of the improvements here:
        1. When childrenChanged() is being called on some element, we are marking its parent
           chain dirty. However, in the addChild() method we are then clearing each child of
           that 'dirty' parent, eventually making the entire tree dirty. 
           Added a m_subTreeDirty flag and using the needsToUpdateChildren() check to make sure
           we are only clearing the right chain without updating the unchanged siblings.
        2. In the addChild() method we are calling accessibilityIsIgnored() on each child and that 
           might lead to going up the parent chain again to get necessary information. 
           Since we are already traversing the tree from top to bottom to add children, added a 
           struct to store the information and pass it to the child so to avoid unnecessary traversal.
        3. Reduced the amount work of ARIA text controls perform when updating its parents in childrenChanged() 
           so that we don't update a big portion of the tree while typing.

        No new tests since this didn't change any functionality. 

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::AccessibilityNodeObject):
        (WebCore::AccessibilityNodeObject::childrenChanged):
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::addChildren):
        (WebCore::AccessibilityNodeObject::isDescendantOfBarrenParent):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        (WebCore::AccessibilityObject::defaultObjectInclusion):
        (WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityIsIgnoredFromParentData::AccessibilityIsIgnoredFromParentData):
        (WebCore::AccessibilityIsIgnoredFromParentData::isNull):
        (WebCore::AccessibilityObject::setNeedsToUpdateSubTree):
        (WebCore::AccessibilityObject::needsToUpdateChildren):
        (WebCore::AccessibilityObject::setIsIgnoredFromParentData):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::updateChildrenIfNecessary):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::setRenderObject):
        (WebCore::AccessibilityRenderObject::needsToUpdateChildren): Deleted.

2017-04-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        Move WebCore CPUTime to WTF and implement it in all the platforms
        https://bugs.webkit.org/show_bug.cgi?id=171477

        Reviewed by Chris Dumez.

        Move CPUTime to WTF. And rename getCPUTime to CPUTime::get().

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ChromeClient.h:
        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::PerformanceMonitor):
        (WebCore::PerformanceMonitor::measurePostLoadCPUUsage):
        (WebCore::PerformanceMonitor::measurePostBackgroundingCPUUsage):
        (WebCore::PerformanceMonitor::measureCPUUsageInActivityState):
        * page/PerformanceMonitor.h:
        * platform/CPUMonitor.cpp:
        (WebCore::CPUMonitor::setCPULimit):
        (WebCore::CPUMonitor::timerFired):
        * platform/CPUMonitor.h:

2017-04-28  Per Arne Vollan  <pvollan@apple.com>

        Crash under WebCore::AccessibilityRenderObject::handleAriaExpandedChanged().
        https://bugs.webkit.org/show_bug.cgi?id=171427
        rdar://problem/31863417

        Reviewed by Brent Fulgham.

        The AccessibilityRenderObject object might delete itself in handleAriaExpandedChanged() under the call
        to the parentObject() method. This will cause a crash when accessing the object later in this method.
        Protect the current object while executing arbitrary event code.

        Test: accessibility/accessibility-crash-setattribute.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):

2017-04-28  Chris Dumez  <cdumez@apple.com>

        Diagnostic logging of navigations is too verbose
        https://bugs.webkit.org/show_bug.cgi?id=171455
        <rdar://problem/31543815>

        Reviewed by Andreas Kling.

        Diagnostic logging of navigation is too verbose. We log things that are not actually user
        navigations (e.g. speculative loads, bookmark icon fetches, ...). To address the issue,
        we now only log *observable* loads. We do so by only logging if the page is visible or
        if it becomes visible.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::logNavigation): Deleted.
        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::logNavigation):
        (WebCore::Page::mainFrameLoadStarted):
        * page/Page.h:

2017-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: ARIA "region" role which lacks an accessible name should not be treated as a landmark
        https://bugs.webkit.org/show_bug.cgi?id=171180

        Reviewed by Chris Fleizach.

        Remove mapping of LandmarkRegionRole for regions which lack an accessible name.
        Doing so had a side effect of causing a number of DPub ARIA roles to stop being
        mapped as ARIA landmarks. This is due to our internal role mappings, namely
        treating the DPub ARIA landmark roles as if they were regions. Because DPub's
        landmarks do not subclass region, and do not have the same name-from-author
        requirement as region, create a new LandmarkDocRegionRole AccessibilityRole and
        map DPub ARIA's generic landmarks to it.

        No new tests because we already have sufficient coverage. Several existing
        tests were given additional test cases to cover named and unnamed regions,
        and test expectations updated accordingly.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibleNameDerivesFromContent):
        (WebCore::AccessibilityObject::isLandmark):
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::computedRoleString):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):

2017-04-28  Simon Fraser  <simon.fraser@apple.com>

        Enhance showLayerTree() to show fragments
        https://bugs.webkit.org/show_bug.cgi?id=171469

        Reviewed by Zalan Bujtas.

        Have showLayerTree() dump fragments, like:

             normal flow list(1)
              layer 0x11c1879c0 at (0,0) size 700x1858 backgroundClip at (0,0) size 2120x779 clip at (0,0) size 2120x779
                   fragment 0: bounds in layer at (0,0) size 700x1858 fragment bounds at (0,0) size 700x779
                   fragment 1: bounds in layer at (710,-779) size 700x1858 fragment bounds at (710,0) size 700x779
                   fragment 2: bounds in layer at (1420,-1558) size 700x1858 fragment bounds at (1420,0) size 700x300
                RenderMultiColumnFlowThread 0x11f1f3340 at (0,0) size 700x1858

        We want these to show before the child renderers, so factor that code into writeLayerRenderers().
        
        Overloading of write() for layers doesn't help anyone, so call it writeLayer() for searchability.

        * rendering/RenderLayer.cpp:
        (WebCore::showLayerTree):
        * rendering/RenderLayer.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayer):
        (WebCore::writeLayerRenderers):
        (WebCore::writeLayers):
        * rendering/RenderTreeAsText.h:

2017-04-28  Simon Fraser  <simon.fraser@apple.com>

        Modernize RenderTreeAsText code
        https://bugs.webkit.org/show_bug.cgi?id=171458

        Reviewed by Zalan Bujtas.

        Use modern loops. More references to render objects and layers.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeRenderNamedFlowThreads):
        (WebCore::writeLayers):
        (WebCore::writeSelection):
        (WebCore::externalRepresentation):

2017-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix and re-enable data interaction unit tests
        https://bugs.webkit.org/show_bug.cgi?id=171446
        <rdar://problem/31820646>

        Reviewed by Tim Horton.

        Three small tweaks to get all data interaction tests passing again (changes detailed below).
        Fixes a failing unit test: DataInteractionTests.RespectsExternalSourceFidelityRankings.

        * page/mac/DragControllerMac.mm:

        When dropping in a plain text editable area, don't consider kUTTypeText to be a UTI supported by the destination.
        This is because doing so would cause rich text UTIs, such as kUTTypeHTML, to match, so that the plain text area
        would report HTML as a preferred UTI type to load when dropping rich content over it. What we want to check for
        conformance here is really kUTTypePlainText.

        (WebCore::DragController::updatePreferredTypeIdentifiersForDragHandlingMethod):
        * platform/Pasteboard.h:
        * platform/ios/PasteboardIOS.mm:

        The default Pasteboard constructor no longer makes a sync call to the UI process to get the change count.
        Instead, we introduce a new constructor that takes and sets the change count. This default constructor was used
        from three places: Pasteboard::createForCopyAndPaste, Pasteboard::createPrivate and StaticPasteboard::create.

        The first two call sites have been refactored to first fetch the change count from the UI process and then pass
        it in to the constructor.

        (WebCore::changeCountForPasteboard):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createPrivate):
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::types):
        * platform/mac/DragDataMac.mm:
        (WebCore::typeIsAppropriateForSupportedTypes):
        (WebCore::DragData::updatePreferredTypeIdentifiers):

        Remove the two-pass heuristic. Instead, we should follow this policy: "select the highest fidelity UTI that
        conforms to one of the destination's supported types".

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

2017-04-28  Dean Jackson  <dino@apple.com>

        App crashing: Dispatch queue: com.apple.root.user-interactive-qos / vBoxConvolve / WebCore::FEGaussianBlur::platformApplySoftware()
        https://bugs.webkit.org/show_bug.cgi?id=171461
        <rdar://problem/30534722>

        Reviewed by Eric Carlson.

        We're getting reports of crashes in this function, caused by null or empty data being
        passed to vImage. Guard against this, in a way that will ASSERT in debug builds if
        anyone comes across it.

        Test: css3/filters/blur-various-radii.html

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::accelerateBoxBlur): Return early if things don't look good.

2017-04-28  Chris Dumez  <cdumez@apple.com>

        Stop using legacy ClientRect / ClientRectList in Internals
        https://bugs.webkit.org/show_bug.cgi?id=171412

        Reviewed by Simon Fraser.

        Stop using legacy ClientRect / ClientRectList in Internals amd use the
        newer DOMRect instead.

        * dom/DOMRect.idl:
        * page/Page.cpp:
        (WebCore::Page::nonFastScrollableRects):
        (WebCore::Page::touchEventRectsForEvent):
        (WebCore::Page::passiveTouchEventListenerRects):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::absoluteCaretBounds):
        (WebCore::Internals::boundingBox):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::layoutViewportRect):
        (WebCore::Internals::visualViewportRect):
        (WebCore::Internals::touchEventRectsForEvent):
        (WebCore::Internals::passiveTouchEventListenerRects):
        (WebCore::Internals::nonFastScrollableRects):
        (WebCore::Internals::selectionBounds):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-04-28  Youenn Fablet  <youenn@apple.com>

        getUserMedia video streams should follow device orientation
        https://bugs.webkit.org/show_bug.cgi?id=171284

        Reviewed by Eric Carlson.

        Only really affects AVVideoCaptureSource on iOS. Manually testing the following cases:
        - Mac: no change of behavior
        - iOS: page loaded in portrait, video is portrait. page loaded in landscape, video is landscape
        - iOS: changing the device orientation makes the video samples to be moved to landscape/portrait.
        - Same tests as above with peer connection.

        Making Document having an OrientationNotifier that AVVideoCaptureSources get registered to.
        Making AVVideoCaptureSource an OrientationNotifier::Observer so that it can changes width/height if needed.

        Refactoring to specialize CaptureFactory in VideoCaptureFactory and AudioCaptureFactory.
        Refactoring to return a CaptureSourceOrError instead of passing an out parameter plus returning a RefPtr.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::orientationChanged):
        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::orientationChanged):
        * platform/OrientationNotifer.h: Copied from Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h.
        (WebCore::OrientationNotifier::Observer::setNotifier):
        (WebCore::OrientationNotifier::Observer::~Observer):
        (WebCore::OrientationNotifier::orientationChanged):
        (WebCore::OrientationNotifier::addObserver):
        (WebCore::OrientationNotifier::removeObserver):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::monitorOrientation):
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::CaptureSourceOrError::CaptureSourceOrError):
        (WebCore::CaptureSourceOrError::operator bool):
        (WebCore::CaptureSourceOrError::source):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::setVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetVideoFactory):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::defaultAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::defaultVideoFactory):
        (WebCore::RealtimeMediaSourceCenter::audioFactory):
        (WebCore::RealtimeMediaSourceCenter::videoFactory):
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::create):
        (WebCore::AVAudioCaptureSource::factory):
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::create):
        (WebCore::AVVideoCaptureSource::factory):
        (WebCore::AVVideoCaptureSource::monitorOrientation):
        (WebCore::AVVideoCaptureSource::orientationChanged):
        (WebCore::AVVideoCaptureSource::processNewFrame):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::factory):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSource::create):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSourceMac::orientationChanged):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory):
        (WebCore::RealtimeMediaSourceCenterMac::defaultVideoFactory):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSource::factory):
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):
        (WebCore::MockRealtimeMediaSourceCenter::defaultAudioFactory):
        (WebCore::MockRealtimeMediaSourceCenter::defaultVideoFactory):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSource::factory):
        * platform/mock/MockRealtimeVideoSource.h:

2017-04-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unify how BitmapImage handles the availability of a decoded for large and animated images
        https://bugs.webkit.org/show_bug.cgi?id=171410

        Reviewed by Simon Fraser.

        Rename some functions which are related to animation frame availability.
        Make BitmapImage call ImageObserver::imageFrameAvailable() whenever a 
        frame is available regardless it is for an animated or for a large image.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isVisibleInViewport):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::autoplayPermitted):
        (WebCore::isMainContentForPurposesOfAutoplay):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImageObserver::imageFrameAvailable):
        (WebCore::CachedImage::imageFrameAvailable):
        (WebCore::CachedImage::usesImageContainerSize): Deleted.
        (WebCore::CachedImage::imageHasRelativeWidth): Deleted.
        (WebCore::CachedImage::imageHasRelativeHeight): Deleted.
        (WebCore::CachedImage::CachedImageObserver::animationAdvanced): Deleted.
        (WebCore::CachedImage::animationAdvanced): Deleted.
        * loader/cache/CachedImage.h:
        * loader/cache/CachedImageClient.h:
        (WebCore::CachedImageClient::imageFrameAvailable):
        (WebCore::CachedImageClient::newImageAnimationFrameAvailable): Deleted.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):
        (WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex): Deleted.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::imageFrameAvailableAtIndex):
        (WebCore::Image::newFrameNativeImageAvailableAtIndex): Deleted.
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::cacheAsyncFrameNativeImageAtIndex):
        * platform/graphics/ImageObserver.h:
        * platform/graphics/ImageTypes.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::shouldRepaintInVisibleRect):
        (WebCore::RenderElement::imageFrameAvailable):
        (WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded):
        (WebCore::shouldRepaintForImageAnimation): Deleted.
        (WebCore::RenderElement::newImageAnimationFrameAvailable): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateVisibleViewportRect):
        * svg/graphics/SVGImageClients.h:

2017-04-28  Jeremy Jones  <jeremyj@apple.com>

        ARGUMENT BAD: time, time >= 0
        https://bugs.webkit.org/show_bug.cgi?id=164336
        rdar://problem/29314891

        Reviewed by Eric Carlson.

        Handle invalid duration and current time when calculating remaining time.

        Test media/modern-media-controls/pip-support/pip-support-click.html now works without a workaround
        in media/modern-media-controls/pip-support/pip-support-enabled.html

        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController remainingTimeText]):

2017-04-28  Daniel Bates  <dabates@apple.com>

        Add WebCore::protocolIsJavaScript(StringView)
        https://bugs.webkit.org/show_bug.cgi?id=171396

        Reviewed by Alex Christensen.

        Add an overload of WebCore::protocolIsJavaScript() that takes a StringView to
        avoid the need for a caller to allocate a new String object when converting
        from a StringView to a String. We are not using this functionality at the moment,
        but we will in the patch for <https://bugs.webkit.org/show_bug.cgi?id=170925>.

        No functionality has changed. So, no new tests.

        * platform/URL.cpp: Remove an outdated comment about protocolIs(StringView, const char*).
        This overload was removed in r212508.
        (WebCore::protocolIsInternal): Added.
        (WebCore::protocolIs): Implemented in terms of WebCore::protocolIsInternal().
        (WebCore::URL::protocolIs): Ditto.
        (WebCore::protocolIsJavaScript): Added; overload that takes a StringView.
        (WebCore::mimeTypeFromDataURL): Modified to use WebCore::protocolIsInternal().
        * platform/URL.h:

2017-04-28  Andy Estes  <aestes@apple.com>

        [macOS] WebPlaybackControlsManager needs to know when the selected text or audio track changes
        https://bugs.webkit.org/show_bug.cgi?id=171434
        <rdar://problem/31887922>

        Reviewed by Eric Carlson.

        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::hasPendingEventsOfType): Added to check if a pending event
        exists of a certain type.
        * dom/GenericEventQueue.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSelectedTextTrack): Even if no track modes change, fire a
        change event when the track to select is off or automatic so that
        WebPlaybackSessionModelMediaElement detects the change.
        * html/track/TrackListBase.cpp:
        (TrackListBase::isChangeEventScheduled): Returns true if m_asyncEventQueue has a pending
        change event.
        * html/track/TrackListBase.h:
        * platform/cocoa/WebPlaybackSessionModel.h:
        (WebCore::WebPlaybackSessionModelClient::audioMediaSelectionIndexChanged):
        (WebCore::WebPlaybackSessionModelClient::legibleMediaSelectionIndexChanged):
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::setMediaElement): Registered/unregistered for
        the change event on the audio and text tracks.
        (WebCore::WebPlaybackSessionModelMediaElement::updateForEventName): Called
        updateMediaSelectionIndices() when the change event fires.
        (WebCore::WebPlaybackSessionModelMediaElement::updateMediaSelectionOptions): Renamed from
        updateLegibleOptions().
        (WebCore::WebPlaybackSessionModelMediaElement::updateMediaSelectionIndices): Called
        audioMediaSelectionIndexChanged() and legibleMediaSelectionIndexChanged() on m_clients with
        the updated indices.
        (WebCore::WebPlaybackSessionModelMediaElement::legibleMediaSelectedIndex): Fixed a bug
        where selectedIndex would never be set to offIndex if offIndex is 0 (which it usually is).
        (WebCore::WebPlaybackSessionModelMediaElement::updateLegibleOptions): Renamed to
        updateMediaSelectionOptions().
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager setAudioMediaSelectionIndex:]): Set
        _currentAudioTouchBarMediaSelectionOption to the object at selectedIndex and manually
        triggered a KVO notification. We can't call -setCurrentAudioTouchBarMediaSelectionOption:
        here since that will send a message back to the Web process.
        (-[WebPlaybackControlsManager setLegibleMediaSelectionIndex:]): Ditto for
        _currentLegibleTouchBarMediaSelectionOption.
        * platform/mac/WebPlaybackSessionInterfaceMac.h:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::audioMediaSelectionIndexChanged): Called
        -[WebPlaybackControlsManager setAudioMediaSelectionIndex:].
        (WebCore::WebPlaybackSessionInterfaceMac::legibleMediaSelectionIndexChanged): Called
        -[WebPlaybackControlsManager setLegibleMediaSelectionIndex:].

2017-04-28  Chris Dumez  <cdumez@apple.com>

        Range.getClientRects() / getBoundingClientRect() should return DOMRect types
        https://bugs.webkit.org/show_bug.cgi?id=171393

        Reviewed by Simon Fraser.

        Range.getClientRects() / getBoundingClientRect() should return DOMRect types:
        - https://drafts.csswg.org/cssom-view/#extensions-to-the-range-interface

        Test: fast/dom/Range/getBoundingClientRect-getClientRects-return-type.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMRect.cpp: Copied from Source/WebCore/dom/DOMRect.h.
        (WebCore::createDOMRectVector):
        * dom/DOMRect.h:
        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        * dom/Range.cpp:
        (WebCore::Range::getClientRects):
        (WebCore::Range::getBoundingClientRect):
        * dom/Range.h:
        * dom/Range.idl:

2017-04-28  Chris Dumez  <cdumez@apple.com>

        Tweak window.open features argument tokenizer to match HTML standard and Edge
        https://bugs.webkit.org/show_bug.cgi?id=170548

        Reviewed by Geoffrey Garen.

        Update window.open() features argument tokenizer to match HTML standard:
        - https://html.spec.whatwg.org/#concept-window-open-features-tokenize

        Also update window.open() to return null instead of the window when
        the 'noopener' feature is activated, as per:
        - https://html.spec.whatwg.org/#dom-open (Step 10)

        No new tests, rebaselined existing test.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        Update window.open() to return null instead of the window when
        the 'noopener' feature is activated, as per:
        - https://html.spec.whatwg.org/#dom-open (Step 10)

        * page/WindowFeatures.cpp:
        (WebCore::isSeparator):
        Treat all ASCII spaces as feature separators, as per:
        - https://html.spec.whatwg.org/#feature-separator
        This has the effect of adding U+000C (FormFeed) as a separator.

        (WebCore::processFeaturesString):
        Align tokenizing code with the specification:
        - https://html.spec.whatwg.org/#concept-window-open-features-tokenize
        In particular, the following changes were made:
        - After the key, skip to first '=', but don't skip past a ',' or a non-separator.
          The "or a non-separator" part is new in the spec (step 3.6.1) and is now implemented.
        - After looking for the '=', only treat what follows as a value if the current character
          is a separator. This is as per step 7 in the spec.
        These changes now cause us to parse 'foo noopener=1' as ('foo', ''), ('noopener', '1').

2017-04-28  Eric Carlson  <eric.carlson@apple.com>

        Implement ondevicechange
        https://bugs.webkit.org/show_bug.cgi?id=169872

        Unreviewed, remove some dead code accidentally committed in r215929.

        * platform/mediastream/CaptureDeviceManager.cpp:

2017-04-28  Chris Dumez  <cdumez@apple.com>

        Update DOMTokenList.replace() to match the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=171388

        Reviewed by Alex Christensen.

        Update DOMTokenList.replace() to match the latest DOM specification after:
        - https://github.com/whatwg/dom/issues/442
        - https://github.com/whatwg/infra/pull/126

        The latest spec text is at:
        - https://dom.spec.whatwg.org/#dom-domtokenlist-replace
        - https://infra.spec.whatwg.org/#set-replace

        The behavior change in this patch causes (a, b, c).replace(a, c) to return
        (c, b) instead of (b, c). This new behavior is aligned with Firefox as well.

        No new tests, updated existing test.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::replace):

2017-04-28  Brady Eidson  <beidson@apple.com>

        Start of support for multiple WebsiteDataStore/SessionIDs per process
        https://bugs.webkit.org/show_bug.cgi?id=171422

        Reviewed by Geoffrey Garen.

        Covered by API tests.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::ensureSession):
        * platform/spi/cf/CFNetworkSPI.h:

2017-04-28  Chris Dumez  <cdumez@apple.com>

        URLSearchParams should be reflective
        https://bugs.webkit.org/show_bug.cgi?id=171345

        Reviewed by Alex Christensen.

        There was a bug in our implementation of [1] where we would replace
        '+' with 0x20 *after* URL-decoding the string, instead of *before*.
        This was causing us to replace URL-encoded '+' characters with 0x20.

        [1] https://url.spec.whatwg.org/#concept-urlencoded-parser

        No new tests, updated existing test.

        * platform/URLParser.cpp:

2017-04-28  Youenn Fablet  <youenn@apple.com>

        Adding a runtime flag specific to MediaDevices
        https://bugs.webkit.org/show_bug.cgi?id=171433

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        Adding a preference for MediaDevices.
        Setting media devices runtime flag to false by default.
        Setting peer connection and media stream flags to true by default.
        Activating mediaDevices and getUserMedia Navigator properties based on media devices flag.

        * Modules/mediastream/NavigatorMediaDevices.idl:
        * Modules/mediastream/NavigatorUserMedia.idl:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mediaDevicesEnabled):
        (WebCore::RuntimeEnabledFeatures::setMediaDevicesEnabled):

2017-04-28  Eric Carlson  <eric.carlson@apple.com>

        Implement ondevicechange
        https://bugs.webkit.org/show_bug.cgi?id=169872

        Unreviewed, fix test crash.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver): "nextToken" must be static.

2017-04-28  Dean Jackson  <dino@apple.com>

        [WebGPU] Label MTLCommandQueues with a prefix for internal telemetry
        https://bugs.webkit.org/show_bug.cgi?id=171441
        <rdar://problem/31826915>

        Reviewed by Tim Horton.

        Prefix any label that is set by the WebGPU API so that
        our telemetry can identify the use. Don't expose that
        prefix to the API though.

        New API Test: GPUCommandQueue

        * platform/graphics/cocoa/GPUCommandQueueMetal.mm:
        (WebCore::GPUCommandQueue::GPUCommandQueue):
        (WebCore::GPUCommandQueue::label):
        (WebCore::GPUCommandQueue::setLabel):

2017-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] aria-modal="true" should be exposed via ATK_STATE_MODAL
        https://bugs.webkit.org/show_bug.cgi?id=171188

        Reviewed by Chris Fleizach.

        Include ATK_STATE_MODAL in the AtkObject's state set if the accessible
        element's node is the current ARIA modal node.

        Test: accessibility/gtk/aria-modal-state-exposed.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAriaModalNode):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2017-04-28  Eric Carlson  <eric.carlson@apple.com>

        Implement ondevicechange
        https://bugs.webkit.org/show_bug.cgi?id=169872
        <rdar://problem/28945035>

        Reviewed by Jer Noble.

        Test: fast/mediastream/device-change-event.html

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices): Register for devicechange callbacks.
        (WebCore::MediaDevices::~MediaDevices): Unregister.
        (WebCore::MediaDevices::scheduledEventTimerFired):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaDevices.idl:

        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        (WebCore::MediaDevicesEnumerationRequest::setDeviceInfo): Remove unnecessary instance variables.
        * Modules/mediastream/MediaDevicesEnumerationRequest.h:

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start): Remove m_idHashSalt, it isn't used. RealtimeMediaSourceCenter
        now has the method to hash ids and group IDs.
        (WebCore::hashString): Deleted.
        (WebCore::MediaDevicesRequest::hashID): Deleted.
        * Modules/mediastream/MediaDevicesRequest.h:

        * dom/Document.h:
        (WebCore::Document::setDeviceIDHashSalt):
        (WebCore::Document::deviceIDHashSalt):

        * dom/EventNames.h: Add devicechange.

        * dom/EventTargetFactory.in: Add MediaDevices.

        * html/HTMLAttributeNames.in: Add ondevicechange.

        * platform/mediastream/CaptureDeviceManager.cpp:
        (WebCore::CaptureDeviceManager::captureDeviceFromPersistentID): Renamed from captureDeviceFromDeviceID
        and changed to return a std::optional<CaptureDevice>.
        (WebCore::CaptureDeviceManager::captureDeviceFromDeviceID): Deleted.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::addStringToSHA): New, add string bytes to SHA1. Moved from MediaDevicesRequest
        so we can use for in testing.
        (WebCore::RealtimeMediaSourceCenter::hashStringWithSalt): Generate hash for a string with a
        salt. Moved from MediaDevicesRequest so we can use for in testing.
        (WebCore::RealtimeMediaSourceCenter::captureDeviceWithUniqueID): Find a CaptureDevice given 
        a unique ID and the process hash salt.
        (WebCore::RealtimeMediaSourceCenter::setDeviceEnabled): Enable/disable a device. Used for
        layout tests only.
        (WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver): Add a devices changed listener.
        (WebCore::RealtimeMediaSourceCenter::removeDevicesChangedObserver): Remove a listener.
        (WebCore::RealtimeMediaSourceCenter::captureDevicesChanged): Notify listeners.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::addDevicesChangedObserver): Update for change to captureDeviceFromDeviceID.

        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::audioDevices): All devices are enabled by default.
        (WebCore::MockRealtimeMediaSource::videoDevices): Ditto.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Drive-by cleanup: use the vector
        of devices instead of making assumptions about the number.
        (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamDevices): Only include enabled devices.
        (WebCore::MockRealtimeMediaSourceCenter::setDeviceEnabled): Enable or disable a device.
        * platform/mock/MockRealtimeMediaSourceCenter.h:

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaDeviceState): Enable or disable a mock capture device.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-04-28  Alex Christensen  <achristensen@webkit.org>

        Fix memory corruption issue after r215883.
        https://bugs.webkit.org/show_bug.cgi?id=171365

        Reviewed by Brady Eidson.

        This fixes a crash when starting WebKit2.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        Initialize m_platformCookieStorage with the default constructor of RetainPtr,
        then call NetworkStorageSession::cookieStorage which checks m_platformCookieStorage
        for null.  It was checking uninitialized memory when we had m_platformCookieStorage
        in the initializer list.

2017-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement aria-value support for focusable separators
        https://bugs.webkit.org/show_bug.cgi?id=171169

        Reviewed by Chris Fleizach.

        Add SplitterRole to the roles which support range value and are considered a range
        control, as long as the SplitterRole element is focusable. Also replace ATK's role-
        based check with a call to supportsRangeValue() when determining if the AtkValue
        interface should be implemented.

        Test: accessibility/separator-values.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isRangeControl):
        (WebCore::AccessibilityObject::supportsRangeValue):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getInterfaceMaskFromObject):

2017-04-28  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] GridCellRole should implement AtkTableCell (regression?)
        https://bugs.webkit.org/show_bug.cgi?id=171179

        Reviewed by Chris Fleizach.

        Add GridCellRole to the group of roles which should implement AtkTableCell.

        Test: accessibility/gtk/interface-table-cell.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getInterfaceMaskFromObject):

2017-04-28  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r215211): [GTK] Several webgl related tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=170730

        Reviewed by Said Abou-Hallawa.

        There is a wrong situation in the image decoders where the complete data has been assigned
        to them but the size of the image hasn't been decoded yet. This is causing rendering
        issues in webgl when decoding the images used as textures. To fix this, we refactor how the
        encoded data status is stored to avoid that situation: the status is handled completely
        by ImageDecoder.h, and it's the one forcing the decode of the size when data gets assigned
        to the decoders.

        Covered by existent tests.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::isAllDataReceived):
        (WebCore::ImageDecoder::setData):
        (WebCore::ImageDecoder::encodedDataStatus):
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::setSize):
        (WebCore::ImageDecoder::setFailed):
        (WebCore::ImageDecoder::failed):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::decode):
        (WebCore::BMPImageDecoder::encodedDataStatus): Deleted.
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::encodedDataStatus): Deleted.
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::setData):
        (WebCore::ICOImageDecoder::frameCount):
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::setDataForPNGDecoderAtIndex):
        (WebCore::ICOImageDecoder::decode):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::encodedDataStatus): Deleted.
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGImageDecoder::decode):
        (WebCore::JPEGImageDecoder::encodedDataStatus): Deleted.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::decode):
        (WebCore::PNGImageDecoder::encodedDataStatus): Deleted.
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::frameBufferAtIndex):
        (WebCore::WEBPImageDecoder::decode):
        (WebCore::WEBPImageDecoder::encodedDataStatus): Deleted.
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2017-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move UUID from WebCore/platform to WTF
        https://bugs.webkit.org/show_bug.cgi?id=171372

        Reviewed by Michael Catanzaro.

        UUID only contains createCanonicalUUIDString() that is platform independent and doesn't depend on anything from
        WebCore, only from WTF.

        * CMakeLists.txt:
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webdatabase/DatabaseTracker.cpp:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/mac/EditorMac.mm:
        * fileapi/BlobURL.cpp:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * platform/URL.cpp:
        * platform/glib/FileSystemGlib.cpp:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.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/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/mediastream/CaptureDeviceManager.cpp:
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        * platform/mediastream/RealtimeMediaSource.cpp:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        * platform/mock/MockRealtimeAudioSource.cpp:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:
        * testing/MockCDMFactory.cpp:

2017-04-27  Alex Christensen  <achristensen@webkit.org>

        Make navigation policy checking more robust
        https://bugs.webkit.org/show_bug.cgi?id=171409
        <rdar://problem/31489248>

        Reviewed by Geoffrey Garen.

        No change in behavior.  Just added a protectedThis to a lambda and made the functions non-copyable.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::clear): Deleted.
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::cancelCheck):
        (WebCore::PolicyChecker::stopCheck):
        (WebCore::PolicyChecker::continueAfterNavigationPolicy):
        (WebCore::PolicyChecker::continueAfterNewWindowPolicy):
        (WebCore::PolicyChecker::continueAfterContentPolicy):

2017-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction should not load pasteboard content before performing the data operation
        https://bugs.webkit.org/show_bug.cgi?id=171414
        <rdar://problem/31878197>

        Reviewed by Tim Horton.

        When interacting with a link, we should not try to fetch pasteboard contents for the URL UTI type before
        performing the data operation. Teaches DragController to know whether it is allowed to load data from the
        dragging pasteboard, and uses this information in DragController::dragOperation to determine whether to use
        DragData::containsURLTypeIdentifier or DragData::containsURL.

        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::DragController::performDragOperation):
        * page/DragController.h:
        (WebCore::DragController::canLoadDataFromDraggingPasteboard):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        * platform/DragData.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard _preLoadedDataConformingToType:forItemProviderAtIndex:]):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsURLTypeIdentifier):

2017-04-27  Joseph Pecoraro  <pecoraro@apple.com>

        Support for promise rejection events (unhandledrejection)
        https://bugs.webkit.org/show_bug.cgi?id=150358
        <rdar://problem/28441651>

        Reviewed by Saam Barati.

        Patch by Joseph Pecoraro and Yusuke Suzuki.

        Implement support for the `onunhandledrejection` and `rejectionhandled` events.
        They dispatch a new PromiseRejectionEvent using the ES6 HostPromiseRejectionTracker hook:
        https://tc39.github.io/ecma262/#sec-host-promise-rejection-tracker
        https://html.spec.whatwg.org/multipage/webappapis.html#unhandled-promise-rejections

        This is currently implemented only for Documents and not yet Web Workers.

        Tests: js/dom/unhandled-promise-rejection-basic.html
               js/dom/unhandled-promise-rejection-bindings-type-error.html
               js/dom/unhandled-promise-rejection-console-no-report.html
               js/dom/unhandled-promise-rejection-console-report.html
               js/dom/unhandled-promise-rejection-handle-during-event.html
               js/dom/unhandled-promise-rejection-handle-in-handler.html
               js/dom/unhandled-promise-rejection-handle.html
               js/dom/unhandled-promise-rejection-order.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        New files.

        * bindings/scripts/CodeGenerator.pm:
        (IsPromiseType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GetBaseIDLType):
        Binding support for Promise<T> attributes.

        * bindings/js/JSDOMConvert.h:
        * bindings/js/JSDOMConvertPromise.h: Copied from Source/JavaScriptCore/runtime/JSPromise.h.
        (WebCore::Converter<IDLPromise<T>>::convert):
        (WebCore::JSConverter<IDLPromise<T>>::convert):
        Promise<T> binding conversion is currently unimplemented, which only means
        web developers creating their own PromiseRejectionEvent will not get
        autowrapping of values assigned to `promise` in event initialization.
        Engine generated events will have expected behavior.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::promiseRejectionTracker):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        Implement HostPromiseRejectionTracker hook for Document but not Worker.
        Passes through to the ScriptExecutionContext's tracker.

        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::JSMainThreadExecState::didLeaveScriptContext):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::~JSMainThreadExecState):
        When completing script execution and performing microtasks notify
        about rejected promises. Technically this should go inside of
        performing a microtask checkpoint, except lacking EventLoop
        concepts we use ScriptExecutionState.

        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/PromiseRejectionEvent.cpp: Added.
        (WebCore::PromiseRejectionEvent::PromiseRejectionEvent):
        (WebCore::PromiseRejectionEvent::~PromiseRejectionEvent):
        * dom/PromiseRejectionEvent.h: Added.
        * dom/PromiseRejectionEvent.idl: Added.
        New PromiseRejectionEvent event interface.

        * dom/GlobalEventHandlers.idl:
        New onunhandledrejection and onrejectionhandled.

        * dom/RejectedPromiseTracker.cpp: Added.
        (WebCore::RejectedPromise::RejectedPromise):
        (WebCore::RejectedPromise::globalObject):
        (WebCore::RejectedPromise::promise):
        (WebCore::UnhandledPromise::UnhandledPromise):
        (WebCore::UnhandledPromise::callStack):
        (WebCore::RejectedPromiseTracker::RejectedPromiseTracker):
        (WebCore::RejectedPromiseTracker::~RejectedPromiseTracker):
        (WebCore::createScriptCallStackFromReason):
        (WebCore::RejectedPromiseTracker::promiseRejected):
        (WebCore::RejectedPromiseTracker::promiseHandled):
        (WebCore::RejectedPromiseTracker::processQueueSoon):
        (WebCore::RejectedPromiseTracker::reportUnhandledRejections):
        (WebCore::RejectedPromiseTracker::reportRejectionHandled):
        * dom/RejectedPromiseTracker.h: Added.
        Track and report rejected promises. The promises are tracked weakly
        allowing them to be collected before they are reported. When reporting
        we dispatch PromiseRejectionEvent events, and if the default is not
        prevented we log a message to the console.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection):
        (WebCore::ScriptExecutionContext::ensureRejectedPromiseTrackerSlow):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::ensureRejectedPromiseTracker):
        Each ScriptExecutionContext can own a rejected promise tracker.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pauseInternal):
        https://html.spec.whatwg.org/multipage/embedded-content.html#internal-pause-steps
        Internal pause steps say to timeupdate, pause, and rejecting pending play promises
        should all happen in a queued task. Here the first two actions are already scheduled
        on tasks, but rejecting play promises was not being done in a task, so this makes
        that change.

        * Modules/streams/ReadableStream.js:
        (pipeThrough):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamReaderGenericInitialize):
        (readableStreamError):
        (readableStreamReaderGenericRelease):
        Satisfy parts of the Streams specification which state to set the
        [[PromiseIsHandled]] internal state of promises created internally
        by the Streams APIs. This prevents some internal promises from
        appearing as unhandled promise rejections.

2017-04-27  Chris Dumez  <cdumez@apple.com>

        Align colspan/rowspan limits with the latest HTML specification
        https://bugs.webkit.org/show_bug.cgi?id=171322

        Reviewed by Darin Adler.

        Align colspan/rowspan limits with the latest HTML specification after:
        - https://github.com/whatwg/html/pull/1993

        The following changes were made:
        - Our rowspan limit was raised from 8190 to 65534
        - A colspan limit of 1000 was introduced. Blink has UseCounter data showing that
          colspans over 1000 are extremely rare and Gecko has data showing that when we
          get a colspan greater than 1000, it is usually a bug. Therefore, this change
          should be fine.
        - The limits are now properly reflected via the IDL attributes instead of lying
          to the Web about the colspan / rowspan we are using internally.

        Test: imported/w3c/web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::colSpan):
        (WebCore::HTMLTableCellElement::rowSpan):
        (WebCore::HTMLTableCellElement::rowSpanForBindings):
        (WebCore::HTMLTableCellElement::setColSpan):
        * html/HTMLTableCellElement.h:
        * html/HTMLTableCellElement.idl:
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLIntegerInternal):
        (WebCore::parseHTMLInteger):
        (WebCore::parseHTMLNonNegativeInteger):
        (WebCore::parseValidHTMLNonNegativeIntegerInternal):
        (WebCore::parseHTTPRefreshInternal):
        * html/parser/HTMLParserIdioms.h:
        (WebCore::parseHTMLInteger):
        (WebCore::parseHTMLNonNegativeInteger):

        (WebCore::clampHTMLNonNegativeIntegerToRange):
        Add utility function to implement:
        - https://html.spec.whatwg.org/#clamped-to-the-range

2017-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        WKUIDelegatePrivate needs a hook to vend data used to initialize item providers for data interaction
        https://bugs.webkit.org/show_bug.cgi?id=171386
        <rdar://problem/31557237>

        Reviewed by Beth Dakin.

        Teach WebItemProviderPasteboard to remember what WebItemProviderRegistrationInfoList it was initialized with
        when beginning a drag. This information is cleared out the next time the list of item providers is set to
        something different, which happens when the data interaction session concludes.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]):
        (-[WebItemProviderPasteboard registrationInfoAtIndex:]):
        (-[WebItemProviderPasteboard itemProviderAtIndex:]):

2017-04-27  Brady Eidson  <beidson@apple.com>

        Refactor SessionID to support multiple non-ephemeral (persistent) sessions.
        https://bugs.webkit.org/show_bug.cgi?id=171367

        Reviewed by Andy Estes.

        This is also a nice general cleanup of SessionID, including privatizing the "arbitrary number" constructor
        and moving encode/decode into the class.

        No new tests (Refactor, no behavior change yet).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * page/SessionID.cpp: Added.
        (WebCore::SessionID::generatePersistentSessionID):
        (WebCore::SessionID::generateEphemeralSessionID):
        (WebCore::SessionID::enableGenerationProtection):
        
        * page/SessionID.h:
        (WebCore::SessionID::SessionID):
        (WebCore::SessionID::emptySessionID):
        (WebCore::SessionID::hashTableDeletedValue):
        (WebCore::SessionID::defaultSessionID):
        (WebCore::SessionID::legacyPrivateSessionID):
        (WebCore::SessionID::isValid):
        (WebCore::SessionID::isEphemeral):
        (WebCore::SessionID::encode):
        (WebCore::SessionID::decode):
        (WTF::HashTraits<WebCore::SessionID>::constructDeletedValue):
        (WTF::HashTraits<WebCore::SessionID>::isDeletedValue):

2017-04-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Attempt to fix a PLT regression on Mac
        <rdar://problem/31826998>

        Unreviewed.

        Disable passing the TypeIdentifierHint to CGImageSourceCreateIncremental()
        on Mac for now.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::ImageDecoder):

2017-04-27  Daniel Bates  <dabates@apple.com>

        Rename callerDOMWindow()/CallerDocument to incumbentDOMWindow()/IncumbentDocument
        https://bugs.webkit.org/show_bug.cgi?id=171145

        Reviewed by Saam Barati.

        Standardize on the terminology "incumbent" to refer to "most-recently-entered author
        function or script on the stack, or the author function or script that originally
        scheduled the currently-running callback" (1).

        [1] <https://html.spec.whatwg.org/multipage/webappapis.html#realms-settings-objects-global-objects> (27 April 2017)

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::incumbentDOMWindow):
        (WebCore::callerDOMWindow): Deleted.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionWithCallerDocumentArgumentCaller):
        (WebCore::jsTestObjPrototypeFunctionWithCallerWindowArgumentCaller):
        * bindings/scripts/test/TestObj.idl:
        * page/DOMWindow.idl:

2017-04-27  Youenn Fablet  <youenn@apple.com>

        LayoutTest webrtc/datachannel/datachannel-event.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=171092
        <rdar://problem/31748066>

        Reviewed by Eric Carlson.

        Covered by manual testing on iterating on the crashing tests.
        With the patch, they appear to no longer crash.

        The current RTCPeerConnection/RTCController was expecting that peer connections would be stopped before the controller.
        This assumption is sometimes wrong.
        Adding clean-up on both sides so that if controller goes away, it notifies its peer connections that they are unregistered.

        * Modules/mediastream/RTCController.cpp:
        (WebCore::RTCController::~RTCController):
        * Modules/mediastream/RTCController.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        (WebCore::RTCPeerConnection::~RTCPeerConnection):
        (WebCore::RTCPeerConnection::doStop):
        (WebCore::RTCPeerConnection::registerToController):
        (WebCore::RTCPeerConnection::unregisterFromController):
        (WebCore::RTCPeerConnection::rtcController): Deleted.
        * Modules/mediastream/RTCPeerConnection.h:

2017-04-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r213764): Async decoding of animated images is disabled for ImageDocument
        https://bugs.webkit.org/show_bug.cgi?id=170333

        Reviewed by Simon Fraser.

        The way the image drawing settings are transfered from the Settings to
        BitmapImage is problematic. The drawing settings are retrieved from the
        CachedImageObserver which store them in the constructor only if the
        CachedImage as a loader. In the case of ImageDocument, there isn't loader
        set in CachedImage so the settings of ImageDocument are not set. Also
        the CachedImage can be used after loading by another document which may
        have a different drawing settings.

        The fix is to make BitmapImage reads the drawing settings every time it 
        is drawn as a foreground or background image in a RenderElement.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImageObserver::CachedImageObserver):
        * loader/cache/CachedImage.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::setDrawingSettings):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::shouldUseAsyncDecodingForLargeImages): I was
        trying to disable the async image decoding temporarily but this way will
        even prevent testing it until it is enabled. Disable it through WK1 and
        WK2 preferences.
        (WebCore::BitmapImage::shouldUseAsyncDecodingForAnimatedImages):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageObserver.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):

2017-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Performing data interaction with plain text into a contenteditable does not insert any content
        https://bugs.webkit.org/show_bug.cgi?id=171381

        Reviewed by Tim Horton.

        Attempt to read plain-text-conformant UTI types as kUTTypePlainText before reading them as kUTTypeText.
        This allows WebItemProviderPasteboard to properly materialize an NSString in -valuesForPasteboardType:
        inItemSet: using a pre-loaded NSData blob.

        This scenario is covered by DataInteractionTests.ExternalSourceUTF8PlainTextOnly, but DataInteractionTests
        are temporarily disabled due to incompatibilities with the current internal SDK.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::readPasteboardWebContentDataForType):

2017-04-27  Chris Dumez  <cdumez@apple.com>

        Element.getBoundingClientRect() / getClientRects() should return a DOMRect types
        https://bugs.webkit.org/show_bug.cgi?id=171226

        Reviewed by Simon Fraser.

        Element.getBoundingClientRect() / getClientRects() should return a DOMRect types
        as per:
        - https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface

        DOMRect is compatible with ClientRect, which we used to return so the risk should
        be low.

        Tests: fast/css/DOMRect-attributes-prototype.html
               fast/css/DOMRect-serialization.html
               fast/dom/Element/getClientRects-return-type.html

        * dom/ClientRectList.cpp:
        (WebCore::ClientRectList::ClientRectList):
        * dom/ClientRectList.h:
        (WebCore::ClientRectList::create):
        * dom/DOMRect.h:
        (WebCore::DOMRect::create):
        * dom/DOMRectReadOnly.h:
        * dom/Element.cpp:
        (WebCore::toDOMRectVector):
        (WebCore::Element::getClientRects):
        (WebCore::Element::getBoundingClientRect):
        * dom/Element.h:
        * dom/Element.idl:
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::displayLastTextTrackCueBox):

2017-04-27  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Expose elements with the ARIA "feed" role
        https://bugs.webkit.org/show_bug.cgi?id=171184

        Reviewed by Chris Fleizach.

        Map elements with the "feed" role to the internal ApplicationGroupRole
        AccessibilityRole. This prevents them from being unexpectedly pruned from
        the accessibility tree, and causes them to be exposed with ATK_ROLE_PANEL
        in WebKitGtk and AXGroup in Safari.

        No new tests needed. Instead, add the "feed" role to roles-exposed.html,
        xml-roles-exposed.html, and roles-computedRoleString.html.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):

2017-04-27  Brady Eidson  <beidson@apple.com>

        Update NetworkStorageSession to support multiple persistent sessions and explicitly set cookie storages.
        https://bugs.webkit.org/show_bug.cgi?id=171365

        Reviewed by Andy Estes.

        No new tests (No testable behavior change yet).

        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::destroySession):
        * platform/network/NetworkStorageSession.h:
        
        * platform/network/NetworkStorageSessionStub.cpp:
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::createCFStorageSessionForIdentifier):
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::defaultStorageSession):
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        (WebCore::NetworkStorageSession::cookieStorage):
        
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::ensureSession):
        
        * platform/spi/cf/CFNetworkSPI.h:

2017-04-27  Zalan Bujtas  <zalan@apple.com>

        Use text-shadow to visualize simple line layout coverage.
        https://bugs.webkit.org/show_bug.cgi?id=171379

        Reviewed by Antti Koivisto.

        It's more subtle (for everyday use).

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::paintDebugBorders): Deleted.

2017-04-27  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] ARIA alertdialogs should be exposed with ROLE_DIALOG
        https://bugs.webkit.org/show_bug.cgi?id=171187

        Reviewed by Chris Fleizach.

        Map ApplicationAlertDialogRole to ATK_ROLE_DIALOG. While ATK_ROLE_ALERT is
        appropriate as far as ATK is concerned, the Core Accessibility API Mappings
        map ARIA's alertdialog role to ATK_ROLE_DIALOG. We should be consistent
        with the spec. The fact that this is an alert dialog can still be obtained
        via the AtkObject attributes.

        No new tests needed. Update the expectations for roles-exposed.html,
        xml-roles-exposed.html, and aria-mappings.html to reflect the change.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2017-04-27  Antti Koivisto  <antti@apple.com>

        Repeated layouts in Mail due to viewport units being used with auto-sizing
        https://bugs.webkit.org/show_bug.cgi?id=171371
        <rdar://problem/28780084>

        Reviewed by Zalan Bujtas.

        Test: css3/viewport-percentage-lengths/vh-auto-size.html

        Auto-sizing code would adjust the size of the view in the beginning of layout(). This would
        end up invalidating style for elements that use vh units and we would perform main layout
        with unclean style. This would result in endless layout loops and hit assert on debug.

        * page/FrameView.cpp:
        (WebCore::FrameView::availableContentSizeChanged):

            Ensure we heve clean style after resize if we are in pre-layout.

2017-04-27  Alex Christensen  <achristensen@webkit.org>

        Modernize Frame.h
        https://bugs.webkit.org/show_bug.cgi?id=171357

        Reviewed by Andy Estes.

        Frame.h has several std::unique_ptrs that are created in the constructor, never null,
        and destroyed in the destructor.  This is what WTF::UniqueRef is for, and using UniqueRef
        allows us to not check for null values because a UniqueRef can never be null.
        An interesting case was the EventHandler, which we explicitly set to nullptr in the destructor
        of MainFrame, a subclass of Frame.  We added this in r199181 to fix a crash tested by
        fast/events/wheel-event-destroys-frame.html and this improved lifetime also does not crash
        or assert in that test.

        Using UniqueRef also requires const correctness, which this patch adds when necessary.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::dispatchTouchEvent):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        * editing/Editor.cpp:
        (WebCore::Editor::isSelectTrailingWhitespaceEnabled):
        (WebCore::Editor::computeAndSetTypingStyle):
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::contains):
        (WebCore::FrameSelection::copyTypingStyle):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::setTypingStyle):
        * loader/EmptyClients.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::setView):
        (WebCore::Frame::injectUserScripts):
        * page/Frame.h:
        (WebCore::Frame::editor):
        (WebCore::Frame::eventHandler):
        (WebCore::Frame::selection):
        (WebCore::Frame::animation):
        (WebCore::Frame::script):
        (WebCore::Frame::eventHandlerPtr): Deleted.
        * page/MainFrame.cpp:
        (WebCore::MainFrame::~MainFrame):
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::handleContextMenuEvent):
        * replay/UserInputBridge.h:

2017-04-27  Andy Estes  <aestes@apple.com>

        Fix the macOS build.

        * platform/mac/WebPlaybackControlsManager.h:

2017-04-27  Zalan Bujtas  <zalan@apple.com>

        Text gets cut off when bailing out of simple line layout with widows.
        https://bugs.webkit.org/show_bug.cgi?id=171370
        <rdar://problem/31563414>

        Reviewed by Antti Koivisto.

        Normal line layout requires an extra layout to handle widows. See RenderBlockFlow::relayoutToAvoidWidows. 

        Test: fast/multicol/simple-line-layout-widows-when-switching-over-to-normal-line-layout.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::ensureLineBoxes):

2017-04-27  Dean Jackson  <dino@apple.com>

        Use the correct modern-media-controls
        https://bugs.webkit.org/show_bug.cgi?id=171358

        Reviewed by Antoine Quint.

        * WebCore.xcodeproj/project.pbxproj:

2017-04-26  Dan Bernstein  <mitz@apple.com>

        Reverted r215774.

        That change wasn’t doing what it was intended to do and was inappropriate for WebCore.

        * WebCore.xcodeproj/project.pbxproj:

2017-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Attempt to fix a PLT regression.
        <rdar://problem/31826998>

        Unreviewed.

        Disable passing the TypeIdentifierHint to CGImageSourceCreateIncremental()
        on iOS for now.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::ImageDecoder):

2017-04-26  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] ARIA buttons which have a popup should be ATK_ROLE_PUSH_BUTTON; not ATK_ROLE_COMBO_BOX
        https://bugs.webkit.org/show_bug.cgi?id=171182

        Reviewed by Chris Fleizach.

        Test: accessibility/gtk/button-with-aria-haspopup-is-not-a-combobox.html

        WebCore Accessibility assigns PopUpButtonRole to collapsed select elements,
        which the ATK code correctly maps to ATK_ROLE_COMBO_BOX. It turns out that
        WebCore Accessibility also maps the ARIA button role to PopUpButtonRole if
        it also has aria-haspopup. Add a check to atkRole() so that the latter case
        is mapped to ATK_ROLE_PUSH_BUTTON.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2017-04-26  Tim Horton  <timothy_horton@apple.com>

        Should not drag x-apple-data-detectors links
        https://bugs.webkit.org/show_bug.cgi?id=171352
        <rdar://problem/31309081>

        Reviewed by Beth Dakin.

        Test: fast/events/do-not-drag-and-drop-data-detectors-link.html

        These links are only meaningful in the context of the original document,
        so they should not be draggable.

        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::dataDetectorURLProtocol):
        (WebCore::DataDetection::isDataDetectorURL):
        * page/DragController.cpp:
        (WebCore::isDraggableLink):
        Disallow dragging of <a href="x-apple-data-detectors://..."> links.

2017-04-26  Tim Horton  <timothy_horton@apple.com>

        Revert accidentally smushed commit.

        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::dataDetectorURLProtocol): Deleted.
        (WebCore::DataDetection::isDataDetectorURL): Deleted.
        * page/DragController.cpp:
        (WebCore::isDraggableLink):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink):

2017-04-26  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r215686): ASSERTION FAILED: data seen with webarchive/loading tests
        https://bugs.webkit.org/show_bug.cgi?id=171340

        Reviewed by Brady Eidson.

        This fixes a flaky assertion in webarchive/loading/missing-data.html

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::append):
        If there's no CFDataRef, there's no need to append data.
        This happens sometimes.

2017-04-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215814.

        The LayoutTest for this change is failing on ios-simulator and
        is flaky on macOS.

        Reverted changeset:

        "Response.blob() does not set the content-type based on the
        header value."
        https://bugs.webkit.org/show_bug.cgi?id=170849
        http://trac.webkit.org/changeset/215814

2017-04-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebItemProviderPasteboard should not synchronously load provided data
        https://bugs.webkit.org/show_bug.cgi?id=171341
        <rdar://problem/31614010>

        Reviewed by Tim Horton.

        Refactors WebItemProviderPasteboard to not require asynchronously loading item provider data. To accomplish this,
        we ensure that before performing data interaction, the UTI type that the data operation target should consume is
        propagated to the UI process prior to the web process receiving the signal from the UI process to begin the
        data operation itself. This information is sent via WebPlatformStrategies::updatePreferredTypeIdentifiers, a new
        pasteboard helper function.

        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::dragIsHandledByDocument):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::updatePreferredTypeIdentifiersForDragHandlingMethod):
        (WebCore::DragController::tryDocumentDrag):

        Give DragHandlingMethod a richer representation of what type of action will be performed. DragController::
        updatePreferredTypeIdentifiersForDragHandlingMethod uses this to determine what kinds of UTIs are acceptable for
        the current drop session.

        * page/DragController.h:
        (WebCore::DragController::documentIsHandlingNonDefaultDrag):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::updatePreferredTypeIdentifiersForDragHandlingMethod):

        Updates the data interaction pasteboard's list of preferred type identifiers it should load upon data operation.

        * platform/DragData.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::updatePreferredTypeIdentifiers):
        * platform/ios/WebItemProviderPasteboard.mm:

        Introduce _preferredTypeIdentifiers, which -doAfterLoadingProvidedContentIntoFileURLs: uses as a hint when
        determining which UTI to load for an item provider. In the absence of preferred type identifiers, the default
        behavior is to use the highest fidelity type adhering to "public.content".

        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard updatePreferredTypeIdentifiers:]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard dataForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):

        Remove calls to -createObjectOfClass: and -copyDataRepresentation:. Instead, rely solely on the loaded file URL
        to read and initialize data and objects from the pasteboard.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:]):
        (-[WebItemProviderPasteboard _tryToCreateObjectOfClass:usingProvider:]): Deleted.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::updatePreferredTypeIdentifiers):

2017-04-26  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Elements with a defined, non-false value for aria-current should expose ATK_STATE_ACTIVE
        https://bugs.webkit.org/show_bug.cgi?id=171163

        Reviewed by Chris Fleizach.

        Add ATK_STATE_ACTIVE to the state set of elements which have a valid, non-false
        value for aria-current, expose the value of via the "current" AtkObject attribute,
        and emit state-change notifications when the value of aria-current changes from
        non-false to false, or vice versa.

        Tests: accessibility/gtk/aria-current-changed-notification.html
               accessibility/gtk/aria-current.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAttributeChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIACurrent):
        (WebCore::AccessibilityObject::ariaCurrentValue):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (setAtkStateSetFromCoreObject):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]): Moved code returning
        string value for aria-current into AccessibilityObject:ariaCurrentValue().

2017-04-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        WebItemProviderPasteboard should fetch preloaded assets from disk when possible
        https://bugs.webkit.org/show_bug.cgi?id=171320
        <rdar://problem/31614010>

        Reviewed by Tim Horton.

        Adds a mechanism to WebItemProviderPasteboard to remember the temporary file URLs of assets it has loaded using
        doAfterLoadingProvidedContentIntoFileURLs:. When retrieving data from the pasteboard, we then see if we can
        first fetch serialized data straight from disk instead of having to go through the item provider in both
        -dataForPasteboardType:inItemSet: and -valuesForPasteboardType:inItemSet:.

        See below annotations for more detail.

        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::filenamesForDataInteraction):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:

        Introduces _typeToFileURLMaps, an array of dictionaries. A dictionary at the ith index of this array represents
        a mapping of UTIs to loaded temo file URLs for the ith UIItemProvider in the _itemProviders array. Before data
        interaction is performed, all entries in this array will be empty.

        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard _preLoadedDataConformingToType:forItemProviderAtIndex:]):
        (-[WebItemProviderPasteboard dataForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):

        Consult any loaded assets on disk before hitting UIItemProviders via the new
        -_preLoadedDataConformingToType:forItemProviderAtIndex: helper method.

        (-[WebItemProviderPasteboard _tryToCreateObjectOfClass:usingProvider:]):
        (-[WebItemProviderPasteboard fileURLsForDataInteraction]):

        Traverse _typeToFileURLMaps to collect all file URLs.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:]):

        Refactored to populate and set _typeToFileURLMaps when loading completes, rather than an array of file URLs.

        (-[WebItemProviderPasteboard _tryToCreateAndAppendObjectOfClass:toArray:usingProvider:]): Deleted.
        (-[WebItemProviderPasteboard filenamesForDataInteraction]): Deleted.

        Correct an erroneously named method (replaces filenames with fileURLs).

2017-04-26  Youenn Fablet  <youenn@apple.com>

        LayoutTest webrtc/datachannel/basic.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=170154
        <rdar://problem/31288423>

        Reviewed by Geoffrey Garen.

        Before the patch, we are setting the channel handler client to null and then unregistering from observer to
        libwebrtc data channel. Since this happens in two different threads, there might be a timing issue.

        Removing this risk by first unregistering (done synchronously on the other thread), before setting client to null.
        Made some clean-up related refactoring.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::close):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::setClient):
        (WebCore::LibWebRTCDataChannelHandler::close):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * platform/mediastream/RTCDataChannelHandler.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp:
        (WebCore::RTCDataChannelHandlerMock::setClient):
        * platform/mock/RTCDataChannelHandlerMock.h:

2017-04-26  Alex Christensen  <achristensen@webkit.org>

        Make user script injection more robust
        https://bugs.webkit.org/show_bug.cgi?id=171339
        <rdar://problem/30643691>

        Reviewed by Geoffrey Garen.

        * loader/EmptyClients.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::forEachUserScript):
        (WebCore::UserContentController::forEachUserStyleSheet):
        (WebCore::UserContentController::forEachUserMessageHandler):
        * page/UserContentController.h:
        * page/UserContentProvider.h:

2017-04-26  Zalan Bujtas  <zalan@apple.com>

        RTL: recent searches popover is displayed in incorrect location
        https://bugs.webkit.org/show_bug.cgi?id=171338
        <rdar://problem/31377807>

        Reviewed by Dean Jackson.

        Compute the absolute coordinates for the popup the same way we do for the select dropdown.

        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::showPopup):

2017-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Restrict WebKit image formats to a known whitelist
        https://bugs.webkit.org/show_bug.cgi?id=170700

        Reviewed by Tim Horton.

        If the image format is not supported, the load should be canceled and the
        image is marked a broken image.

        Test: fast/images/image-formats-support.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addIncrementalDataBuffer):
        (WebCore::CachedImage::setImageDataBuffer):
        (WebCore::CachedImage::finishLoading):
        * loader/cache/CachedImage.h:

2017-04-26  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Implement support for new ARIA 1.1 values of aria-haspopup
        https://bugs.webkit.org/show_bug.cgi?id=171164

        Reviewed by Chris Fleizach.

        In ARIA 1.1, aria-haspopup's value type changed from true/false to a token.
        Values: true, false (default, unless it's a combobox), dialog, grid, listbox
        (default for combobox), menu, and tree. Any value of aria-haspopup that is
        not included in the list of allowed values, including an empty string, must
        be treated as if the value false had been provided.

        Add AccessibilityObject::ariaPopupValue() to validate the value, handle implicit
        values, and give platform assistive technologies a means to access that value.

        If there is a valid, non-false value of aria-haspopup, include ATK_STATE_HAS_POPUP
        in the AtkStateSet. Lastly, expose the value (rather than true/false) via the "haspop"
        AtkObject attribute.

        Test: accessibility/gtk/aria-haspopup.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::ariaPopupValue):
        (WebCore::AccessibilityObject::supportsARIAHasPopup):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaHasPopup):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (setAtkStateSetFromCoreObject):

2017-04-26  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-04-26  Antti Koivisto  <antti@apple.com>

        Enable expired-only reload policy on Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=171264
        <rdar://problem/31807637>

        Reviewed by Andreas Kling.

        Limit the behavior to http and data URLs (where we explicitly know about expiration).

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):

            Pass the URL so we can test for protocol.

        * loader/FrameLoader.h:
        * loader/NavigationAction.cpp:
        (WebCore::navigationType):

            Test for reload navigation type correctly.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore::CachedResourceLoader::cachePolicy):
        * loader/cache/CachedResourceLoader.h:

2017-04-26  WebKit Contributor  <webkitcontrib@gmail.com>

        Response.blob() does not set the content-type based on the header value.
        https://bugs.webkit.org/show_bug.cgi?id=170849

        Reviewed by Alex Christensen.

        The Fetch API specification requires setting the blob contentType
        using the Content-Type header value, if present.  Previously the
        FetchResponse class only called updateContentType() when first
        created even though all the headers were not available.  Call
        updateContentType() again after the headers are populated.

        This change allows WebKit to pass the "Consume response's body: from
        fetch to blob" case in the WPT response-consume.html test.

        Test: http://w3c-test.org/fetch/api/response/response-consume.html

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse): Modified to
        call FetchBodyOwner::updateContentType() after filling m_headers.

2017-04-26  Andy Estes  <aestes@apple.com>

        Try to fix the macOS Sierra build.

        * platform/mac/WebVideoFullscreenInterfaceMac.mm:

2017-04-26  Andy Estes  <aestes@apple.com>

        [macOS] Add picture-in-picture support to WebPlaybackControlsManager
        https://bugs.webkit.org/show_bug.cgi?id=171328
        <rdar://problem/29875010>

        Reviewed by Jer Noble.

        * platform/cocoa/WebPlaybackSessionModel.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::togglePictureInPicture): If the media element
        is currently in PiP fullscreen mode, exit fullscreen. Otherwise, enter PiP fullscreen mode.
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager canTogglePictureInPicture]): Added. Returns YES if
        -allowsPictureInPicturePlayback returns YES.
        (-[WebPlaybackControlsManager togglePictureInPicture]): Added. Calls
        WebPlaybackSessionModel::togglePictureInPicture().
        * platform/mac/WebVideoFullscreenInterfaceMac.mm:
        (WebCore::WebVideoFullscreenInterfaceMac::enterFullscreen): Added a call to
        -[WebPlaybackControlsManager setPictureInPictureActive:YES].
        (WebCore::WebVideoFullscreenInterfaceMac::exitFullscreen): Added a call to
        -[WebPlaybackControlsManager setPictureInPictureActive:NO].
        (WebCore::WebVideoFullscreenInterfaceMac::exitFullscreenWithoutAnimationToMode): Ditto.
        * platform/spi/cocoa/AVKitSPI.h: Declared new SPI on AVTouchBarPlaybackControlsControlling.

2017-04-25  Dean Jackson  <dino@apple.com>

        [Color] Make gradients work with ExtendedColors
        https://bugs.webkit.org/show_bug.cgi?id=171315
        <rdar://problems/31830177>

        Reviewed by Antoine Quint.

        Allow gradients to hold Color objects, and thus
        handle ExtendedColor. Implement the backend for
        CoreGraphics.

        Test: css3/color/gradients.html

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::addColorStop): Just copy the Color now.
        (WebCore::compareStops): Handle rename of stop to offset.
        (WebCore::Gradient::hasAlpha): Use Color's helper.
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::ColorStop::ColorStop): Rename stop
        to offset, and store a Color rather than four floating
        point values.
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient): Use the CG method
        that can handle CGColorRefs with ColorSpace values, and
        pass the Extended sRGB space which should be no change for
        all existing gradients but also handle ColorSpaces like
        Display P3.
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops):

2017-04-25  Alex Christensen  <achristensen@webkit.org>

        Encoded filename should be decoded for WKContentExtension.identifier
        https://bugs.webkit.org/show_bug.cgi?id=171316

        Reviewed by Andy Estes.

        * platform/FileSystem.h:

2017-04-26  Frederic Wang  <fwang@igalia.com>

        Fix typo in RenderFrameBase
        https://bugs.webkit.org/show_bug.cgi?id=171324

        Reviewed by Zalan Bujtas.

        No new tests, behavior unchanged.

        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        (WebCore::RenderFrameBase::performLayoutWithFlattening):
        (WebCore::RenderFrameBase::peformLayoutWithFlattening): Deleted.
        * rendering/RenderFrameBase.h:

2017-04-26  Zalan Bujtas  <zalan@apple.com>

        Forced page break on :after triggers infinite loop in column balancing
        https://bugs.webkit.org/show_bug.cgi?id=171309
        rdar://problem/26285884

        Reviewed by David Hyatt.

        Stop trying to balance the columns when the forced page breaks >= the number of
        columns even when this number is 1. Content will always overflow to the next page.
        see https://chromium.googlesource.com/chromium/src/+/fbbebf38cefb2712c912581eccb046ef363ec84e%5E%21/#F2 

        Test: fast/multicol/infinite-loop-when-forced-break.html

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):

2017-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Attempt to fix a JetStream regression.
        <rdar://problem/31742414>

        Unreviewed.

        Disable async decoding for large images till the flickering bug wk170640
        is fixed.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::shouldUseAsyncDecodingForLargeImages):

2017-04-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215767.

        The LayoutTest for this change is a flaky failure.

        Reverted changeset:

        "Restrict WebKit image formats to a known whitelist"
        https://bugs.webkit.org/show_bug.cgi?id=170700
        http://trac.webkit.org/changeset/215767

2017-04-26  Dave Hyatt  <hyatt@apple.com>

        Improve wavy underline rendering
        https://bugs.webkit.org/show_bug.cgi?id=171281

        Reviewed by Sam Weinig.

        Change wavy underline rendering to use font size instead of stroke
        thickness as a way to tune it. Cut the extra offset from 2 to 1.
        Change the parameters to make the line flatter and to make the proportion
        of the wave that renders underneath a glyph the same.

        * rendering/TextDecorationPainter.cpp:
        (WebCore::strokeWavyTextDecoration):
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::getWavyStrokeParameters):
        (WebCore::visualOverflowForDecorations):
        * style/InlineTextBoxStyle.h:
        (WebCore::wavyOffsetFromDecoration):

2017-04-24  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Remove most of the usage of SizingOperation
        https://bugs.webkit.org/show_bug.cgi?id=171225

        Reviewed by Darin Adler.

        SizingOperation was added as a way to modify the behaviour of the track sizing algorithm
        with the specifics for intrinsic size computations. The problem is that although intrinsic
        size computation does imply indefinite sizes, the opposite is not always true. For example,
        a grid container with height:auto would compute the row sizes with an indefinite size but is
        not part of the intrinsic size (preferred widths) computation.

        That's why it was wrongly used in some parts of the current code, in most of the cases is
        more than enough to check whether the available space is indefinite or not. In order to do
        that we have to keep both available sizes (height & width) around all the time to properly
        support orthogonal flows.

        This change does not imply any change in behaviour.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::setAvailableSpace):
        (WebCore::GridTrackSizingAlgorithm::computeTrackBasedSize):
        (WebCore::GridTrackSizingAlgorithm::initialBaseSize):
        (WebCore::GridTrackSizingAlgorithm::initialGrowthLimit):
        (WebCore::GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem):
        (WebCore::GridTrackSizingAlgorithm::increaseSizesToAccommodateSpanningItems):
        (WebCore::GridTrackSizingAlgorithm::assumedRowsSizeForOrthogonalChild):
        (WebCore::GridTrackSizingAlgorithm::gridAreaBreadthForChild):
        (WebCore::GridTrackSizingAlgorithm::gridTrackSize):
        (WebCore::IndefiniteSizeStrategy::findUsedFlexFraction):
        (WebCore::IndefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded):
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
        (WebCore::GridTrackSizingAlgorithm::setup):
        (WebCore::GridTrackSizingAlgorithm::reset):
        * rendering/GridTrackSizingAlgorithm.h:
        (WebCore::GridTrackSizingAlgorithmStrategy::availableSpace):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::availableSpaceForGutters):
        (WebCore::RenderGrid::computeTrackBasedLogicalHeight):
        (WebCore::RenderGrid::computeTrackSizesForDefiniteSize):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::gridGap):
        (WebCore::RenderGrid::guttersSize):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize):
        (WebCore::RenderGrid::computeAutoRepeatTracksCount):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::trackSizesForComputedStyle):
        (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded):
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
        (WebCore::RenderGrid::populateGridPositionsForDirection):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::RenderGrid::gridGapForDirection): Deleted.
        * rendering/RenderGrid.h:

2017-04-26  Frederic Wang  <fwang@igalia.com>

        Remove Document::*FrameElementsShouldIgnoreScrolling
        https://bugs.webkit.org/show_bug.cgi?id=171271

        Reviewed by Chris Dumez.

        setFrameElementsShouldIgnoreScrolling and frameElementsShouldIgnoreScrolling were
        introduced bug 23072 in order to work around a bug in the Dictionary application.
        However, this was removed in bug 132095 and hence the functions are no longer necessary.

        No new tests.

        * dom/Document.h:
        (WebCore::Document::setFrameElementsShouldIgnoreScrolling): Deleted.
        (WebCore::Document::frameElementsShouldIgnoreScrolling): Deleted.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):

2017-04-26  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] CryptoKeyRSA: implement create(), keySizeInBits(), buildAlgorithm(), exportData()
        https://bugs.webkit.org/show_bug.cgi?id=171213

        Reviewed by Michael Catanzaro.

        CryptoKeyRSA::create() validates the specified key type along with the
        provided data. If everything is OK, it then proceeds to build the key
        of the appropriate type through an s-expression that is constructed with
        the necessary data. We don't currently support creating private keys
        with any additional prime information (apart from p and q).

        CryptoKeyRSA::keySizeInBits() calls the helper getRSAModulusLength()
        function that find the modulus MPI in the key s-expression and returns
        the modulus data length in bits.

        CryptoKeyRSA::buildAlgorithm() returns KeyAlgorithm that's constructed
        from the appropriate name, this key's modulus length, and this key's
        public exponent data. It also specifies the hash if there is such a
        restriction for this key.

        CryptoKeyRSA::exportData() returns a properly-constructed
        CryptoKeyDataRSAComponents object. The public modulus and exponent are
        used in case the key is public. If the key is private, the secret
        exponent and the p and q prime numbers are retrieved in MPI format.
        They're then used to calculate the dp, dq and qi parameters that are
        exported in the JWK format. Note that libgcrypt internally switches
        the p and q prime numbers such that p < q, but the Web Crypto
        specification and the dependant RFCs expect that q < p. We address
        this by simply switching the roles of the two primes and follow the
        usual q < p assumption when exporting the primes and computing the
        dependant exponents and coefficients.

        No new tests -- existing ones cover this but don't work yet due to missing
        RSA-related CryptoAlgorithm implementations.

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::getRSAModulusLength):
        (WebCore::getParameterMPIData):
        (WebCore::getRSAKeyParameter):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::keySizeInBits):
        (WebCore::CryptoKeyRSA::buildAlgorithm):
        (WebCore::CryptoKeyRSA::exportData):

2017-04-25  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Enhance ways to convert an ECDSA signature binary into DER format
        https://bugs.webkit.org/show_bug.cgi?id=171287
        <rdar://problem/31735332>

        Reviewed by Brent Fulgham.

        Covered by existing tests.

        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        (WebCore::verifyECDSA):

2017-04-25  Brent Fulgham  <bfulgham@apple.com>

        Relax the event firing ASSERT for Attr changes
        https://bugs.webkit.org/show_bug.cgi?id=171236
        <rdar://problem/30516349>

        Reviewed by Dean Jackson.

        The assertions added in Bug 167318 were overly strict, and trigger for valid behavior.
        Relax the assertion preventing event dispatch for the case of Attr elements at the
        end of childrenChanged.

        Test: fast/dom/HTMLLinkElement/event-while-removing-attribute.html

        * dom/Attr.cpp:
        (WebCore::Attr::childrenChanged):

2017-04-25  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Introduce shorter time-to-live for cookie partition whitelisting
        https://bugs.webkit.org/show_bug.cgi?id=171295
        <rdar://problem/31823818>

        Reviewed by Brent Fulgham.

        Test: http/tests/loading/resourceLoadStatistics/partitioned-and-unpartitioned-cookie-with-partitioning-timeout.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::reduceTimeResolutionToOneDay): Deleted.
        (WebCore::reduceTimeResolution):
            Changed name to no longer lock this to a specific resolution.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Now calls WebCore::reduceTimeResolution().
        (WebCore::ResourceLoadObserver::setTimeToLiveCookiePartitionFree):
            Added for testing purposes.
        (WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler):
            Added for testing purposes.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::shouldPartitionCookies):
            Static inline convenience function.
        (WebCore::ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler):
            Now decides whether a domain should get partitioned cookies
            based on timeToLiveCookiePartitionFree.
            Removed clearFirst parameter since it's not needed here
            and it introduced complexity in keeping the store and the
            network process cache in sync.
        (WebCore::ResourceLoadStatisticsStore::setTimeToLiveCookiePartitionFree):
            Added for testing purposes.
        * loader/ResourceLoadStatisticsStore.h:

2017-04-25  Saam Barati  <sbarati@apple.com>

        JSArray::isArrayPrototypeIteratorProtocolFastAndNonObservable is wrong because it does not do the necessary checks on the base object
        https://bugs.webkit.org/show_bug.cgi?id=171150
        <rdar://problem/31771880>

        Reviewed by Sam Weinig.

        This patch moves the sequence converters to use the now fixed
        JSArray::isArrayPrototypeIteratorProtocolFastAndNonObservable test
        inside JSC.
        
        This patch also fixes a few bugs:
        1. Converting to a sequence of numbers must prove that the JSArray
        is filled only with Int32/Double. If there is a chance the array
        contains objects, the conversion to a numeric IDLType can be observable
        (via valueOf()), and can change the iterator protocol.
        2. There are other conversions that can have side effects a-la valueOf().
        This patch introduces a new static constant in the various Converter
        classes that tell the sequence converter if the conversion operation
        can have JS side effects. If it does have side effects, we fall back to
        the generic conversion that uses the iterator protocol. If not, we can
        do a faster version that iterates over each element of the array,
        reading it directly, and converting it.

        Tests: js/sequence-iterator-protocol-2.html
               js/sequence-iterator-protocol.html

        * bindings/js/JSDOMConvertAny.h: Does not have side effects.
        * bindings/js/JSDOMConvertBase.h: We pessimistically assume inside DefaultConverter that converions have side effects.
        * bindings/js/JSDOMConvertBoolean.h: Does not have side effects.
        * bindings/js/JSDOMConvertCallbacks.h: Does not have side effects.
        * bindings/js/JSDOMConvertObject.h: Does not have side effects.
        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::Detail::NumericSequenceConverter::convert):
        (WebCore::Detail::SequenceConverter::convert):

2017-04-25  Michael Saboff  <msaboff@apple.com>

        Call bmalloc scavenger first when handling a memory pressure event
        https://bugs.webkit.org/show_bug.cgi?id=171289

        Reviewed by Geoffrey Garen.

        Let bmalloc free any pages to the OS that it can before doing anything else.

        * page/MemoryRelease.cpp:
        (WebCore::releaseMemory):

2017-04-25  Dean Jackson  <dino@apple.com>

        Skip WebKitAdditions for Safari Technology Preview media controls
        https://bugs.webkit.org/show_bug.cgi?id=171302
        <rdar://problem/31823256>

        Reviewed by Simon Fraser.

        Safari Technology Preview should use the same controls
        as OpenSource.

        * WebCore.xcodeproj/project.pbxproj:

2017-04-25  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215730.

        The LayoutTest for this change is a flaky timeout on mac-wk1
        debug.

        Reverted changeset:

        "Enable expired-only reload policy on Mac and iOS"
        https://bugs.webkit.org/show_bug.cgi?id=171264
        http://trac.webkit.org/changeset/215730

2017-04-24  Matt Rajca  <mrajca@apple.com>

        Indicate presence of audio when handling autoplay events.
        https://bugs.webkit.org/show_bug.cgi?id=171227

        Reviewed by Alex Christensen.

        Added API tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::handleAutoplayEvent):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
        (WebCore::HTMLMediaElement::userDidInterfereWithAutoplay):
        (WebCore::HTMLMediaElement::setPlaybackWithoutUserGesture):
        * html/HTMLMediaElement.h:
        * page/AutoplayEvent.h:
        * page/ChromeClient.h:

2017-04-25  Aakash Jain  <aakash_jain@apple.com>

        WebCore.framework should restrict allowable_clients
        https://bugs.webkit.org/show_bug.cgi?id=171260

        Reviewed by Alexey Proskuryakov.

        * Configurations/WebCore.xcconfig: Adding allowable_client to all platform, in order to restrict WebCore
        from being directly linked on any platform.
        Moved WebKitLegacy and WebCoreTestSupport to OTHER_LDFLAGS_BASE.
        Removed WebKit2 as allowable_client from mac.
        Added iTunesU, Casablanca and Remote to OTHER_LDFLAGS_BASE_ios for iTunes related projects.
        Added WebKit, TVBooks, DumpRenderTree, WebKitTestRunner and TestWebKitAPI to OTHER_LDFLAGS_BASE_ios.

2017-04-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Restrict WebKit image formats to a known whitelist
        https://bugs.webkit.org/show_bug.cgi?id=170700

        Reviewed by Tim Horton.

        If the image format is not supported, the load should be canceled and the
        image is marked a broken image.

        Test: fast/images/image-formats-support.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addIncrementalDataBuffer):
        (WebCore::CachedImage::setImageDataBuffer):
        (WebCore::CachedImage::finishLoading):
        * loader/cache/CachedImage.h:

2017-04-25  Youenn Fablet  <youenn@apple.com>

        CoreAudioCaptureSource::suspend is asserting too often
        https://bugs.webkit.org/show_bug.cgi?id=171285

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::suspend): Moving the assertion to where it might be useful.

2017-04-25  Daniel Bates  <dabates@apple.com>

        Use an OptionSet for compositing reasons bitmask
        https://bugs.webkit.org/show_bug.cgi?id=171153

        Reviewed by Simon Fraser.

        We should make use of OptionSet to represent the bitmask of the reasons a layer
        was composited instead of using an integer and bitwise operations.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing): Also fix code style issues;
        an else-if statement should be written as an if-statement when the prior if-statement
        concludes with a return statement.
        * rendering/RenderLayerCompositor.h:

2017-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Supplementary Multilingual Plane Complex Scripts Rendered Incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=171272
        <rdar://problem/30966764>

        Reviewed by Zalan Bujtas.

        These scripts need to take the complex text codepath.

        Test: fast/text/kaithi.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::characterRangeCodePath):

2017-04-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Revert r215745 (especulative build fix) after r215752.
        https://bugs.webkit.org/show_bug.cgi?id=170842

        Unreviewed.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::normalizeCharacters):

2017-04-25  Daniel Bates  <dabates@apple.com>

        [Cocoa][Win] Enable of X-Content-Type-Options: nosniff header
        https://bugs.webkit.org/show_bug.cgi?id=136452
        <rdar://problem/23412620>

        Reviewed by Brent Fulgham.

        Enable support for X-Content-Type-Options: nosniff on Mac, iOS and Windows.

        Additionally, honor X-Content-Type-Options: nosniff header for stylesheets as per
        <https://fetch.spec.whatwg.org/#should-response-to-request-be-blocked-due-to-nosniff%3F> (30 March 2017).

        Test: http/tests/security/contentTypeOptions/nosniff-dynamic-script-blocked.html

        * Configurations/FeatureDefines.xcconfig:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet): Log an error if the stylesheet
        has the nosniff header and does not have a valid MIME type. Also update code for
        renaming of MIMETypeCheck to MIMETypeCheckHint.
        (WebCore::StyleSheetContents::notifyLoadedSheet): If the stylesheet is blocked by
        nosniff then consider it analogous to a load error so that we dispatch a DOM error
        event at the <style>/<link> element.
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished): Modified the wording of the error
        message when a script is disallowed by nosniff so as to more closely match the
        wording used when a stylesheet is disallowed by nonsniff.
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText): Update for renaming of MIMETypeCheck
        to MIMETypeCheckHint.
        (WebCore::CachedCSSStyleSheet::responseMIMEType): Added.
        (WebCore::CachedCSSStyleSheet::mimeTypeAllowedByNosniff): Added.
        (WebCore::CachedCSSStyleSheet::canUseSheet): Modified to check if the X-Content-Type-Options: nosniff
        header is in the HTTP response for the stylesheet. If it is then we can only use the stylesheet
        if its content-type is "text/css". Otherwise, apply the existing criterion for determining whether
        to to use the stylesheet.
        * loader/cache/CachedCSSStyleSheet.h: Rename MIMETypeCheck to MIMETypeCheckHint to better
        describe its purpose as a hint as to whether to enforce MIME type checking for the stylesheet.
        Processing of the HTTP header X-Content-Type-Options takes precedence over this hint.
        * loader/cache/CachedScript.h: Make mimeType() private.

2017-04-25  Daniel Bates  <dabates@apple.com>

        [Cocoa][Win] Enable of X-Content-Type-Options: nosniff header
        https://bugs.webkit.org/show_bug.cgi?id=136452
        <rdar://problem/23412620>

        Reviewed by Brent Fulgham.

        Part 1

        Enable X-Content-Type-Options: nosniff on Mac, iOS and Windows platforms.

        * Configurations/FeatureDefines.xcconfig:

2017-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [GTK] Build fix after r215737
        https://bugs.webkit.org/show_bug.cgi?id=170842

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::treatAsZeroWidthSpace):
        (WebCore::FontCascade::treatAsZeroWidthSpaceInComplexScript):

2017-04-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove an unnecessary -respondsToSelector: check after r215724

        Rubber-stamped by Tim Horton.

        Addresses review feedback from <https://bugs.webkit.org/show_bug.cgi?id=171156>. -[NSURL _title]
        will always for builds that need to access it.

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

2017-04-25  Antti Koivisto  <antti@apple.com>

        REGRESSION (r215469): [ios-simulator-wk2] LayoutTest compositing/animation/animation-backing.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=171060
        <rdar://problem/31771174>

        Reviewed by Simon Fraser.

        Accelerated transform animations move underlying layers without invalidating GraphicsLayers.
        To update tile coverage we need to commit such subtrees even if there are not other changes.

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

            Commit subtrees with accelerated transform animations.
            Factor into a function.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):

            Track if descendants had any accelerated transform animations after commit.

        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::hasDescendantsWithRunningTransformAnimations):
        (WebCore::GraphicsLayerCA::setHasDescendantsWithRunningTransformAnimations):

2017-04-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream macOS] Unable to apply frameRate constraint
        https://bugs.webkit.org/show_bug.cgi?id=171279

        Reviewed by Youenn Fablet.

        No new tests, this doesn't affect the mock capture devices.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::supportsSizeAndFrameRate): Cast frame rate
        ranges to int before comparing.

2017-04-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Build fix after r215737
        https://bugs.webkit.org/show_bug.cgi?id=170842

        Unreviewed.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::normalizeCharacters):

2017-04-25  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Clear network process cache when clearing store
        https://bugs.webkit.org/show_bug.cgi?id=171256
        <rdar://problem/31802347>

        Reviewed by Brent Fulgham.

        Test that covers this code:
        http/tests/loading/resourceLoadStatistics/clear-in-memory-and-persistent-store.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::clearInMemoryStore):
            Better name.
        (WebCore::ResourceLoadObserver::logUserInteraction):
            Now passes on the boolean parameter clearFirst to
            ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
        (WebCore::ResourceLoadObserver::fireShouldPartitionCookiesHandler):
            Now takes and passes on the boolean parameter clearFirst to
            ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
        (WebCore::ResourceLoadObserver::statisticsStore): Deleted.
            This getter violated abstraction. The way it was used
            is now solved through dedicated functions.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):
            Now passes on the boolean parameter clearFirst to
            ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler().
        (WebCore::ResourceLoadStatisticsStore::clearInMemory):
            Better name.
            Now triggers clearing of the associated network process cache.
        (WebCore::ResourceLoadStatisticsStore::clearInMemoryAndPersistent):
            Now calls clearInMemory().
        (WebCore::ResourceLoadStatisticsStore::setShouldPartitionCookiesCallback):
            Now expects a handler with the boolean parameter clearFirst.
        (WebCore::ResourceLoadStatisticsStore::fireShouldPartitionCookiesHandler):
            Now takes and passes on the boolean parameter clearFirst to
            m_shouldPartitionCookiesForDomainsHandler().
        * loader/ResourceLoadStatisticsStore.h:
        (WebCore::ResourceLoadStatisticsStore::clear): Deleted.
        * platform/network/NetworkStorageSession.h:
            NetworkStorageSession::setShouldPartitionCookiesForHosts() now
            takes the boolean parameter clearFirst.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setShouldPartitionCookiesForHosts):
            Now clears m_topPrivatelyControlledDomainsForCookiePartitioning
            if the boolean parameter clearFirst is true.

2017-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Add performance test for FontCache::systemFallbackForCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=170842

        Reviewed by Tim Horton.

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::treatAsZeroWidthSpace):
        (WebCore::FontCascade::treatAsZeroWidthSpaceInComplexScript): Deleted.
        * platform/graphics/WidthCache.h:
        (WebCore::WidthCache::add):
        (WebCore::WidthCache::addSlowCase):

2017-04-25  Chris Dumez  <cdumez@apple.com>

        Content-Disposition header filename is ignored when 'download' attribute is specified in HTML
        https://bugs.webkit.org/show_bug.cgi?id=171239
        <rdar://problem/31789855>

        Reviewed by Alex Christensen.

        Add isAttachmentWithFilename() utility method to ResourceResponse to implement:
        - https://html.spec.whatwg.org/#as-a-download (Step 2)

        Test: http/tests/download/anchor-download-attribute-content-disposition.html

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::isAttachmentWithFilename):
        * platform/network/ResourceResponseBase.h:

2017-04-25  Antti Koivisto  <antti@apple.com>

        Enable expired-only reload policy on Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=171264
        <rdar://problem/31807637>

        Reviewed by Andreas Kling.

        * loader/NavigationAction.cpp:
        (WebCore::navigationType):

        Test for reload navigation type correctly.

2017-04-25  Miguel Gomez  <magomez@igalia.com>

        Image decoders must have private constructors to avoid refcount misuse: ASSERTION FAILED: m_deletionHasBegun when destroying ImageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=171211

        Reviewed by Carlos Garcia Campos.

        Add a create method to each of the decoders and set their constructors as private. Change
        ICOImageDecoder to store its internal PNG decoders as RefPtr and use the new create method, and
        change ImageDecoder to use the create methods as well.

        Covered by existent tests.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2017-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Build fix

        Unreviewed.

        No new tests because there is no behavior change.

        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::wrapSerializedCryptoKey):
        (WebCore::unwrapSerializedCryptoKey):

2017-04-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support reading NSURL titles from the pasteboard when performing data interaction
        https://bugs.webkit.org/show_bug.cgi?id=171156
        <rdar://problem/31356937>

        Reviewed by Tim Horton.

        Support reading link titles from the pasteboard when performing data interaction. To do this, we refactor
        Pasteboard::readURL to take in an additional String& title which is ultimately plumbed to the PlatformPasteboard
        where it is set to the value of -[NSURL _title].

        Test: DataInteractionTests.ExternalSourceTitledNSURL.

        * editing/FrameSelection.h:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readURL):
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::concludeEditDrag):

        Move calls to clearDragCaret() out of concludeEditDrag and into the call site, in performDragOperation after
        attempting to concludeEditDrag. This is done so that if the WebEditorClient queries whether the drag caret is
        in richly editable content for the purposes of generating a document fragment to insert, the answer will not
        always be false as a drop is occurring.

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

2017-04-24  Andy VanWagoner  <thetalecrafter@gmail.com>

        Clean up ICU headers
        https://bugs.webkit.org/show_bug.cgi?id=170997

        Reviewed by JF Bastien.

        Update all icu headers to 55.1

        * icu/LICENSE: Update copyright
        * icu/README: Explain ICU headers for OS X better
        * icu/unicode/localpointer.h:
        (LocalPointer::LocalPointer):
        (LocalPointer::adoptInsteadAndCheckErrorCode):
        * icu/unicode/platform.h:
        * icu/unicode/putil.h:
        * icu/unicode/std_string.h:
        * icu/unicode/ubrk.h:
        * icu/unicode/uchar.h:
        * icu/unicode/ucnv.h:
        * icu/unicode/ucol.h:
        * icu/unicode/ucoleitr.h:
        * icu/unicode/uconfig.h:
        * icu/unicode/ucurr.h:
        * icu/unicode/uidna.h:
        * icu/unicode/uloc.h:
        * icu/unicode/umachine.h:
        * icu/unicode/unistr.h:
        (UnicodeString::getArrayStart):
        (UnicodeString::UnicodeString):
        (UnicodeString::hasShortLength):
        (UnicodeString::getShortLength):
        (UnicodeString::length):
        (UnicodeString::getCapacity):
        (UnicodeString::isBogus):
        (UnicodeString::isWritable):
        (UnicodeString::isBufferWritable):
        (UnicodeString::getBuffer):
        (UnicodeString::isEmpty):
        (UnicodeString::setZeroLength):
        (UnicodeString::setShortLength):
        (UnicodeString::setLength):
        (UnicodeString::setToEmpty):
        (UnicodeString::remove):
        * icu/unicode/urename.h:
        * icu/unicode/uscript.h:
        * icu/unicode/usearch.h:
        * icu/unicode/uset.h:
        * icu/unicode/ustring.h:
        * icu/unicode/utf8.h:
        * icu/unicode/utypes.h:
        * icu/unicode/uvernum.h:

2017-04-24  Jiewen Tan  <jiewen_tan@apple.com>

        LayoutTests crypto/subtle/ecdsa-generate-key-sign-verify-p384.html and crypto/subtle/ecdsa-generate-key-sign-verify-p256.html are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=171059
        <rdar://problem/31734958>

        Reviewed by Brent Fulgham.

        Covered by existing tests.

        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        (WebCore::signECDSA):
        Enhance ways to convert the DER signatures produced from CommonCrypto to r||s.

2017-04-24  Manuel Rego Casasnovas  <rego@igalia.com>

        [selectors4] :focus-within should use the flat tree
        https://bugs.webkit.org/show_bug.cgi?id=170899

        Reviewed by Antti Koivisto.

        This has been discussed in the following CSS WG issue:
        https://github.com/w3c/csswg-drafts/issues/1135

        And the spec has been updated (https://drafts.csswg.org/selectors-4/#the-focus-within-pseudo):
        "An element also matches :focus-within if one of its descendants in the flat tree
         (including non-element nodes, such as text nodes) matches the conditions for matching :focus."

        Test: imported/w3c/web-platform-tests/css/selectors4/focus-within-shadow-006.html

        * dom/Element.cpp:
        (WebCore::Element::setFocus): Use "flat tree" ("composed tree" in WebKit)
        to set focus-within flag.

2017-04-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Respect fidelity order when reading web content from item providers
        https://bugs.webkit.org/show_bug.cgi?id=171155
        <rdar://problem/31356937>

        Reviewed by Tim Horton.

        Currently, when reading web content from pasteboards, we assume the old UIPasteboard/NSPasteboard model wherein
        the destination must determine which of the items is considered to have the highest fidelity for the purposes of
        inserting into an editable area. This destination-side fidelity ranking is determined solely by the NSArray
        returned from Pasteboard::supportedPasteboardTypes, which lists compatible types in order from highest fidelity
        to lowest fidelity. Pasteboard::read effectively iterates over this list of types in order, attempting to read
        highest fidelity types and bailing when it first successfully reads data.

        However, when our pasteboard is backed by UIItemProviders, we should instead read pasteboard types in order of
        fidelity as specified by the source rather than the destination. To accomplish this, we introduce an alternate
        codepath, Pasteboard::readRespectingUTIFidelities, which we take if Pasteboard::respectsUTIFidelities is true
        (currently, this only applies for the purposes of data interaction). This version follows a different flow:
        for each item in the pasteboard, we ask for just the UTIs for that item, in order of fidelity. For each item,
        we then call readPasteboardWebContentDataForType to try and read data for that type, continuing until either
        all UTIs have been attempted, or reading was successful.

        This patch makes two additional adjustments. First, we introduce Pasteboard::getTypesByFidelityForItemAtIndex,
        which is used by Pasteboard::readRespectingUTIFidelities when querying the list of supported UTIs for each
        pasteboard item, sorted by highest to lowest fidelity.

        Secondly, we refactor logic to write to the item provider pasteboard in PlatformPasteboardIOS. Since we are
        now respecting fidelity rankings on the destination, the source must also register UTI types in the right
        fidelity order. While this was mostly achieved using our existing method of writing a list of object
        representations to the pasteboard and then all of the contents of a NSString => NSData dictionary containing
        private UTI data, this approach has two flaws:
        1.  We are unable to register high-priority custom types, followed by representing objects, followed by more
            lower-priority custom types, since we assume that all custom types follow all representing objects.
        2.  Since we're just iterating over a dictionary of NSString => NSData when registering custom UTI
            representations to the item provider, there cannot inherently be any fidelity ordering for custom types.

        To address both of these issues, we introduce two new objects that encapsulate how we register data to the item
        provider pasteboard. WebItemProviderRegistrationInfo represents some data that can be registered to an item
        provider (either an object conforming to UIItemProviderWriting, or an NSString and NSData).
        WebItemProviderRegistrationInfoList represents a list of WebItemProviderRegistrationInfos in order of highest to
        lowest fidelity. In PlatformPasteboardIOS, we transform PasteboardWebContent, PasteboardImage, and PasteboardURL
        into a WebItemProviderRegistrationInfoList, which we then pass along to the WebItemProviderPasteboard. In
        WebItemProviderPasteboard, we traverse the list of WebItemProviderRegistrationInfos in the list and register
        each WebItemProviderRegistrationInfo's representing object or data to the item provider.

        Test: DataInteractionTests.RespectsExternalSourceFidelityRankings.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/AbstractPasteboard.mm: Removed.

        Moves WebItemProviderData, formerly implemented in AbstractPasteboard.mm, into WebItemProviderPasteboard.mm.
        We can delete AbstractPasteboard.mm as a result.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::readPasteboardWebContentDataForType):

        Pull out common logic for reading data given a UTI type from the pasteboard into the PasteboardWebContentReader.
        This is invoked from both the existing Pasteboard::read codepath, as well as the readRespectingUTIFidelities
        codepath.

        (WebCore::Pasteboard::read):

        Refactored to call the new readPasteboardWebContentDataForType helper. Behavior should not have changed, unless
        the pasteboard supports UTI fidelities.

        (WebCore::Pasteboard::respectsUTIFidelities):
        (WebCore::Pasteboard::readRespectingUTIFidelities):

        An alternative to Pasteboard::read that considers source-side fidelity rankings of UTIs.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::getTypesByFidelityForItemAtIndex):
        (WebCore::PlatformPasteboard::writeObjectRepresentations):

        Refactored to build a WebItemProviderRegistrationInfoList and pass it to the WebItemProviderPasteboard to
        register items and data.

        (WebCore::PlatformPasteboard::write):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfo initWithRepresentingObject:typeIdentifier:data:]):
        (-[WebItemProviderRegistrationInfo representingObject]):
        (-[WebItemProviderRegistrationInfo typeIdentifier]):
        (-[WebItemProviderRegistrationInfo data]):

        Represents a single calls to register data onto the item provider pasteboard. See
        WebItemProviderPasteboard.h header comments for more info.

        (-[WebItemProviderRegistrationInfoList init]):
        (-[WebItemProviderRegistrationInfoList addData:forType:]):
        (-[WebItemProviderRegistrationInfoList addRepresentingObject:]):
        (-[WebItemProviderRegistrationInfoList numberOfItems]):
        (-[WebItemProviderRegistrationInfoList itemAtIndex:]):
        (-[WebItemProviderRegistrationInfoList enumerateItems:]):

        Represents a series of calls to register representations onto the item provider pasteboard. See
        WebItemProviderPasteboard.h header comments for more info.

        (-[WebItemProviderPasteboard pasteboardTypesByFidelityForItemAtIndex:]):
        (-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]):
        (-[WebItemProviderPasteboard setItemsFromObjectRepresentations:]): Deleted.

2017-04-24  Chris Dumez  <cdumez@apple.com>

        Regression(r204605): support for "cp874" charset alias was inadvertently dropped which may cause issues on certain Thai sites
        https://bugs.webkit.org/show_bug.cgi?id=171128
        <rdar://problem/31526844>

        Reviewed by Alexey Proskuryakov.

        When using Thai as default language on MacOS, defaultTextEncodingNameForSystemLanguage()
        was returning "cp874" encoding with was dropped in r204605 for not being part of the
        encoding specification (https://encoding.spec.whatwg.org/#names-and-labels).

        To address the issue, we map "cp874" encoding to the "dos-874" encoding which is
        properly recognized. Without this, this could lead to issue on WebSites that do not
        specify a charset.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::defaultTextEncodingNameForSystemLanguage):

2017-04-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Provide a type identifier hint to the CGImageSource so getting the type identifier is more accurate
        https://bugs.webkit.org/show_bug.cgi?id=171042

        Reviewed by Tim Horton.

        The image URL can be used to get the type identifier hint. Without providing
        this hint, the image type identifier is not accurate for image formats.

        Also add a function to the ImageDecoder class to get the typeIdentifier. Add
        all the pluming from the ImageDecoder till the Image class.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::frameImageAtIndexCacheIfNeeded):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::internalStartAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::sourceURL):
        * platform/graphics/Image.h: Change the sourceURL() to return a URL so CG can create CFURLRef from it.
        (WebCore::Image::uti):
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::cacheAsyncFrameNativeImageAtIndex):
        (WebCore::ImageFrameCache::startAsyncDecodingQueue):
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex):
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue):
        (WebCore::ImageFrameCache::clearMetadata):
        (WebCore::ImageFrameCache::sourceURL):
        (WebCore::ImageFrameCache::encodedDataStatus):
        (WebCore::ImageFrameCache::uti):
        (WebCore::ImageFrameCache::filenameExtension):
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ensureDecoderAvailable):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::uti):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::ImageDecoder): Pass the type identifier hint to CGImageSourceCreateIncremental().
        (WebCore::ImageDecoder::uti):
        (WebCore::ImageDecoder::filenameExtension):
        (WebCore::ImageDecoder::frameHasAlphaAtIndex):
        (WebCore::ImageDecoder::createFrameImageAtIndex):
        * platform/graphics/cg/ImageDecoderCG.h:
        (WebCore::ImageDecoder::create):
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::encodedDataStatus):
        * platform/graphics/win/ImageDecoderDirect2D.h:
        (WebCore::ImageDecoder::create): Add an argument of type URL.
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create): Add an argument of type URL.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::encodedDataStatus): Make it const.
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::encodedDataStatus):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::encodedDataStatus):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::encodedDataStatus):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::encodedDataStatus):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::encodedDataStatus):
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::encodedDataStatus):
        * platform/image-decoders/webp/WEBPImageDecoder.h:
        * platform/spi/cg/ImageIOSPI.h: Added.

2017-04-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix.

        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::encryptAES_GCM):
        (WebCore::decyptAES_GCM):

2017-04-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Whitelist supported image MIME types
        https://bugs.webkit.org/show_bug.cgi?id=171077

        Reviewed by Tim Horton.

        Restrict the CG port image formats to a known whitelist. Build this list from image
        UTI's instead of MIME types, since the image UTI's is a superset of the MIME types.
        Use this list to build the list of supported image MIME types.

        * PlatformAppleWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        * platform/graphics/cg/UTIRegistry.cpp: Added.
        (WebCore::allowedImageUTIs):
        (WebCore::isAllowedImageUTI):
        * platform/graphics/cg/UTIRegistry.h: Added.

2017-04-24  Nan Wang  <n_wang@apple.com>

        AX: Crash at WebCore::AXObjectCache::characterOffsetForIndex(int, WebCore::AccessibilityObject const*) + 703
        https://bugs.webkit.org/show_bug.cgi?id=171247

        Reviewed by Chris Fleizach.

        Crashed because we were passing a nil node into rootAXEditableElement(). Fixed it by
        adding a null check.

        Test: accessibility/mac/input-string-for-range-crash.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::characterOffsetForIndex):

2017-04-24  Youenn Fablet  <youenn@apple.com>

        Set defaults video getUserMedia constraints
        https://bugs.webkit.org/show_bug.cgi?id=171127

        Reviewed by Eric Carlson.

        Test: fast/mediastream/getUserMedia-default.html

        Adding default optional constraints for video size and frame rate if none is defined.
        Default is 640x480 30fps.

        Doing some refactoring in MeddiaConstraintsImpl and MeddiaConstraintsData to use more move constructors.

        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::defaultVideoConstraints):
        (WebCore::MediaConstraintsData::setDefaultVideoConstraints):
        (WebCore::MediaConstraintsImpl::create): Deleted.
        * Modules/mediastream/MediaConstraintsImpl.h:
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer): Fixing crash when setting frameRate.

2017-04-24  Chris Dumez  <cdumez@apple.com>

        createElementNS() should now throw only InvalidCharacterError, not NamespaceError
        https://bugs.webkit.org/show_bug.cgi?id=171052

        Reviewed by Sam Weinig.

        Validating a qualified name should only throw InvalidCharacterError, not NamespaceError,
        after:
        - https://github.com/whatwg/dom/issues/319
        - https://github.com/w3c/web-platform-tests/issues/5161
        - https://github.com/whatwg/dom/issues/423

        Latest spec:
        - https://dom.spec.whatwg.org/#validate

        No new tests, updated web-platform-tests.

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

2017-04-24  Chris Dumez  <cdumez@apple.com>

        REGRESSION (214503): Webkit crash under RenderElement::repaintForPausedImageAnimationsIfNeeded() when scrolling giphy pages
        https://bugs.webkit.org/show_bug.cgi?id=171243
        <rdar://problem/31715572>

        Reviewed by Antti Koivisto.

        After r214503, we would frequently crash when scrolling giphy pages because we were failing to call
        RenderView::removeRendererWithPausedImageAnimations(renderer, cachedImage) in some cases. This would
        cause a RenderElement to still be associated to a CachedImage in RenderView but not in practice.
        If the CachedImage then gets destroyed and the user scrolls, we end up calling
        RenderElement::repaintForPausedImageAnimationsIfNeeded() with a bad CachedImage.

        StyleCachedImage was properly calling RenderView::removeRendererWithPausedImageAnimations() before
        unregistering the renderer as a client to the CachedImage. However, RenderImageResource was failing
        to do the same. To make this less error-prone, I added a didRemoveCachedImageClient(CachedImage&)
        function to the CachedImageClient interface. It is overriden in RenderElement only to call
        RenderView::removeRendererWithPausedImageAnimations().

        Test: fast/images/animated-gif-scrolling-crash.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        * loader/cache/CachedImageClient.h:
        (WebCore::CachedImageClient::didRemoveCachedImageClient):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::didRemoveCachedImageClient):
        * rendering/RenderElement.h:
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::removeClient):

2017-04-24  Andy Estes  <aestes@apple.com>

        [macOS] Fix two minor issues with MediaSelectionOption::Type
        https://bugs.webkit.org/show_bug.cgi?id=171235

        Reviewed by Sam Weinig.

        * platform/MediaSelectionOption.h: Gave type a default value, and added explicit
        constructors to make gcc and msvc happy.
        * platform/mac/WebPlaybackControlsManager.mm:
        (toAVTouchBarMediaSelectionOptionType): Added an ASSERT_NOT_REACHED if none of the switch
        cases match.

2017-04-24  Andy Estes  <aestes@apple.com>

        [macOS] Enable media selection button on AVTouchBarScrubber
        https://bugs.webkit.org/show_bug.cgi?id=171149
        <rdar://problem/29875010>

        Reviewed by Beth Dakin.

        * platform/spi/cocoa/AVKitSPI.h:

2017-04-24  Alex Christensen  <achristensen@webkit.org>

        Reduce copies and allocations in SharedBuffer::append
        https://bugs.webkit.org/show_bug.cgi?id=170956

        Reviewed by Andreas Kling.

        SharedBuffer was a mess of different data structures added over the years.
        SharedBuffer::append would allocate large Vector<char>s and call memcpy, and that
        is inefficient and causes crashes when large allocations fail, and the allocations
        and copies aren't even necessary.  There were also const correctness problems in
        ResourceLoader::addDataOrBuffer, and iterating a SharedBuffer was strange because
        sometimes we don't want to add unnecessary copies.

        These problems are solved by making SharedBuffer a Vector of read-only data segments,
        which can be contained in various ways but we don't care because all we want to do is
        read them.  Appending SharedBuffers is now const correct because we just add to a
        Vector<Ref<DataSegment>> and neither SharedBuffer can write to the data.  Sometimes,
        though, we want all the data to be in continuous memory, and if there are multiple
        segments then the data needs to be copied once to a new segment.  We should audit the
        call sites of SharedBuffer::data and see if this is really necessary.

        No change in functional behavior.  Fewer copies of the data are made when buffering
        data in the NetworkProcess.  No extra memory is allocated for bytes we think we might
        need to append in the future.  Data is now only copied into one buffer lazily as needed,
        which could slightly change when small delays from memcpy happen, but it's an overall
        improvement.  We could have a performance hit if we were to call append() then data()
        then append() then data() etc. but that doesn't happen in WebKit because we call append
        repeatedly when buffering the data then call data() once when reading the data.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::dataInRTFDFormat):
        (WebCore::Editor::dataInRTFFormat):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readURL):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::imageInWebArchiveFormat):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createResource):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData):
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::tryGetFileBackedSharedBufferFromCFURLCachedResponse):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::combineToOneSegment):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::createArrayBuffer):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::copy):
        (WebCore::SharedBuffer::DataSegment::data):
        (WebCore::SharedBuffer::DataSegment::size):
        (WebCore::segmentIndex): Deleted.
        (WebCore::offsetInSegment): Deleted.
        (WebCore::allocateSegment): Deleted.
        (WebCore::freeSegment): Deleted.
        (WebCore::SharedBuffer::~SharedBuffer): Deleted.
        (WebCore::SharedBuffer::size): Deleted.
        (WebCore::SharedBuffer::duplicateDataBufferIfNecessary): Deleted.
        (WebCore::SharedBuffer::appendToDataBuffer): Deleted.
        (WebCore::SharedBuffer::clearDataBuffer): Deleted.
        (WebCore::SharedBuffer::copyBufferAndClear): Deleted.
        (WebCore::SharedBuffer::buffer): Deleted.
        (WebCore::SharedBuffer::getSomeData): Deleted.
        (WebCore::SharedBuffer::maybeTransferMappedFileData): Deleted.
        (WebCore::SharedBuffer::clearPlatformData): Deleted.
        (WebCore::SharedBuffer::maybeTransferPlatformData): Deleted.
        (WebCore::SharedBuffer::hasPlatformData): Deleted.
        (WebCore::SharedBuffer::platformData): Deleted.
        (WebCore::SharedBuffer::maybeAppendPlatformData): Deleted.
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create): Deleted.
        (WebCore::SharedBuffer::isEmpty): Deleted.
        * platform/SharedBufferChunkReader.cpp:
        (WebCore::SharedBufferChunkReader::nextChunk):
        (WebCore::SharedBufferChunkReader::peek):
        * platform/SharedBufferChunkReader.h:
        * platform/URLParser.cpp:
        (WebCore::URLParser::URLParser):
        * platform/cf/KeyedEncoderCF.cpp:
        (WebCore::KeyedEncoderCF::finishEncoding):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createCFData):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::hintMemoryNotNeededSoon):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::wrapCFData): Deleted.
        (WebCore::SharedBuffer::hasPlatformData): Deleted.
        (WebCore::SharedBuffer::platformData): Deleted.
        (WebCore::SharedBuffer::platformDataSize): Deleted.
        (WebCore::SharedBuffer::maybeTransferPlatformData): Deleted.
        (WebCore::SharedBuffer::clearPlatformData): Deleted.
        (WebCore::SharedBuffer::tryReplaceContentsWithPlatformBuffer): Deleted.
        (WebCore::SharedBuffer::maybeAppendPlatformData): Deleted.
        (WebCore::SharedBuffer::copyBufferAndClear): Deleted.
        (WebCore::SharedBuffer::copySomeDataFromDataArray): Deleted.
        (WebCore::SharedBuffer::singleDataArrayBuffer): Deleted.
        (WebCore::SharedBuffer::maybeAppendDataArray): Deleted.
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::replacementData):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::replacementData):
        * platform/cocoa/SharedBufferCocoa.mm:
        (-[WebCoreSharedBufferData initWithSharedBufferDataSegment:]):
        (-[WebCoreSharedBufferData length]):
        (-[WebCoreSharedBufferData bytes]):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::createCFData):
        (WebCore::SharedBuffer::createFromReadingFile):
        (WebCore::SharedBuffer::createNSDataArray):
        (-[WebCoreSharedBufferData initWithSharedBufferDataBuffer:]): Deleted.
        (WebCore::SharedBuffer::wrapNSData): Deleted.
        (WebCore::SharedBuffer::existingCFData): Deleted.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::openTypeTable):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::didReceiveBuffer):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::readBuffer):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::write):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::bufferForType):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyReceiveData):
        * platform/network/MIMEHeader.cpp:
        * platform/network/MIMEHeader.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createSoupBuffer):
        (WebCore::SharedBuffer::clearPlatformData): Deleted.
        (WebCore::SharedBuffer::maybeTransferPlatformData): Deleted.
        (WebCore::SharedBuffer::hasPlatformData): Deleted.
        (WebCore::SharedBuffer::platformData): Deleted.
        (WebCore::SharedBuffer::platformDataSize): Deleted.
        (WebCore::SharedBuffer::maybeAppendPlatformData): Deleted.
        (WebCore::SharedBuffer::tryReplaceContentsWithPlatformBuffer): Deleted.

2017-04-24  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Some ivars are needlessly @protected
        https://bugs.webkit.org/show_bug.cgi?id=171208

        Reviewed by Anders Carlsson.

        Made ivars @private where possible.

        * platform/mac/WebCoreFullScreenPlaceholderView.h:
        * platform/mac/WebCoreFullScreenWarningView.h:
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/network/cocoa/WebCoreNSURLSession.h:

2017-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use ENABLE_REMOTE_INSPECTOR instead of ENABLE_INSPECTOR_SERVER for the remote inspector
        https://bugs.webkit.org/show_bug.cgi?id=166680

        Reviewed by Michael Catanzaro.

        Add PageDebuggable.cpp to the compilation.

        * CMakeLists.txt:

2017-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r215657 and r215676.
        https://bugs.webkit.org/show_bug.cgi?id=171201

        Broke the build (Requested by ap on #webkit).

        Reverted changesets:

        "[macOS] Enable media selection button on AVTouchBarScrubber"
        https://bugs.webkit.org/show_bug.cgi?id=171149
        http://trac.webkit.org/changeset/215657

        "Build fix after r215657."
        http://trac.webkit.org/changeset/215676

2017-04-23  Andy Estes  <aestes@apple.com>

        [macOS] AVTouchBarMediaSelectionOptions should be created with the correct type
        https://bugs.webkit.org/show_bug.cgi?id=171192
        <rdar://problem/29875010>

        Reviewed by Wenson Hsieh.

        AVTouchBarMediaSelectionOption was always being created with type
        AVTouchBarMediaSelectionOptionTypeRegular, but we know if a TextTrack is really the legible
        off or legible auto track. This change plumbs that information into
        WebPlaybackControlsManager so that AVTouchBarMediaSelectionOptions can be created with the
        right AVTouchBarMediaSelectionOptionType. 

        * WebCore.xcodeproj/project.pbxproj:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::mediaSelectionOptionForTrack):
        * page/CaptionUserPreferences.h:
        * platform/MediaSelectionOption.h: Added.
        * platform/cocoa/WebPlaybackSessionModel.h:
        (WebCore::WebPlaybackSessionModelClient::audioMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionModelClient::legibleMediaSelectionOptionsChanged):
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::audioMediaSelectionOptions):
        (WebCore::WebPlaybackSessionModelMediaElement::legibleMediaSelectionOptions):
        * platform/ios/WebPlaybackSessionInterfaceAVKit.h:
        * platform/ios/WebPlaybackSessionInterfaceAVKit.mm:
        (WebCore::mediaSelectionOptions):
        (WebCore::WebPlaybackSessionInterfaceAVKit::audioMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceAVKit::legibleMediaSelectionOptionsChanged):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::audioMediaSelectionOptionsChanged):
        (WebVideoFullscreenControllerContext::legibleMediaSelectionOptionsChanged):
        (WebVideoFullscreenControllerContext::audioMediaSelectionOptions):
        (WebVideoFullscreenControllerContext::legibleMediaSelectionOptions):
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (toAVTouchBarMediaSelectionOptionType):
        (mediaSelectionOptions):
        (-[WebPlaybackControlsManager setAudioMediaSelectionOptions:withSelectedIndex:]):
        (-[WebPlaybackControlsManager setLegibleMediaSelectionOptions:withSelectedIndex:]):
        (-[WebPlaybackControlsManager webPlaybackSessionInterfaceMac]):
        (-[WebPlaybackControlsManager setWebPlaybackSessionInterfaceMac:]):
        * platform/mac/WebPlaybackSessionInterfaceMac.h:
        * platform/mac/WebPlaybackSessionInterfaceMac.mm:
        (WebCore::WebPlaybackSessionInterfaceMac::audioMediaSelectionOptionsChanged):
        (WebCore::WebPlaybackSessionInterfaceMac::legibleMediaSelectionOptionsChanged):

2017-04-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        File inputs only accept UTI types that can be inserted into contenteditable areas when dropping
        https://bugs.webkit.org/show_bug.cgi?id=171177
        <rdar://problem/31765379>

        Reviewed by Andy Estes.

        Currently, DragController::canProcessDrag bails immediately with `false` if the drag data does not contain
        compatible content. However, if we are dragging over a file input, we want the presence of files in the drag
        data to take priority. To fix this, we teach DragData::containsCompatibleContent to take the purpose of the drag
        into account (by default, this is Editing, but when dragging over a file input, this becomes FileUpload). We
        then consider DragData to have compatible content for the purpose of file uploading if it contains any files.

        Test: DataInteractionTests.ExternalSourceJSONToFileInput.

        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * platform/DragData.h:
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::containsCompatibleContent):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsCompatibleContent):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsCompatibleContent):

2017-04-22  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Fix regression caused by r215626
        https://bugs.webkit.org/show_bug.cgi?id=171168
        <rdar://problem/31774787>

        Reviewed by Antoine Quint.

        No new tests, fixes fast/mediastream/MediaStream-page-muted.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaState): Test muted before m_isProducingData because if both are 
        true we want to report that the stream is muted.

2017-04-21  Zalan Bujtas  <zalan@apple.com>

        Do not measure large chunk of text repeatedly during mid-word breaking.
        https://bugs.webkit.org/show_bug.cgi?id=171065
        <rdar://problem/31630245>

        Reviewed by Antti Koivisto.

        This patch reduces redundant text measuring for mid-word breaking by
        1. Adjusting the range for the binary search when the text fragment is longer than the available width
        2. Preserving the width value for the left side of the split fragment (computed during the binary search) so
        that when the fragment is being split we don't need to re-measure it
        3. Checking if the right side fits the next line and only adjust the width (by re-measuring the text) for
        kerning/ligature if it does (if it does not fit, we'll end up re-measuring some part of it
        during the next split)

        Performance test has already been added.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::hyphenPositionForFragment):
        (WebCore::SimpleLineLayout::split): binary search with adjusting the range and preserving the width for the left side.
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::FragmentForwardIterator::FragmentForwardIterator): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator++): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator!=): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator==): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator*): Deleted.
        (WebCore::SimpleLineLayout::begin): Deleted.
        (WebCore::SimpleLineLayout::end): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::split):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::splitWithHyphen):

2017-04-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Support writing link titles to the pasteboard when beginning data interaction on a link
        https://bugs.webkit.org/show_bug.cgi?id=171154
        <rdar://problem/31356937>

        Reviewed by Andy Estes.

        Currently, when writing NSURLs to the pasteboard, we only write a String to the pasteboard corresponding to
        kUTTypeURL. This means richer data associated with the link (in this case, the title) are not captured when
        writing to the pasteboard. To address this, we introduce a new codepath for writing links to the pasteboard that
        mirrors the way PasteboardImage and PasteboardWebContent are written to the pasteboard.

        Test: Augmented DataInteractionTests.LinkToInput.

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

        Add plumbing support for writing PasteboardURLs.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::writeObjectRepresentations):

        Teach PlatformPasteboard to also set the _title attribute of the NSURL when creating an NSURL representation
        for registering with the shared WebItemProviderPasteboard.

        (WebCore::PlatformPasteboard::write):
        * platform/ios/WebItemProviderPasteboard.mm:

        Remove deprecation guards and replace deprecated method calls with the latest undeprecated versions.

        (-[WebItemProviderPasteboard setItemsFromObjectRepresentations:]):

2017-04-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r215608.

        Hundreds of test failures on GTK bot

        Reverted changeset:

        "Reduce copies and allocations in SharedBuffer::append"
        https://bugs.webkit.org/show_bug.cgi?id=170956
        http://trac.webkit.org/changeset/215608

2017-04-21  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r205374): <li> content inside <ul> should mid-word wrap when word-break: break-word is present.
        https://bugs.webkit.org/show_bug.cgi?id=171108
        <rdar://problem/30271747>

        Reviewed by Dan Bernstein.

        This patch ensures that we search for mid-word breaks when a zero sized element has been committed on the line
        unless it's an image or some other replaced element with special properties (e.g. list-style: inside).  

        Tests: fast/replaced/ul-li-word-break-break-word.html
               fast/replaced/zero-width-image-force-linebreak.html

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::BreakingContext::handleText): This matches pre-r205374 behaviour, but it's explicit about whether a 
        replaced width has already been committed on the current line.
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::commit):
        * rendering/line/LineWidth.h:
        (WebCore::LineWidth::hasCommittedReplaced):
        (WebCore::LineWidth::addUncommittedReplacedWidth): These 2 last functions were removed with r205374 (and now I am adding them back). 

2017-04-21  Jer Noble  <jer.noble@apple.com>

        [MediaCapture] Improvements to CoreAudioCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=171146

        Reviewed by Eric Carlson.

        Various interlocking improvements to CoreAudioCaptureSource:

        - Allow the volume, sampleRate, and echoCancellation settings to be applied to the source.
        - Update the values returned via settings() when these values change.
        - Obey the sampleRate and echoCancellation settings when creating the VPIO unit.
        - Because AudioUnitRender() mutates the passed in AudioBufferList, reset it immediately before calling.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::preferredSampleRate):
        (WebCore::CoreAudioCaptureSource::preferredIOBufferSize):
        (WebCore::CoreAudioCaptureSource::configureMicrophoneProc):
        (WebCore::CoreAudioCaptureSource::configureSpeakerProc):
        (WebCore::CoreAudioCaptureSource::processMicrophoneSamples):
        (WebCore::CoreAudioCaptureSource::setupAudioUnits):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        (WebCore::CoreAudioCaptureSource::settings):
        (WebCore::CoreAudioCaptureSource::settingsDidChange):
        (WebCore::CoreAudioCaptureSource::preferredIOBufferDuration): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2017-04-21  Youenn Fablet  <youenn@apple.com>

        com.apple.WebCore: non-virtual thunk to WebCore::LibWebRTCDataChannelHandler::OnBufferedAmountChange + 39
        https://bugs.webkit.org/show_bug.cgi?id=171087
        <rdar://problem/31739051>

        Reviewed by Eric Carlson.

        Covered by existing tests.
        No test added as this behavior is really libwebrtc specific and cannot be triggered easily.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::close): Stopping observing libwebrtc data channel before closing it.
        This ensures we will stop getting notified as soon as there is no more interest.
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::OnStateChange): libwebrtc can still notify us even though we said we were
        not interested. Ensuring we do not call the client if we are no longer interested.
        (WebCore::LibWebRTCDataChannelHandler::OnMessage): Ditto.
        (WebCore::LibWebRTCDataChannelHandler::OnBufferedAmountChange): Ditto.

2017-04-21  Andy Estes  <aestes@apple.com>

        [macOS] Enable media selection button on AVTouchBarScrubber
        https://bugs.webkit.org/show_bug.cgi?id=171149
        <rdar://problem/29875010>

        Reviewed by Beth Dakin.

        * platform/spi/cocoa/AVKitSPI.h:

2017-04-21  Andy Estes  <aestes@apple.com>

        [macOS] Name WebPlaybackControlsManager delegate methods correctly depending on OS version
        https://bugs.webkit.org/show_bug.cgi?id=171147
        <rdar://problem/29875010>

        Reviewed by Beth Dakin.

        On macOS 10.12, WebPlaybackControlsManager conforms to
        AVFunctionBarPlaybackControlsControlling, but on 10.13 it conforms to
        AVTouchBarPlaybackControlsControlling. These protocols are near-identical, except for
        instances of "FunctionBar" in method names are renamed to "TouchBar". This patch updates to
        the new method names, and generally renames things with "FunctionBar" to "TouchBar".

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager generateTouchBarThumbnailsForTimes:tolerance:size:thumbnailHandler:]):
        (-[WebPlaybackControlsManager generateTouchBarAudioAmplitudeSamples:completionHandler:]):
        (-[WebPlaybackControlsManager canBeginTouchBarScrubbing]):
        (-[WebPlaybackControlsManager beginTouchBarScrubbing]):
        (-[WebPlaybackControlsManager endTouchBarScrubbing]):
        (-[WebPlaybackControlsManager generateFunctionBarThumbnailsForTimes:size:completionHandler:]):
        (-[WebPlaybackControlsManager generateFunctionBarAudioAmplitudeSamples:completionHandler:]):
        (-[WebPlaybackControlsManager canBeginFunctionBarScrubbing]):
        (-[WebPlaybackControlsManager beginFunctionBarScrubbing]):
        (-[WebPlaybackControlsManager endFunctionBarScrubbing]):
        (-[WebPlaybackControlsManager audioTouchBarMediaSelectionOptions]):
        (-[WebPlaybackControlsManager setAudioTouchBarMediaSelectionOptions:]):
        (-[WebPlaybackControlsManager currentAudioTouchBarMediaSelectionOption]):
        (-[WebPlaybackControlsManager setCurrentAudioTouchBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager legibleTouchBarMediaSelectionOptions]):
        (-[WebPlaybackControlsManager setLegibleTouchBarMediaSelectionOptions:]):
        (-[WebPlaybackControlsManager currentLegibleTouchBarMediaSelectionOption]):
        (-[WebPlaybackControlsManager setCurrentLegibleTouchBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager setAudioMediaSelectionOptions:withSelectedIndex:]):
        (-[WebPlaybackControlsManager setLegibleMediaSelectionOptions:withSelectedIndex:]):
        (-[WebPlaybackControlsManager audioFunctionBarMediaSelectionOptions]): Deleted.
        (-[WebPlaybackControlsManager setAudioFunctionBarMediaSelectionOptions:]): Deleted.
        (-[WebPlaybackControlsManager currentAudioFunctionBarMediaSelectionOption]): Deleted.
        (-[WebPlaybackControlsManager setCurrentAudioFunctionBarMediaSelectionOption:]): Deleted.
        (-[WebPlaybackControlsManager legibleFunctionBarMediaSelectionOptions]): Deleted.
        (-[WebPlaybackControlsManager setLegibleFunctionBarMediaSelectionOptions:]): Deleted.
        (-[WebPlaybackControlsManager currentLegibleFunctionBarMediaSelectionOption]): Deleted.
        (-[WebPlaybackControlsManager setCurrentLegibleFunctionBarMediaSelectionOption:]): Deleted.

2017-04-21  Jer Noble  <jer.noble@apple.com>

        Make CoreAudioCaptureDevice stackable.
        https://bugs.webkit.org/show_bug.cgi?id=171097

        Reviewed by Eric Carlson.

        There's no real reason to keep CoreAudioCaptureDevice from being created on the stack. 
        Make it un-RefCounted, and have it's static factory method return an std::optional rather
        than a RefPtr.

        Drive-by fix: clean up the factory method of CoreAudioCaptureSource a bit.

        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::CoreAudioCaptureDevice::create):
        (WebCore::CoreAudioCaptureDevice::deviceID): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureDevice.h:
        (WebCore::CoreAudioCaptureDevice::deviceID):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioDeviceWithUID):
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2017-04-21  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Release capture session when not producing data
        https://bugs.webkit.org/show_bug.cgi?id=171148
        <rdar://problem/29265868>

        Reviewed by Jer Noble.

        On iOS, only one AVCaptureSession can be active at a time, so release a session whenever
        it is told to stop producing data. The session will recreated if the capture source if/when
        told to produce data again.

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::stopProducingData): Clear m_session to release the session.
        It will be re-allocated if startProducingData is called later.

2017-04-21  Aaron Chu  <aaron_chu@apple.com>

        AX: FKA: Buttons need a visible focus indicator
        https://bugs.webkit.org/show_bug.cgi?id=171040
        <rdar://problem/30922548>

        Reviewed by Antoine Quint.

        Added a background color for the focus state of the icon buttons in modern media controls.

        Test: media/modern-media-controls/icon-button/icon-button-focus-state.html

        * Modules/modern-media-controls/controls/icon-button.css:
        (button.icon:focus):

2017-03-22  Matt Rajca  <mrajca@apple.com>

        Consider muting audio hardware a form of autoplay interference.
        https://bugs.webkit.org/show_bug.cgi?id=169971

        Reviewed by Eric Carlson.

        If the user mutes audio hardware and a media element is auto-playing, consider that
        as a form of auto-play interference that we tell clients about.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::hardwareMutedStateDidChange):
        * html/HTMLMediaElement.h:
        * platform/audio/AudioSession.h:
        (WebCore::AudioSession::MutedStateObserver::~MutedStateObserver):
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::isMuted):
        (WebCore::muteProcess):
        (WebCore::AudioSession::handleMutedStateChange):
        (WebCore::AudioSession::addMutedStateObserver):
        (WebCore::AudioSession::removeMutedStateObserver):

2017-04-21  Chris Dumez  <cdumez@apple.com>

        Regression(r206240): XMLSerializer.serializeToString() does not properly escape '<' / '>' in attribute values
        https://bugs.webkit.org/show_bug.cgi?id=171132
        <rdar://problem/31426752>

        Reviewed by Ryosuke Niwa.

        Use XMLSerialization [1] in MarkupAccumulator::appendAttribute() when inXMLFragmentSerialization()
        returns true, even if the node's associated document is an HTML document. When XMLSerializer.serializeToString()
        is called on a Node, we want XML serialization, even if the node comes from an HTML document.

        [1] https://w3c.github.io/DOM-Parsing/#dfn-xml-serialization

        Test: fast/dom/XMLSerializer-serializeToString-entities.html

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendAttributeValue):
        (WebCore::MarkupAccumulator::appendAttribute):
        * editing/MarkupAccumulator.h:

2017-04-20  Sam Weinig  <sam@webkit.org>

        Split cryptographic digest computation and parsing out of CSP code so it can be reused
        https://bugs.webkit.org/show_bug.cgi?id=171076

        Reviewed by Chris Dumez.

        Factor out cryptographic digest parsing from Content Security Policy code
        so that it can be reused for the Subresource Integrity implementation.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * html/parser/ParsingUtilities.h:
        (WebCore::skipExactlyIgnoringASCIICase):
        Add parsing helper to match / skip over a constant string, using IgnoringASCIICase semantics.

        * loader/ResourceCryptographicDigest.cpp: Added.
        (WebCore::parseHashAlgorithmAdvancingPosition):
        (WebCore::parseCryptographicDigestImpl):
        (WebCore::parseCryptographicDigest):
        Move parsing of cryptographic-digest strings from ContentSecurityPolicySourceList.cpp
        and optimize it a little by avoiding String allocations and generalizing it so that it
        can parse either UChars or LChars.

        * loader/ResourceCryptographicDigest.h: Added.
        (WebCore::ResourceCryptographicDigest::operator==):
        (WebCore::ResourceCryptographicDigest::operator!=):
        (WTF::DefaultHash<WebCore::ResourceCryptographicDigest>::Hash::hash):
        (WTF::DefaultHash<WebCore::ResourceCryptographicDigest>::Hash::equal):
        (WTF::HashTraits<WebCore::ResourceCryptographicDigest>::emptyValue):
        (WTF::HashTraits<WebCore::ResourceCryptographicDigest>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ResourceCryptographicDigest>::isDeletedValue):
        Add a struct (rather than using a std::pair) to represent the digest + algorithm. And add
        HashTraits so it can be used as HashMap.
        
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::findHashOfContentInPolicies):
        (WebCore::toCryptoDigestAlgorithm): Deleted.
        Move algorithm conversion to ResourceCryptographicDigest.cpp. Make use of new 
        cryptographicDigestForBytes function to do hashing.

        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyHash.h:
        (WTF::DefaultHash<WebCore::ContentSecurityPolicyDigest>::Hash::hash): Deleted.
        (WTF::DefaultHash<WebCore::ContentSecurityPolicyDigest>::Hash::equal): Deleted.
        Remove HashTraits for the digest, this is now handled by ResourceCryptographicDigest. 
        To keep things relatively straight-forward, redefine ContentSecurityPolicyHashAlgorithm
        and ContentSecurityPolicyHash in terms of ResourceCryptographicDigest, so that less code
        has to be changed all at once. In a later pass, if wanted, we can remove these using 
        declarations.

        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::isNonceCharacter):
        Use renamed isBase64OrBase64URLCharacter predicate.

        (WebCore::ContentSecurityPolicySourceList::parseHashSource):
        Rework using ResourceCryptographicDigest parsing. Quotation and maximum digest
        length have been kept here, as they are not applicable to other uses of 
        the digest, specifically Subresource Integrity.

2017-04-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed fix after r215624; null-deref crash.

        Make sure to call reset() inside each constructor.

        * platform/audio/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):

2017-04-21  Anders Carlsson  <andersca@apple.com>

        Stop using deprecated APIs, part 5
        https://bugs.webkit.org/show_bug.cgi?id=171134
        rdar://problem/31589635

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        Stop using the toPaymentAuthorizationStatus. Convert the passed in status results to the remaining
        PaymentAuthorizationStatus values, and add errors if needed.

        (WebCore::toPaymentAuthorizationStatus):
        This function is no longer used.

        * Modules/applepay/PaymentAuthorizationStatus.h:
        Remove deprecated status values. We can achieve the same results with errors now.

        * Modules/applepay/PaymentRequest.cpp:
        (WebCore::isFinalStateResult):
        Remove deprecated status values.

        * Modules/applepay/PaymentRequest.h:
        Remove deprecated status values.

2017-04-21  Per Arne Vollan  <pvollan@apple.com>

        Validate vImage arguments
        https://bugs.webkit.org/show_bug.cgi?id=171109
        rdar://problem/30236606

        Reviewed by Brent Fulgham.

        When writing data to a canvas context, clip the source rectangle to the data rectangle
        to make sure we will not attempt to read data outside of the buffer.

        Test: fast/canvas/canvas-crash.html

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

2017-04-21  David Kilzer  <ddkilzer@apple.com>

        Switch from -std=gnu++11 to -std=gnu++14 for consistency in DerivedSources.make
        <https://webkit.org/b/171122>

        Reviewed by Brent Fulgham.

        * DerivedSources.make: Switch to -std=gnu++14 for preprocessing
        headers to check for build settings.

2017-04-21  Jer Noble  <jer.noble@apple.com>

        [MediaCapture][iOS] AVAudioSession must be active and the correct category before IO AudioUnits start producing data.
        https://bugs.webkit.org/show_bug.cgi?id=171095

        Reviewed by Youenn Fablet.

        If an input audio unit is asked to start before the AVAudioSession is in a recording category and active,
        CoreAudio will return an error stating that no input device is available.

        The PlatformMediaSessionManager will automatically set the category of and activate the AVAudioSession when one
        of its associated MediaStreams has a capturing RealtimeMediaSource and is currently producing data.  To solve
        the chicken-or-egg problem of activating the AVAudioSession before the source produces data, move the state bit
        of "producing data" directly into MediaStreams, and notify the PlatformMediaSessionManager that capturing is
        occurring after flipping that bit, but before asking the constituent tracks to begin producing data.

        In places (i.e. UserMediaRequest) where we previously told a stream's tracks to begin producing data, instead
        allow the stream to handle that by telling it to produce data directly.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::startProducingData):
        (WebCore::MediaStream::stopProducingData):
        (WebCore::MediaStream::mediaState):
        (WebCore::MediaStream::mediaType):
        (WebCore::MediaStream::characteristics):
        (WebCore::MediaStream::canProduceAudio):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2017-04-21  Jer Noble  <jer.noble@apple.com>

        Add a method to retrieve the current I/O buffer size from AudioSession
        https://bugs.webkit.org/show_bug.cgi?id=171126

        Reviewed by Eric Carlson.

        There is an existing method to get and set the preferred I/O buffer size; add a matching method to return
        the acutal I/O buffer size.

        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::bufferSize):
        * platform/audio/AudioSession.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::bufferSize):
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::bufferSize):

2017-04-21  Jer Noble  <jer.noble@apple.com>

        Make AudioSampleBufferList::reset() less expensive.
        https://bugs.webkit.org/show_bug.cgi?id=171124

        Reviewed by Eric Carlson.

        Previously, AudioSampleBufferList would reallocate its constituent WebAudioBufferList every time reset() was
        called. Instead, add a reset() method to WebAudioBufferList which re-initializes its AudioBufferList (which is a
        simple memcpy of a 24-byte struct), reusing the existing memory buffers.

        While making these changes, we'll also take the opportunity to clean up the AudioSampleBufferList class by
        making some of its members into UniqueRefs instead of unique_ptrs, thus removing the possibility of null-
        dereferences.

        * platform/audio/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        (WebCore::WebAudioBufferList::reset):
        * platform/audio/WebAudioBufferList.h:
        * platform/audio/mac/AudioSampleBufferList.cpp:
        (WebCore::AudioSampleBufferList::AudioSampleBufferList):
        (WebCore::AudioSampleBufferList::applyGain):
        (WebCore::AudioSampleBufferList::mixFrom):
        (WebCore::AudioSampleBufferList::reset):
        (WebCore::AudioSampleBufferList::zero):
        (WebCore::AudioSampleBufferList::~AudioSampleBufferList): Deleted.
        * platform/audio/mac/AudioSampleBufferList.h:
        (WebCore::AudioSampleBufferList::bufferList):

2017-04-21  Jer Noble  <jer.noble@apple.com>

        Fix some spurious ASSERTs when working with capturing media elements
        https://bugs.webkit.org/show_bug.cgi?id=171096

        Reviewed by Youenn Fablet.

        Two related ASSERTS:

        1) When we added a new PlatformMediaSession MediaType (MediaStreamCapturingAudio), we did not update all the
        places that validated the enum. This would lead to spurious ASSERTs when an element capturing audio would
        fail various checks to enusre it's type's validity.

        2) Audio elements will ASSERT when they change page visibility, as they do not have a renderer which implements
        visibleInViewportStateChanged(). So opt out of visibility-state checking for non-video media elements.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::wantsToObserveViewportVisibilityForAutoplay):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::resetRestrictions):
        (WebCore::PlatformMediaSessionManager::addRestriction):
        (WebCore::PlatformMediaSessionManager::removeRestriction):
        (WebCore::PlatformMediaSessionManager::restrictions):
        * platform/audio/PlatformMediaSessionManager.h:

2017-04-21  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] WTF target should not have wtf and subdirectries in public interface
        https://bugs.webkit.org/show_bug.cgi?id=171115

        Reviewed by Michael Catanzaro.

        In r209665 WEBCORE_FRAMEWORK macro started to export INCLUDE_DIRECTORIES of
        targets as their public interface, so that linked targets can use them
        implicitly without copying directory lists around. This matches existing
        practice for all targets except WTF, headers from which are always included
        with full path starting from "<wtf/...".

        Since r209665 it became possible to include headers from wtf or its
        subdirectories in CMake builds without using "<wtf/..." path. It should
        not be allowed.

        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp: Fix
        incorrect include of WTF header.

2017-04-21  Gwang Yoon Hwang  <yoon@igalia.com>

        Do not paint the border of the box if the dirty region does not intersect with border area
        https://bugs.webkit.org/show_bug.cgi?id=170988

        Reviewed by Simon Fraser.

        No new tests, since there is no change in behavior.

        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::ellipseContainsPoint):
        Checks if a point is within an ellipse.

        * platform/graphics/GeometryUtilities.h:
        Replace header-guards with #pragma once.

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::contains):
        Implemented to know the dirty rectangle intersects with rounded rectangle or not.
        * platform/graphics/RoundedRect.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        When typing in decorated text box, the dirty rect generated only for the
        inside of the text box, not for the decorations.  So we can avoid the
        calculations to draw borders if the inner border totally covers the
        target surface. It will optimize the rendering process since we don't
        have to render border decorations whenever we type somethings in side of
        the text input element.

2017-04-21  Anders Carlsson  <andersca@apple.com>

        Remove another use of toPaymentAuthorizationStatus
        https://bugs.webkit.org/show_bug.cgi?id=171114

        Reviewed by Dan Bernstein.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::completeShippingContactSelection):

2017-04-21  Alex Christensen  <achristensen@webkit.org>

        Reduce copies and allocations in SharedBuffer::append
        https://bugs.webkit.org/show_bug.cgi?id=170956

        Reviewed by Andreas Kling.

        SharedBuffer was a mess of different data structures added over the years.
        SharedBuffer::append would allocate large Vector<char>s and call memcpy, and that
        is inefficient and causes crashes when large allocations fail, and the allocations
        and copies aren't even necessary.  There were also const correctness problems in
        ResourceLoader::addDataOrBuffer, and iterating a SharedBuffer was strange because
        sometimes we don't want to add unnecessary copies.

        These problems are solved by making SharedBuffer a Vector of read-only data segments,
        which can be contained in various ways but we don't care because all we want to do is
        read them.  Appending SharedBuffers is now const correct because we just add to a
        Vector<Ref<DataSegment>> and neither SharedBuffer can write to the data.  Sometimes,
        though, we want all the data to be in continuous memory, and if there are multiple
        segments then the data needs to be copied once to a new segment.  We should audit the
        call sites of SharedBuffer::data and see if this is really necessary.

        No change in functional behavior.  Fewer copies of the data are made when buffering
        data in the NetworkProcess.  No extra memory is allocated for bytes we think we might
        need to append in the future.  Data is now only copied into one buffer lazily as needed,
        which could slightly change when small delays from memcpy happen, but it's an overall
        improvement.  We could have a performance hit if we were to call append() then data()
        then append() then data() etc. but that doesn't happen in WebKit because we call append
        repeatedly when buffering the data then call data() once when reading the data.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::dataInRTFDFormat):
        (WebCore::Editor::dataInRTFFormat):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readURL):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::imageInWebArchiveFormat):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createResource):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData):
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::tryGetFileBackedSharedBufferFromCFURLCachedResponse):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::combineToOneSegment):
        (WebCore::SharedBuffer::data):
        (WebCore::SharedBuffer::createArrayBuffer):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::copy):
        (WebCore::SharedBuffer::DataSegment::data):
        (WebCore::SharedBuffer::DataSegment::size):
        (WebCore::segmentIndex): Deleted.
        (WebCore::offsetInSegment): Deleted.
        (WebCore::allocateSegment): Deleted.
        (WebCore::freeSegment): Deleted.
        (WebCore::SharedBuffer::~SharedBuffer): Deleted.
        (WebCore::SharedBuffer::size): Deleted.
        (WebCore::SharedBuffer::duplicateDataBufferIfNecessary): Deleted.
        (WebCore::SharedBuffer::appendToDataBuffer): Deleted.
        (WebCore::SharedBuffer::clearDataBuffer): Deleted.
        (WebCore::SharedBuffer::copyBufferAndClear): Deleted.
        (WebCore::SharedBuffer::buffer): Deleted.
        (WebCore::SharedBuffer::getSomeData): Deleted.
        (WebCore::SharedBuffer::maybeTransferMappedFileData): Deleted.
        (WebCore::SharedBuffer::clearPlatformData): Deleted.
        (WebCore::SharedBuffer::maybeTransferPlatformData): Deleted.
        (WebCore::SharedBuffer::hasPlatformData): Deleted.
        (WebCore::SharedBuffer::platformData): Deleted.
        (WebCore::SharedBuffer::maybeAppendPlatformData): Deleted.
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create): Deleted.
        (WebCore::SharedBuffer::isEmpty): Deleted.
        * platform/SharedBufferChunkReader.cpp:
        (WebCore::SharedBufferChunkReader::nextChunk):
        (WebCore::SharedBufferChunkReader::peek):
        * platform/SharedBufferChunkReader.h:
        * platform/URLParser.cpp:
        (WebCore::URLParser::URLParser):
        * platform/cf/KeyedEncoderCF.cpp:
        (WebCore::KeyedEncoderCF::finishEncoding):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createCFData):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::hintMemoryNotNeededSoon):
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::wrapCFData): Deleted.
        (WebCore::SharedBuffer::hasPlatformData): Deleted.
        (WebCore::SharedBuffer::platformData): Deleted.
        (WebCore::SharedBuffer::platformDataSize): Deleted.
        (WebCore::SharedBuffer::maybeTransferPlatformData): Deleted.
        (WebCore::SharedBuffer::clearPlatformData): Deleted.
        (WebCore::SharedBuffer::tryReplaceContentsWithPlatformBuffer): Deleted.
        (WebCore::SharedBuffer::maybeAppendPlatformData): Deleted.
        (WebCore::SharedBuffer::copyBufferAndClear): Deleted.
        (WebCore::SharedBuffer::copySomeDataFromDataArray): Deleted.
        (WebCore::SharedBuffer::singleDataArrayBuffer): Deleted.
        (WebCore::SharedBuffer::maybeAppendDataArray): Deleted.
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::replacementData):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::replacementData):
        * platform/cocoa/SharedBufferCocoa.mm:
        (-[WebCoreSharedBufferData initWithSharedBufferDataSegment:]):
        (-[WebCoreSharedBufferData length]):
        (-[WebCoreSharedBufferData bytes]):
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::createCFData):
        (WebCore::SharedBuffer::createFromReadingFile):
        (WebCore::SharedBuffer::createNSDataArray):
        (-[WebCoreSharedBufferData initWithSharedBufferDataBuffer:]): Deleted.
        (WebCore::SharedBuffer::wrapNSData): Deleted.
        (WebCore::SharedBuffer::existingCFData): Deleted.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::openTypeTable):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::didReceiveBuffer):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::readBuffer):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::write):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::bufferForType):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyReceiveData):
        * platform/network/MIMEHeader.cpp:
        * platform/network/MIMEHeader.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createSoupBuffer):
        (WebCore::SharedBuffer::clearPlatformData): Deleted.
        (WebCore::SharedBuffer::maybeTransferPlatformData): Deleted.
        (WebCore::SharedBuffer::hasPlatformData): Deleted.
        (WebCore::SharedBuffer::platformData): Deleted.
        (WebCore::SharedBuffer::platformDataSize): Deleted.
        (WebCore::SharedBuffer::maybeAppendPlatformData): Deleted.
        (WebCore::SharedBuffer::tryReplaceContentsWithPlatformBuffer): Deleted.

2017-04-21  Timothy Horton  <timothy_horton@apple.com>

        Expose obscured insets to web content (as "safe area insets")
        https://bugs.webkit.org/show_bug.cgi?id=171013
        <rdar://problem/31564652>

        Reviewed by Wenson Hsieh and Dave Hyatt.

        Tests: fast/css/variables/constants/invalid-constant-name-fallback.html
               fast/css/variables/constants/ios/safe-area-inset-set.html
               fast/css/variables/constants/safe-area-inset-cannot-override.html
               fast/css/variables/constants/safe-area-inset-zero.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSValueKeywords.in:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange):
        (WebCore::CSSVariableData::resolveTokenRange):
        * css/parser/CSSVariableParser.cpp:
        (WebCore::isValidConstantName):
        (WebCore::classifyBlock):
        (WebCore::isValidConstantReference):
        Add a constant() function, which takes both custom properties and
        arbitrary idents which are looked up in ConstantPropertyMap, allowing
        fallback from the arbitrary, UA-defined idents to custom properties.

        * dom/ConstantPropertyMap.cpp: Added.
        (WebCore::ConstantPropertyMap::ConstantPropertyMap):
        (WebCore::ConstantPropertyMap::values):
        (WebCore::ConstantPropertyMap::nameForProperty):
        (WebCore::ConstantPropertyMap::setValueForProperty):
        (WebCore::ConstantPropertyMap::buildValues):
        (WebCore::variableDataForSafeAreaInset):
        (WebCore::ConstantPropertyMap::didChangeObscuredInsets):
        * dom/ConstantPropertyMap.h: Added.
        Keep a mapping of UA-defined "constants", which can be looked up
        from CSS via the aforementioned function. For now, this mapping
        includes only safe-area-inset-{top, right, bottom, left}, which
        expose the obscured insets (now that they can be painted into via
        the viewport parameter clip-to-safe-area-inset=no).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didChangeObscuredInsets):
        * dom/Document.h:
        (WebCore::Document::constantProperties):
        * page/Page.cpp:
        (WebCore::Page::setObscuredInsets):
        * page/Page.h:
        (WebCore::Page::setObscuredInsets): Deleted.
        Make setObscuredInsets and related storage not iOS-specific, though
        nothing from the other platforms yet calls this code.

        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        Grab the constant properties from ConstantPropertyMap and plop them into
        the CustomPropertyValueMap. Constant properties aren't allowed to start
        with --, and variable properties must, so there is no opportunity here
        for exposing things to var() (or allowing custom properties to override
        UA-defined constant properties).

2017-04-20  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Define FORWARDING_HEADERS_DIR in WebKitFS and use it everywhere
        https://bugs.webkit.org/show_bug.cgi?id=171071

        Reviewed by Michael Catanzaro.

        "${DERIVED_SOURCES_DIR}/ForwardingHeaders" path occurs very often in the
        build system files. GTK-specifc FORWARDING_HEADERS_DIR variable should
        be available for all ports.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:

2017-04-20  Commit Queue  <commit-queue@webkit.org>

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

        Made all tests crash under GuardMalloc (Requested by ap on
        #webkit).

        Reverted changeset:

        "Expose obscured insets to web content (as "safe area
        insets")"
        https://bugs.webkit.org/show_bug.cgi?id=171013
        http://trac.webkit.org/changeset/215597

2017-04-20  Dean Jackson  <dino@apple.com>

        Add Web Sharing to the features under consideration.

        * features.json:

2017-04-20  Dean Jackson  <dino@apple.com>

        Add Scroll Anchoring to features under consideration.

        * features.json:

2017-04-20  Konstantin Tokarev  <annulen@yandex.ru>

        Remove unused lamda captures
        https://bugs.webkit.org/show_bug.cgi?id=171098

        Reviewed by Yusuke Suzuki.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::activateTransactionInBackingStore):
        * loader/ResourceLoadStatisticsStore.cpp:
        (WebCore::ResourceLoadStatisticsStore::createEncoderFromData):
        (WebCore::ResourceLoadStatisticsStore::readDataFromDecoder):

2017-04-20  Timothy Horton  <timothy_horton@apple.com>

        Expose obscured insets to web content (as "safe area insets")
        https://bugs.webkit.org/show_bug.cgi?id=171013
        <rdar://problem/31564652>

        Reviewed by Wenson Hsieh and Dave Hyatt.

        Tests: fast/css/variables/constants/invalid-constant-name-fallback.html
               fast/css/variables/constants/ios/safe-area-inset-set.html
               fast/css/variables/constants/safe-area-inset-cannot-override.html
               fast/css/variables/constants/safe-area-inset-zero.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSValueKeywords.in:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange):
        (WebCore::CSSVariableData::resolveTokenRange):
        * css/parser/CSSVariableParser.cpp:
        (WebCore::isValidConstantName):
        (WebCore::classifyBlock):
        (WebCore::isValidConstantReference):
        Add a constant() function, which takes both custom properties and
        arbitrary idents which are looked up in ConstantPropertyMap, allowing
        fallback from the arbitrary, UA-defined idents to custom properties.

        * dom/ConstantPropertyMap.cpp: Added.
        (WebCore::ConstantPropertyMap::ConstantPropertyMap):
        (WebCore::ConstantPropertyMap::values):
        (WebCore::ConstantPropertyMap::nameForProperty):
        (WebCore::ConstantPropertyMap::setValueForProperty):
        (WebCore::ConstantPropertyMap::buildValues):
        (WebCore::variableDataForSafeAreaInset):
        (WebCore::ConstantPropertyMap::didChangeObscuredInsets):
        * dom/ConstantPropertyMap.h: Added.
        Keep a mapping of UA-defined "constants", which can be looked up
        from CSS via the aforementioned function. For now, this mapping
        includes only safe-area-inset-{top, right, bottom, left}, which
        expose the obscured insets (now that they can be painted into via
        the viewport parameter clip-to-safe-area-inset=no).

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didChangeObscuredInsets):
        * dom/Document.h:
        (WebCore::Document::constantProperties):
        * page/Page.cpp:
        (WebCore::Page::setObscuredInsets):
        * page/Page.h:
        (WebCore::Page::setObscuredInsets): Deleted.
        Make setObscuredInsets and related storage not iOS-specific, though
        nothing from the other platforms yet calls this code.

        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        Grab the constant properties from ConstantPropertyMap and plop them into
        the CustomPropertyValueMap. Constant properties aren't allowed to start
        with --, and variable properties must, so there is no opportunity here
        for exposing things to var() (or allowing custom properties to override
        UA-defined constant properties).

2017-04-20  Anders Carlsson  <andersca@apple.com>

        Remove one use of toPaymentAuthorizationStatus
        https://bugs.webkit.org/show_bug.cgi?id=171086

        Reviewed by Tim Horton.

        Just switch on the individual ApplePaySession::STATUS_ values.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::completeShippingMethodSelection):

2017-04-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Fix build break after updating ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=170980

        Reviewed by Brent Fulgham.

        By stopping using SoftLinking for ANGLE, some changes are needed
        for WebCore and WebKit.
          - Define a macro 'GL_GLEXT_PROTOTYPES' before #include <GLES2/gl2.h> or <GLES2/gl2ext.h>.
          - Link libEGL import library explicitly.

        * PlatformWin.cmake: Link libEGL to WebCore.
        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::initializeEGLDisplay): Removed the code for SoftLinking.
        * platform/graphics/GLContext.cpp: Define GL_GLEXT_PROTOTYPES.
        * platform/graphics/egl/GLContextEGL.cpp: Ditto.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp: Ditto.
        * platform/graphics/opengl/Extensions3DOpenGLES.h: Ditto.
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp: Ditto.
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp: Ditto.

2017-04-20  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Add regular expression support to XHR breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=170099
        <rdar://problem/31558082>

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        Use ContentSearchUtilities for both Text and RegularExpression breakpoints.

        * inspector/InspectorDOMDebuggerAgent.h:
        Associate XHR breakpoint with a type.

2017-04-20  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Cleanup and simplify CoreAudioCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=171064

        There is no need for a mutex to guard against internal state changes because we
        don't currently change configuration after the audio unit is allocated. Once
        we do support reconfiguration on the fly, we can just stop the output unit before
        changing configuration because the I/O proc isn't called if the output unit
        is stopped, and AudioOutputUnitStop blocks until the audio device has stopped.
        
        Reviewed by Jer Noble.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource): Call cleanupAudioUnits
        instead of duplicating logic. 
        (WebCore::CoreAudioCaptureSource::preferredIOBufferDuration): Change preferred
        duration from 20ms to 40ms.
        (WebCore::CoreAudioCaptureSource::configureMicrophoneProc): Set mSampleRate to the
        preferred sample rate if it is 0.
        (WebCore::CoreAudioCaptureSource::configureSpeakerProc): Ditto.
        (WebCore::CoreAudioCaptureSource::provideSpeakerData): Only increment counter and
        check timestamps in debug builds.
        (WebCore::CoreAudioCaptureSource::processMicrophoneSamples): Ditto.
        (WebCore::CoreAudioCaptureSource::cleanupAudioUnits): We only need the audio unit
        name in debug builds.
        (WebCore::CoreAudioCaptureSource::setupAudioUnits): Ditto. No more internal state
        lock. Don't try to get the default input device on iOS.
        (WebCore::CoreAudioCaptureSource::startProducingData): No more internal state lock.
        Assert if not called on the main thread.
        (WebCore::CoreAudioCaptureSource::stopProducingData): Ditto.
        (WebCore::CoreAudioCaptureSource::suspend): Ditto.
        (WebCore::CoreAudioCaptureSource::resume): Ditto.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2017-04-20  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Hold process assertion while media capture is active
        https://bugs.webkit.org/show_bug.cgi?id=171017
        <rdar://problem/31719177>

        Reviewed by Dean Jackson.

        * page/ActivityState.h: Add IsCapturingMedia flag.

        * page/Page.cpp:
        (WebCore::Page::updateTimerThrottlingState): Enable timer throttling when capture is active
        like we do when playing audio.
        (WebCore::Page::setActivityState): Ditto.

        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::updateProcessStateForMemoryPressure): A process is active when
        capturing media, as it is when playing audio.

2017-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Inline anchor elements cannot be dragged when starting the drag from a block descendant
        https://bugs.webkit.org/show_bug.cgi?id=171062
        <rdar://problem/31697835>

        Reviewed by Tim Horton.

        Tweaks DragController::draggableElement to traverse the DOM instead of the render tree when finding a draggable
        element. This prevents us from skipping elements that are in the DOM ancestor chain, but appear as siblings to
        the hit-tested node's renderer in the render tree.

        There was also previously a check to ensure that we skip anonymous RenderObjects while traversing up the chain,
        but this is no longer necessary fter this change, since all the elements we traverse in the DOM should have
        renderers that are not anonymous.

        Test: fast/events/drag-and-drop-link-containing-block.html

        * page/DragController.cpp:
        (WebCore::DragController::draggableElement):

2017-04-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wformat warning on HistoryController.cpp:295:5
        https://bugs.webkit.org/show_bug.cgi?id=171028

        Reviewed by Daniel Bates.

        Need to cast WebCore::FrameLoadType to int before using it in printf.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):

2017-04-20  Per Arne Vollan  <pvollan@apple.com>

        The toleranceBefore parameter in the AVPlayerItem method seekToTime should not be negative.
        https://bugs.webkit.org/show_bug.cgi?id=171063

        Reviewed by Eric Carlson.

        The AVPlayerItem method seekToTime will throw an exception if toleranceBefore is negative.

        No new tests since the change is a sanity check.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekTask):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):

2017-04-20  Anders Carlsson  <andersca@apple.com>

        Replace isFinalStateStatus with isFinalStateResult
        https://bugs.webkit.org/show_bug.cgi?id=171072
        rdar://problem/31589635

        Reviewed by Tim Horton.

        This will let us get rid of some of the status enum declarations.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::completePayment):
        * Modules/applepay/PaymentAuthorizationStatus.h:
        (WebCore::isFinalStateStatus): Deleted.
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::completePaymentSession):
        * Modules/applepay/PaymentRequest.cpp:
        (WebCore::isFinalStateResult):
        * Modules/applepay/PaymentRequest.h:

2017-04-20  Brent Fulgham  <bfulgham@apple.com>

        [Win] REGRESSION(r215486): Windows Release build is broken
        https://bugs.webkit.org/show_bug.cgi?id=171024
        <rdar://problem/31722618>

        Reviewed by Mark Lam.

        Add missing include needed for clean Release build on Windows (proper
        fix found by Fujii Hironori).

        * bindings/js/JSDOMGlobalObject.h:

2017-04-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        CachedImage should cancel loading images for unsupported/unknown types
        https://bugs.webkit.org/show_bug.cgi?id=170697

        Reviewed by Youenn Fablet.

        Currently when the image decoder detects an error with the incoming encoded
        data of an image, we mark the image to be a broken image. But the network
        process keeps feeding the web process with the rest of the data. We should
        cancel loading the rest of the data to save network bandwidth and CPU time
        loading and processing useless data.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addIncrementalDataBuffer):
        (WebCore::CachedImage::finishLoading):

2017-04-20  Aaron Chu  <aaron_chu@apple.com>

        AX: Modern Media Controls Timeline slider should be operable
        https://bugs.webkit.org/show_bug.cgi?id=170250

        Reviewed by Antoine Quint.

        Added a "change" event listener and aria-valuetext to the slider so that when a
        VoiceOver user operates the timeline control, VO speaks the updated timestamp

        Test: media/modern-media-controls/scrubber/scrubber-has-correct-ax-label.html

        * English.lproj/modern-media-controls-localized-strings.js:
        * Modules/modern-media-controls/controls/scrubber.js:
        (Scrubber.prototype.set inputAccessibleLabel):
        (Scrubber.prototype._formatTime):
        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.handleEvent):
        (Slider.prototype._handleInputEvent): Deleted.
        * Modules/modern-media-controls/controls/time-control.js:
        (TimeControl.prototype.updateScrubberLabel):
        * Modules/modern-media-controls/controls/time-label.js:
        (TimeLabel.prototype.commitProperty):
        (TimeLabel.prototype._formattedTime):
        * Modules/modern-media-controls/main.js:
        (formatTimeByUnit):
        (unitizeTime):

2017-04-20  Andy Estes  <aestes@apple.com>

        Fix indentation in AVKitSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=171066

        Reviewed by Jer Noble.

        * platform/spi/cocoa/AVKitSPI.h:

2017-04-20  Jer Noble  <jer.noble@apple.com>

        [MediaCapture] gUM() with CoreAudio fails if capturing audio in the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=171021

        Reviewed by Eric Carlson.

        Refactor the creation of RealtimeMediaSources to take a persistent device ID rather
        than a CaptureDevice directly. This allows WebKit2 to iterate devices in the UIProcess
        rather than the WebProcess.

        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints):
        * platform/mock/MockRealtimeAudioSource.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:

2017-04-20  Tim Horton  <timothy_horton@apple.com>

        Make it possible to request the non-expanded scrollbar width from ScrollbarTheme
        https://bugs.webkit.org/show_bug.cgi?id=171047

        Reviewed by Sam Weinig.

        No new tests, new behavior is not exposed in any way.

        * platform/ScrollTypes.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::scrollbarThickness):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::scrollbarThickness):
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/ScrollbarThemeIOS.mm:
        (WebCore::ScrollbarThemeIOS::scrollbarThickness):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::scrollbarThickness):
        * platform/mock/ScrollbarThemeMock.h:
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::scrollbarThickness):
        * platform/win/ScrollbarThemeWin.h:
        * rendering/RenderScrollbarTheme.h:
        On Mac, when the scrollbar is hovered, it gets bigger.
        Currently, scrollbarThickness always returns the big size.
        It should be possible to request the smaller, "regular" scrollbar size as well.

2017-04-20  Jon Lee  <jonlee@apple.com>

        Update pip placard to "picture in picture"
        https://bugs.webkit.org/show_bug.cgi?id=171036
        rdar://problem/30201536

        Reviewed by Antoine Quint.

        Updated media/modern-media-controls/pip-placard/pip-placard.html

        Update the text shown with the picture in picture placard.

        * English.lproj/mediaControlsLocalizedStrings.js:
        * English.lproj/modern-media-controls-localized-strings.js:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updatePictureInPicturePlaceholder):
        * Modules/modern-media-controls/controls/pip-placard.js:
        (PiPPlacard):

2017-04-20  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection is stopping its backend twice sometimes
        https://bugs.webkit.org/show_bug.cgi?id=171043

        Reviewed by Eric Carlson.

        Test: webrtc/closing-peerconnection.html

        Making sure we stop the backend only once.
        Adding an internals API to close the peer connection so as to replicate frame disconnection.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::doClose):
        (WebCore::RTCPeerConnection::doStop):
        * Modules/mediastream/RTCPeerConnection.h:
        * testing/Internals.cpp:
        (WebCore::Internals::stopPeerConnection):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-04-20  Antti Koivisto  <antti@apple.com>

        Increase large animation cutoff
        https://bugs.webkit.org/show_bug.cgi?id=171051
        <rdar://problem/31731532>

        Reviewed by Andreas Kling.

        We currently switch to per-frame decoding if the animation is larger than 5MB. This is very
        power-inefficient and such animations are now common. The cutoff originates from 2007 (r20069),
        it is time update it.

        Note that the normal low memory handling will still kill animation frames as needed.

        * platform/graphics/BitmapImage.h:

            Increase cutoff to 30MB. This is enough (with some room to spare) for animations on current
            tumblr.com/search/aww.

            Also remove the separate cutoff value for iOS.

2017-04-20  Zan Dobersek  <zdobersek@igalia.com>

        Register missing AES_CTR, ECDSA and HKDF algorithms in
        GCrypt's CryptoAlgorithmRegistry implementation.

        Rubber-stamped by Carlos Alberto Lopez Perez.

        * crypto/gcrypt/CryptoAlgorithmRegistryGCrypt.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):

2017-04-20  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Implement support for DPub ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=170679

        Reviewed by Chris Fleizach.

        Create two new WebCore AccessibilityRole values: TextGroup and ApplicationTextGroup.
        These roles make it possible for platforms to distinguish groups which are primarily
        intended to display textual content from groups which are primarily intended to hold
        user-interface objects. Use these roles to fix the ATK mapping of DPub's groups, which
        should be exposed as ATK_ROLE_SECTION; not ATK_ROLE_PANEL.

        Modify the following WebCore AccessibilityRole mappings:
        - doc-abstract changed to ApplicationTextGroupRole because this DPub ARIA role does
          not subclass the ARIA landmark role
        - doc-biblioentry and doc-endnote changed to ListItemRole, because these DPub ARIA
          roles subclass the ARIA listitem role
        - doc-notice and doc-tip changed to DocumentNoteRole because these DPub ARIA roles
          subclass the ARIA note role
        - doc-pagebreak changed to SplitterRole because this DPub ARIA role subclasses the
          ARIA separator role

        No new tests required: New test cases were added to xml-roles-exposed.html, and
        the platform expectations for roles-exposed.html were updated to reflect the
        correct mappings.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::determineAccessibilityRole):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isGroup):
        (WebCore::AccessibilityNodeObject::helpText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::computedRoleString):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::helpText):
        (WebCore::AccessibilityRenderObject::shouldFocusActiveDescendant):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (atkRole):
        (roleIsTextType):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):

2017-04-19  Youenn Fablet  <youenn@apple.com>

        [Mac] Allow customizing H264 encoder
        https://bugs.webkit.org/show_bug.cgi?id=170829

        Reviewed by Alex Christensen.

        Using WebKitAdditions CreateCompressionSession if available.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.h: Added.
        * platform/mediastream/libwebrtc/H264VideoToolBoxEncoder.mm: Added.
        (WebCore::H264VideoToolboxEncoder::CreateCompressionSession):
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp:
        (WebCore::VideoToolboxVideoEncoderFactory::CreateSupportedVideoEncoder):

2017-04-19  Eric Carlson  <eric.carlson@apple.com>

        Another deadlock in CoreAudioCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=171001

        Fix another regression introduced by r215201, plus make changes suggested
        in the review of 170771.

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::configureSpeakerProc): Assert if the lock is no held.
        (WebCore::CoreAudioCaptureSource::provideSpeakerData): Don't reset the buffer.
        (WebCore::CoreAudioCaptureSource::processMicrophoneSamples): Take the state lock. Don't
        reset the buffer. No more microphone callbacks.
        (WebCore::CoreAudioCaptureSource::stopProducingData): Return early if the io unit isn't
        running. Drop the lock before calling setMuted to avoid another deadlock.
        (WebCore::CoreAudioCaptureSource::addMicrophoneDataConsumer): Deleted.
        (WebCore::CoreAudioCaptureSource::removeMicrophoneDataConsumer): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:

2017-04-19  Anders Carlsson  <andersca@apple.com>

        Stop using deprecated APIs, part 3
        https://bugs.webkit.org/show_bug.cgi?id=171003
        rdar://problem/31589635
        rdar://problem/31589635

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        The status member variable has been removed from ApplePayShippingMethodUpdate.

        (WebCore::ApplePaySession::completeShippingMethodSelection):
        If status is not STATUS_SUCCESS, cancel the payment session.

        (WebCore::ApplePaySession::canSuspendForDocumentSuspension):
        (WebCore::ApplePaySession::canBegin):
        (WebCore::ApplePaySession::canAbort):
        (WebCore::ApplePaySession::canCancel):
        (WebCore::ApplePaySession::canCompleteShippingMethodSelection):
        (WebCore::ApplePaySession::canCompleteShippingContactSelection):
        (WebCore::ApplePaySession::canCompletePaymentMethodSelection):
        (WebCore::ApplePaySession::canCompletePayment):
        (WebCore::ApplePaySession::isFinalState):
        Add State::CancelRequested.

        * Modules/applepay/ApplePayShippingMethodUpdate.h:
        * Modules/applepay/ApplePayShippingMethodUpdate.idl:
        Remove status.

        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::cancelPaymentSession):
        Call through to the client.

        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        Add cancelPaymentSession().

        * Modules/applepay/PaymentRequest.h:
        Remove status.

        * loader/EmptyClients.cpp:
        Add new client member function.

2017-04-19  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Limit capture to one tab at a time
        https://bugs.webkit.org/show_bug.cgi?id=171009

        Reviewed by Jon Lee.

        No new tests yet, filed bug 171011.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::stopTrack): Drive-by fix: renamed from stopProducingData
        because stopProducingData is a method in RealtimeMediaSource that does something different.
        (WebCore::MediaStreamTrack::stop): Call stopTrack.
        (WebCore::MediaStreamTrack::stopProducingData): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:

        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::replaceTrack): Update for rename.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::muted): Drive-by fix: a track that has ended but 
        which is not muted will never produce data.

2017-04-19  Alex Christensen  <achristensen@webkit.org>

        Parsing large XML strings fails
        https://bugs.webkit.org/show_bug.cgi?id=170999
        <rdar://problem/17336267>

        Reviewed by Brady Eidson.

        Test: fast/dom/xml-large.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLParserContext::createStringParser):
        (WebCore::XMLParserContext::createMemoryParser):
        Allow huge XML strings. They work fine in Chrome and Firefox.

2017-04-19  Chris Fleizach  <cfleizach@apple.com>

        AX: <hr> should use a different role description than interactive separators
        https://bugs.webkit.org/show_bug.cgi?id=170317
        <rdar://problem/31363024>

        Reviewed by Joanmarie Diggs.

        Users are confused with WebKit's accessibility description of separators. 
        We should call these what they are, horizontal rules.

        Updated test: accessibility/mac/hr-element-expected.txt

        * English.lproj/Localizable.strings:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::orientation):
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::AXHorizontalRuleDescriptionText):

2017-04-19  Anders Carlsson  <andersca@apple.com>

        Rename cancelPayment to cancelPaymentSession
        https://bugs.webkit.org/show_bug.cgi?id=171007

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::didCancelPaymentSession):
        (WebCore::ApplePaySession::didCancelPayment): Deleted.
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::didCancelPaymentSession):
        (WebCore::PaymentCoordinator::didCancelPayment): Deleted.
        * Modules/applepay/PaymentCoordinator.h:

2017-04-19  Joseph Pecoraro  <pecoraro@apple.com>

        ASAN Crash running LayoutTests/inspector/worker tests
        https://bugs.webkit.org/show_bug.cgi?id=170967
        <rdar://problem/31256437>

        Reviewed by Alex Christensen.

        * workers/WorkerMessagingProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::workerGlobalScopeDestroyedInternal):
        Make the MessagingProxy thread safe ref counted. Since it used to
        delete itself, turn this into a ref (implicit on construction)
        and deref (replacing delete this).

        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        When dispatching have the lambda implicitly ref/deref with the
        lambda to keep the proxy alive while a lambda is queued.

2017-04-19  Brent Fulgham  <bfulgham@apple.com>

        [iOS, macOS] Guard against passing nullptr to vImagePremultiplyData
        https://bugs.webkit.org/show_bug.cgi?id=170912
        <rdar://problem/30565800>

        Reviewed by Brady Eidson.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::affineWarpBufferData): Assert if we passed nullptr buffers.
        (WebCore::transferData): Ditto.
        (WebCore::ImageBufferData::getData): Check for nullptr data member and avoid passing to vImage routines.
        (WebCore::ImageBufferData::putData): Ditto.

2017-04-19  Dave Hyatt  <hyatt@apple.com>

        Remove bogus assert for :not.
        https://bugs.webkit.org/show_bug.cgi?id=170995
        <rdar://problem/29693115>

        Reviewed by Zalan Bujtas.

        * css/parser/CSSSelectorParser.cpp:

2017-04-19  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Allow non-PNG resources
        https://bugs.webkit.org/show_bug.cgi?id=170992
        <rdar://problem/31706590>

        Reviewed by Dean Jackson.

        Instead of passing in a name and a platform to MediaControlsHost::base64StringForIconAndPlatform(),
        we now pass in a name and a type to MediaControlsHost::base64StringForIconNameAndType(). We've removed
        the need to provide a platform by copying the resources directly under "Resources/modern-media-controls"
        insted of "Resources/modern-media-controls/platform-name-here", and now we provide a type so that it
        may be passed down to -[NSBundle pathForResource:ofType:inDirectory:].

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::base64StringForIconNameAndType):
        (WebCore::MediaControlsHost::base64StringForIconAndPlatform): Deleted.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/modern-media-controls/controls/icon-service.js:
        (const.iconService.new.IconService.prototype.imageForIconNameAndLayoutTraits):
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsBase64StringForIconNameAndType):
        (WebCore::RenderTheme::mediaControlsBase64StringForIconAndPlatform): Deleted.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsBase64StringForIconNameAndType):
        (WebCore::RenderThemeIOS::mediaControlsBase64StringForIconAndPlatform): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsBase64StringForIconNameAndType):
        (WebCore::RenderThemeMac::mediaControlsBase64StringForIconAndPlatform): Deleted.

2017-04-19  Antti Koivisto  <antti@apple.com>

        Avoid repaints for invisible animations on tumblr.com/search/aww
        https://bugs.webkit.org/show_bug.cgi?id=170986
        <rdar://problem/28644580>

        Reviewed by Andreas Kling.

        Test: fast/repaint/mutate-non-visible.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::requiresPainting):
        (WebCore::RenderStyle::changeRequiresRepaint):

            If an element is invisible it does not require repaint even if something else changes.

2017-04-19  Dean Jackson  <dino@apple.com>

        Non-muxable GPUs shouldn't allow offline rendering
        https://bugs.webkit.org/show_bug.cgi?id=170984
        <rdar://problem/31614406>

        Reviewed by Myles Maxfield.

        Setting the kCGLPFAAllowOfflineRenderers flag doesn't do any
        harm on devices that only have one GPU. It's also what we
        want on devices that can mux between GPUs. However, we were
        also setting it unconditionally on devices with multiple
        GPUs that have issues muxing.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::setPixelFormat): Add a test for hasMuxableGPU.

2017-04-18  Youenn Fablet  <youenn@apple.com>

        RTCOfferOptions iceRestart should be supported
        https://bugs.webkit.org/show_bug.cgi?id=170966

        Reviewed by Alex Christensen.

        No ability to test iceRestart as of now.
        Passing iceRestart value to libwebrtc.
        Passing also voiceActivityDetection value to libwebrtc.
        Updating mock to use the new overloaded CreateOffer method.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doCreateOffer):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::CreateOffer):
        * testing/MockLibWebRTCPeerConnection.h:

2017-04-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Support DataTransfer::files() when performing a DHTML data interaction
        https://bugs.webkit.org/show_bug.cgi?id=170880
        <rdar://problem/31314689>

        Reviewed by Tim Horton.

        Adds support for fetching files from the DataTransfer when performing a data interaction operation handled by
        JavaScript. There are two changes we make here to achieve this:

        First, we teach the Pasteboard on iOS to know what file paths hold the item provider contents used in the
        current data interaction operation. On iOS, Pasteboard::readFilenames is currently hard-coded to return an empty
        vector. To fix this, we add logic to the iOS Pasteboard to remember what the paths of all files that were
        successfully loaded from item providers as the data interaction is taking place. This ensures that at the
        WebCore layer, the implementation of Pasteboard::readFilenames on Mac and iOS is similar -- they both call out
        to the client layer in order to read file paths off of their respective pasteboards. Once in the client layer
        (WebKit1 or WebKit2) we then call into PlatformPasteboard::filenamesForDataInteraction, which then calls into
        WebItemProviderPasteboard if applicable.

        The second tweak is to propagate information about whether the document is preventing default data interaction
        behavior to the client layer. This prevents us from having to save pasteboard content when performing data
        interaction in cases where file information is not needed (i.e. the default behavior is being performed, and
        the target is not a file input). This also avoids compatibility issues with insertion animations when performing
        data interaction in editable areas, due to the extra time spent loading item provider data into a temporary
        file.

        Unit tests in <https://bugs.webkit.org/show_bug.cgi?id=170903>.

        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):

        Refactor DragController::tryDocumentDrag to return a DragHandlingMethod. This method currently returns either
        true or false; this patch changes it to return a DragHandlingMethod, which is either None (the equivalent of
        returning false before the patch), Default (indicating that the drop destination is allowing default handling),
        or NonDefault, which indicates that the drop destination has explicitly prevented default.

        * page/DragController.h:
        (WebCore::DragController::documentIsHandlingNonDefaultDrag):

        Used by WebPage when sending an IPC response after handling dragentered or dragupdated.

        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readFilenames):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::filenamesForDataInteraction):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:

        WebItemProviderPasteboard now remembers the file URLs of successfully loaded item provider content when a data
        interaction is being performed. The new filenamesForDataInteraction property returns the array of data
        interaction file URLs which have been propagated to the web process along with sandbox extensions. This state
        is cleaned up when list of item providers change (i.e. when the data interaction operation is finished, or if
        the web content process crashes, etc.)

        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard filenamesForDataInteraction]):
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:]):

2017-04-18  Dean Jackson  <dino@apple.com>

        Cairo build fix.
        https://bugs.webkit.org/show_bug.cgi?id=170941

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2017-04-18  Ryan Haddad  <ryanhaddad@apple.com>

        Rebaseline bindings tests after r215486.

        Unreviewed test gardening.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjOnfooGetter):
        (WebCore::jsTestObjOnwebkitfooGetter):

2017-04-18  Dean Jackson  <dino@apple.com>

        Attempted build fix. Add/remove some files from ANGLE.

        * CMakeLists.txt:

2017-04-18  Dean Jackson  <dino@apple.com>

        Update ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=170941
        <rdar://problem/31633999>

        Reviewed by Alex Christensen.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::ANGLEWebKitBridge):
        (WebCore::ANGLEWebKitBridge::cleanupCompilers):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking):

2017-04-18  John Wilander  <wilander@apple.com>

        Make WebCore::topPrivatelyControlledDomain() return "localhost" for localhost
        https://bugs.webkit.org/show_bug.cgi?id=170798
        <rdar://problem/31595108>

        Reviewed by Alex Christensen.

        API test augmented.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain):
            Now returns the lowercase top privately controlled
            domain including "localhost" for the host localhost.

2017-04-18  Brent Fulgham  <bfulgham@apple.com>

        JSEventListener::m_isolatedWorld should be a Ref
        https://bugs.webkit.org/show_bug.cgi?id=170910
        <rdar://problem/30470332>

        Reviewed by Alex Christensen.

        Since m_isolatedWorld should never be nullptr, change the implementation of m_isolatedWorld
        from a RefPtr to a Ref, and adjust the various call sites to support this change.

        This should help us catch any changes that permit the isolatedWorld to be set to nullptr.

        No new tests since there should be no change in behavior.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::initializeJSFunction):
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::cast):
        (WebCore::JSEventListener::isolatedWorld):
        (WebCore::JSEventListener::jsFunction):

2017-04-18  Brent Fulgham  <bfulgham@apple.com>

        Correct handling of isolatedWorld in event handling
        https://bugs.webkit.org/show_bug.cgi?id=65589
        <rdar://problem/24097804>

        Reviewed by Geoffrey Garen.

        This patch was inspired by Adam's original patch as well as the
        following Blink change:
        https://src.chromium.org/viewvc/blink?revision=152377&view=revision

        Thread isolatedWorld state through event handling logic.

        Tests: fast/dom/event-attrs-isolated-world.html
               http/tests/security/isolatedWorld/onclick-attribute.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::initializeJSFunction):
        (WebCore::JSEventListener::world):
        (WebCore::eventHandlerAttribute):
        (WebCore::setEventHandlerAttribute):
        (WebCore::windowEventHandlerAttribute):
        (WebCore::setWindowEventHandlerAttribute):
        (WebCore::documentEventHandlerAttribute):
        (WebCore::setDocumentEventHandlerAttribute):
        * bindings/js/JSEventListener.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * dom/Document.cpp:
        (WebCore::Document::setWindowAttributeEventListener):
        (WebCore::Document::getWindowAttributeEventListener):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::setAttributeEventListener):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::setAttributeEventListener):
        (WebCore::EventTarget::attributeEventListener):
        * dom/EventTarget.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseAttribute):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseAttribute):

2017-04-18  Jeremy Jones  <jeremyj@apple.com>

        Deadlock in CoreAudioCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=170771
        rdar://problem/31578919

        Reviewed by Eric Carlson.

        Fixes a regression introduced by r215201.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::stopProducingData):

2017-04-18  Anders Carlsson  <andersca@apple.com>

        Stop using deprecated APIs, part 2
        https://bugs.webkit.org/show_bug.cgi?id=170965
        rdar://problem/31589635

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        No need to convert the status anymore.

        (WebCore::ApplePaySession::completeShippingContactSelection):
        Create an ApplePayError given the status.

        * Modules/applepay/ApplePayShippingContactUpdate.h:
        Remove the status member variable.

        * Modules/applepay/PaymentRequest.h:
        Remove the status member variable.

2017-04-18  Tim Horton  <timothy_horton@apple.com>

        Safari crash when clicking phone number data detector popover button
        https://bugs.webkit.org/show_bug.cgi?id=170936
        <rdar://problem/31416570>

        Reviewed by Wenson Hsieh.

        * platform/spi/mac/DataDetectorsSPI.h:
        Soft-link the phone number key from the correct framework.

2017-04-17  Sam Weinig  <sam@webkit.org>

        [WebIDL] Make annotated types first class allowing them to be used in sequences and unions
        https://bugs.webkit.org/show_bug.cgi?id=170926

        Reviewed by Chris Dumez.

        - Adds IDL types for WebIDL annotated types:
            [Clamp] T -> IDLClampAdaptor<T>
            [EnforceRange] T -> IDLEnforceRangeAdaptor<T>
            [TreatNullAs=EmptyString] T -> IDLTreatNullAsEmptyAdaptor<T>
        - Adds additional adaptors for existing specializations
            [AtomicString] T -> IDLAtomicStringAdaptor<T>
            [RequiresExistingAtomicString] T -> IDLRequiresExistingAtomicStringAdaptor<T>
        - Removes the need for IntegerConversionConfiguration and StringConversionConfiguration
          overloads of convert().
        - Allows the use of annotated types as subtypes, such as in sequences and unions.

        * bindings/IDLTypes.h:
        Add new types:
            - IDLClampAdaptor
            - IDLEnforceRangeAdaptor
            - IDLTreatNullAsEmptyAdaptor
            - IDLAtomicStringAdaptor
            - IDLRequiresExistingAtomicStringAdaptor
        Add new predicates for matching strings and strings/enumerations.

        * bindings/js/JSDOMConvertNullable.h:
        Remove now unnecessary overloads of convert that took IntegerConversionConfiguration
        and StringConversionConfiguration.

        * bindings/js/JSDOMConvertNumbers.cpp:
        * bindings/js/JSDOMConvertNumbers.h:
        Replace individually named conversion functions with explicit template specializations
        based on type.
        (WebCore::Converter<IDLByte>::convert):
        (WebCore::Converter<IDLOctet>::convert):
        (WebCore::Converter<IDLShort>::convert):
        (WebCore::Converter<IDLUnsignedShort>::convert):
        (WebCore::Converter<IDLLong>::convert):
        (WebCore::Converter<IDLUnsignedLong>::convert):
        (WebCore::Converter<IDLLongLong>::convert):
        (WebCore::Converter<IDLUnsignedLongLong>::convert):
        Simplify convert functions for normal integer converters to only handle
        the normal case. 

        (WebCore::Converter<IDLClampAdaptor<T>>::convert):
        (WebCore::JSConverter<IDLClampAdaptor<T>>::convert):
        (WebCore::Converter<IDLEnforceRangeAdaptor<T>>::convert):
        (WebCore::JSConverter<IDLEnforceRangeAdaptor<T>>::convert):
        Add converters for the new annotated types that call into the new
        template specialized conversion functions.

        * bindings/js/JSDOMConvertStrings.h:
        (WebCore::Converter<IDLDOMString>::convert):
        (WebCore::Converter<IDLByteString>::convert):
        (WebCore::Converter<IDLUSVString>::convert):
        Remove no longer needed StringConversionConfiguration parameter.

        (WebCore::Converter<IDLTreatNullAsEmptyAdaptor<T>>::convert):
        (WebCore::JSConverter<IDLTreatNullAsEmptyAdaptor<T>>::convert):
        (WebCore::Converter<IDLAtomicStringAdaptor<T>>::convert):
        (WebCore::JSConverter<IDLAtomicStringAdaptor<T>>::convert):
        (WebCore::Converter<IDLRequiresExistingAtomicStringAdaptor<T>>::convert):
        (WebCore::JSConverter<IDLRequiresExistingAtomicStringAdaptor<T>>::convert):
        Add converters for new annotated types. Statically assert that the atomic string
        adaptors only work for DOMString at present.

        * bindings/js/JSDOMConvertUnion.h:
        Update union code to fix a long standing FIXME, treating enumerations as strings
        for the purposes of the union algorithm, and using the new predicate that works
        with the slightly more complicated IDLString type (e.g. it can now either be a String
        or an AtomicString).

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        Remove explicit passing of Normal for the conversion configuration
        and use new adaptors where appropriate.

        * bindings/scripts/CodeGeneratorJS.pm:
        (IsAnnotatedType):
        (GetAnnotatedIDLType):
        (GetIDLType):
        (JSValueToNative):
        (UnsafeToNative):
        (GetIntegerConversionConfiguration): Deleted.
        (GetStringConversionConfiguration): Deleted.
        Replace passing conversion configuration and specializing for atomic string
        with annotated types.

        * bindings/scripts/IDLParser.pm:
        (parseUnionMemberType):
        Fix parser error where we weren't parsing extended attributes for a union correctly.

        * 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/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        Update tests for changes to integer and string conversion.

        * domjit/DOMJITIDLConvert.h:
        * domjit/DOMJITIDLType.h:
        * domjit/DOMJITIDLTypeFilter.h:
        Add specializations for AtomicString related adaptors.

        * testing/TypeConversions.h:
        * testing/TypeConversions.idl:
        - Re-arrange integer attributes to be in size order, and add [Clamp] variants. 
        - Replace function taking a dictionary + attributes to inspect it
          with a dictionary attribute. This has been supported for a while
          and makes the test much clearer (this includes the enum used for
          inspecting the union in the dictionary).
        - Add additional test unions that exercise annotated types as subtypes.
        - Add additional dictionary items that exercise annotated types as subtypes.

2017-04-18  Antti Koivisto  <antti@apple.com>

        Enable optimized layer flushes on iOS
        https://bugs.webkit.org/show_bug.cgi?id=170938
        <rdar://problem/31677395>

        Reviewed by Simon Fraser.

        Test: compositing/ios/overflow-scroll-touch-tiles.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setApproximatePosition):

            Make virtual.

        (WebCore::GraphicsLayer::flushCompositingState):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::syncPosition):

            Rename PositionChanged enum value to more descriptive NeedsComputeVisibleAndCoverageRect.

        (WebCore::GraphicsLayerCA::setApproximatePosition):
        (WebCore::GraphicsLayerCA::syncBoundsOrigin):

            Like syncPosition make these invalidate the geometry without scheduling a flush. This is needed
            so when flush happens we don't just optimize it away. Tile coverage depends on position and bounds.

        (WebCore::GraphicsLayerCA::flushCompositingState):

            Remove FlushScope argument.
            Disable optimization on WK1 due to some UIKit interactions.

        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:

2017-04-18  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS Debug build

        * platform/LengthBox.h:

2017-04-18  Andreas Kling  <akling@apple.com>

        Break Document::m_associatedFormControls reference cycle.
        <https://webkit.org/b/170946>

        Reviewed by Antti Koivisto.

        There was a race between didAssociateFormControls() and didAssociateFormControlsTimerFired()
        where detaching Document from its frame between the two would lead to an unbreakable reference
        cycle between Document and its form elements.

        Solve this by clearing the set of associated form elements in removedLastRef(), where we clear
        all the other strong smart pointers to elements.

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

2017-04-18  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Add support for percentage gaps
        https://bugs.webkit.org/show_bug.cgi?id=170764

        Reviewed by Sergio Villar Senin.

        Part of the code to support percentage gaps was already imported
        from Blink in r213149 (bug #168657). However parsing was not enabled yet,
        so some pieces were missing.

        This patch accepts percentages in the parsing of grid-column-gap and
        grid-row-gap properties, and the grid-gap shorthand.
        On top of that it gets rid of GridTrackSizingAlgorithm::sizingOperation()
        method as it's not needed. And instead it passes the specific operation
        to each call to RenderGrid::guttersSize(), otherwise we would be getting
        wrong results.

        Test: fast/css-grid-layout/grid-gutters-as-percentage.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue): Add support for
        percentage values.
        (WebCore::CSSPropertyParser::parseShorthand): Ditto.
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::IndefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded):
        Pass the specific sizing operation.
        * rendering/GridTrackSizingAlgorithm.h: Remove sizingOperation().
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeTrackBasedLogicalHeight): Pass the specific
        sizing operation.
        (WebCore::RenderGrid::computeTrackSizesForDefiniteSize): Ditto.
        (WebCore::RenderGrid::computeTrackSizesForIndefiniteSize): Ditto.
        (WebCore::RenderGrid::populateGridPositionsForDirection): Ditto.

2017-04-18  Per Arne Vollan  <pvollan@apple.com>

        Add fallback fonts to video captions stylesheet.
        https://bugs.webkit.org/show_bug.cgi?id=170495

        Reviewed by Eric Carlson.

        The kCTFontCascadeListAttribute key is used to obtain the cascade list for a font reference.

        I have not added a test, since CaptionUserPreferences::testingMode() returns true when running tests,
        preventing this code path from being executed.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsDefaultFontCSS):
        * platform/spi/win/CoreTextSPIWin.h:

2017-04-18  Miguel Gomez  <magomez@igalia.com>

        [GTK+] Crash in WebCore::ImageFrame::ImageFrame()
        https://bugs.webkit.org/show_bug.cgi?id=170332

        Reviewed by Carlos Garcia Campos.

        When decoding a PNG image, don't reset the number of frames to 1 when there's a decoding error. Doing
        so causes a crash if the number of frames we reported before is bigger than 1.

        Test: fast/images/bad-png-missing-fdat.html

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::fallbackNotAnimated):

2017-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Define priorities also for async network IO tasks
        https://bugs.webkit.org/show_bug.cgi?id=170905

        Reviewed by Žan Doberšek.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::redirectSkipCallback):
        (WebCore::sendRequestCallback):
        (WebCore::continueAfterDidReceiveResponse):
        (WebCore::readCallback):
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::connected):
        (WebCore::SocketStreamHandleImpl::readBytes):

2017-04-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for !ENABLE(MEDIA_STREAM) configurations.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted): Guard the use of
        HTMLMediaElement::hasMediaStreamSrcObject() with ENABLE(MEDIA_STREAM).

2017-04-17  Alex Christensen  <achristensen@webkit.org>

        Allow Variants of RetainPtrs
        https://bugs.webkit.org/show_bug.cgi?id=170923

        Reviewed by Tim Horton and Sam Weinig.

        No change in behavior.  Just updated the one class that used RetainPtr::operator& to cleanly initialize
        RetainPtrs instead of taking the address of a smart pointer and forcing a value inside of it.

        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString):

2017-04-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] 'WebCore::GraphicsLayerTextureMapper::flushCompositingStated': method with override specifier 'override' did not override any base class methods
        https://bugs.webkit.org/show_bug.cgi?id=170928

        Reviewed by Simon Fraser.

        Apply the same change of CoordinatedGraphicsLayer.{cpp,h} of r215410 to GraphicsLayerTextureMapper.{cpp,h}.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState): Added the second argument.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h: Ditto.

2017-04-17  Timothy Horton  <timothy_horton@apple.com>

        Plumb all four obscured insets to WebCore, instead of just top/left
        https://bugs.webkit.org/show_bug.cgi?id=170913

        Reviewed by Wenson Hsieh.

        No new tests, no observable behavior change yet.

        In preparation for a future patch (for rdar://problem/31564652), plumb
        all four obscured insets to WebCore/the Web Content process, instead of
        just the top and left insets.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::obscuredInsets):
        (WebCore::HistoryItem::setObscuredInsets):
        (WebCore::HistoryItem::obscuredInset): Deleted.
        (WebCore::HistoryItem::setObscuredInset): Deleted.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        * page/Page.h:
        (WebCore::Page::obscuredInsets):
        (WebCore::Page::setObscuredInsets):
        (WebCore::Page::obscuredInset): Deleted.
        (WebCore::Page::setObscuredInset): Deleted.
        Adopt FloatBoxExtent for obscuredInsets (and adjust pluralization).

2017-04-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Doesn't show size of compressed content correctly
        https://bugs.webkit.org/show_bug.cgi?id=155112
        <rdar://problem/25006728>

        Reviewed by Alex Christensen and Timothy Hatcher.

        Tests: http/tests/inspector/network/resource-sizes-disk-cache.html
               http/tests/inspector/network/resource-sizes-memory-cache.html
               http/tests/inspector/network/resource-sizes-network.html

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForMetrics):
        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy):
        (WebCore::NetworkLoadMetrics::reset):
        (WebCore::NetworkLoadMetrics::clearNonTimingData):
        (WebCore::NetworkLoadMetrics::operator==):
        (WebCore::NetworkLoadMetrics::encode):
        (WebCore::NetworkLoadMetrics::decode):
        * platform/spi/cf/CFNetworkSPI.h:

2017-04-17  Youenn Fablet  <youenn@apple.com>

        Enable video autoplay when getUserMedia is on
        https://bugs.webkit.org/show_bug.cgi?id=170919

        Reviewed by Geoffrey Garen.

        Test: webrtc/video-autoplay.html

        * dom/Document.h:
        (WebCore::Document::isCapturing):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasMediaStreamSrcObject):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted): Allowing playback if getUserMedia is capturing audio or video
        on the document and if element is rendering MediaStream based content.
        * page/MediaProducer.h:
        (WebCore::MediaProducer::isCapturing):

2017-04-17  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2017-04-17  Anders Carlsson  <andersca@apple.com>

        Stop using deprecated APIs, part 1
        https://bugs.webkit.org/show_bug.cgi?id=170915
        rdar://problem/31589635

        Reviewed by Tim Horton.

        Get rid of the status parameter from ApplePayPaymentMethodUpdate.

        * Modules/applepay/ApplePayPaymentMethodUpdate.h:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        (WebCore::ApplePaySession::completePaymentMethodSelection):
        * Modules/applepay/PaymentRequest.h:

2017-04-17  Youenn Fablet  <youenn@apple.com>

        Disable outdated WritableStream API
        https://bugs.webkit.org/show_bug.cgi?id=170749
        <rdar://problem/31446233>

        Reviewed by Alex Christensen.

        No change of behavior.
        Replacing READABLE_STREAM_API, READABLE_BYTE_STREAM_API and WRITABLE_STREAM_API compilation flag by:
        - A STREAMS_API compilation flag.
        - A ReadableByteStreamAPI and WritableStreamAPI runtime flags, turned off except for RWT and DRT.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::isDisturbedOrLocked):
        (WebCore::FetchBodyOwner::blobLoadingSucceeded):
        (WebCore::FetchBodyOwner::blobLoadingFailed):
        (WebCore::FetchBodyOwner::blobChunk):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):
        (WebCore::FetchResponse::BodyLoader::didReceiveData):
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/FetchResponseSource.cpp:
        * Modules/fetch/FetchResponseSource.h:
        * Modules/streams/ByteLengthQueuingStrategy.idl:
        * Modules/streams/ByteLengthQueuingStrategy.js:
        * Modules/streams/CountQueuingStrategy.idl:
        * Modules/streams/CountQueuingStrategy.js:
        * Modules/streams/ReadableByteStreamController.idl:
        * Modules/streams/ReadableByteStreamController.js:
        * Modules/streams/ReadableByteStreamInternals.js:
        * Modules/streams/ReadableStream.idl:
        * Modules/streams/ReadableStream.js:
        (initializeReadableStream): Using readableByteStreamAPI runtime flag directly.
        * Modules/streams/ReadableStreamBYOBRequest.idl:
        * Modules/streams/ReadableStreamBYOBRequest.js:
        * Modules/streams/ReadableStreamDefaultController.idl:
        * Modules/streams/ReadableStreamDefaultController.js:
        * Modules/streams/ReadableStreamDefaultReader.idl:
        * Modules/streams/ReadableStreamDefaultReader.js:
        * Modules/streams/ReadableStreamInternals.js:
        * Modules/streams/ReadableStreamSource.h:
        * Modules/streams/ReadableStreamSource.idl:
        * Modules/streams/StreamInternals.js:
        * Modules/streams/WritableStream.idl:
        * Modules/streams/WritableStream.js:
        * Modules/streams/WritableStreamInternals.js:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::isReadableByteStreamAPIEnabled):
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::constructJSReadableStreamBYOBRequest):
        (WebCore::JSBuiltinReadableStreamBYOBRequestPrivateConstructor::initializeExecutable):
        (WebCore::createReadableStreamBYOBRequestPrivateConstructor):
        * bindings/js/JSReadableStreamPrivateConstructors.h:
        * bindings/js/JSReadableStreamSourceCustom.cpp:
        * bindings/js/ReadableStreamDefaultController.cpp:
        * bindings/js/ReadableStreamDefaultController.h:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setReadableByteStreamAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::readableByteStreamAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::setWritableStreamAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::writableStreamAPIEnabled):
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2017-04-17  Tim Horton  <timothy_horton@apple.com>

        Provide a viewport parameter to disable clipping to the safe area
        https://bugs.webkit.org/show_bug.cgi?id=170766
        <rdar://problem/31564634>

        Reviewed by Beth Dakin.

        Tests: tiled-drawing/ios/viewport-clip-to-safe-area-no-gets-margin-tiles.html,
               tiled-drawing/ios/viewport-clip-to-safe-area-yes-gets-no-margin-tiles.html,

        * dom/ViewportArguments.cpp:
        (WebCore::ViewportArguments::resolve):
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::operator==):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::operator<<):
        (WebCore::ViewportConfiguration::description):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::Parameters::Parameters):
        (WebCore::ViewportConfiguration::clipToSafeArea):
        Add viewport parameter.

        * page/ChromeClient.h:
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::enableSpeculativeTilingIfNeeded):
        If not clipping to the safe area, enable "speculative" tiling immediately,
        because the margin tiles can be visible immediately.

        (WebCore::FrameView::hasExtendedBackgroundRectForPainting):
        (WebCore::FrameView::updateTilesForExtendedBackgroundMode):
        Don't check the setting here; just respect the mode that is computed
        by calculateExtendedBackgroundMode.

        (WebCore::FrameView::calculateExtendedBackgroundMode):
        If the viewport parameter was set, add margin tiles on both axes.

        (WebCore::FrameView::setClipToSafeArea):
        Notify ChromeClient of the change, and re-compute the margin tile mode.

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        Factor out code that decides whether the content layer clips to bounds,
        and make it take the new viewport parameter into account.

        * rendering/RenderObject.cpp:
        Don't clip RenderView repaints to RenderView's GraphicsLayer bounds if
        clip-to-safe-area is off, just like we do for slow-repaint objects in
        extended background mode.

2017-04-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Move isNullFunctionPointer down into WTF
        https://bugs.webkit.org/show_bug.cgi?id=170892

        Reviewed by Sam Weinig.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable): Changed to use WTF::isNullFunctionPointer,
          and removed the static variable, so instead of loading from the initialization guard,
          branching, then loading from the variable itself, we just load from the function pointer.
        (WebCore::isNullFunctionPointer): Deleted.

2017-04-14  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Add support for ECDSA
        https://bugs.webkit.org/show_bug.cgi?id=170789
        <rdar://problem/31588604>

        Reviewed by Brent Fulgham.

        This patch implements ECDSA according to the spec: https://www.w3.org/TR/WebCryptoAPI/#ecdsa.
        Supported operations include sign, verify, generateKey, importKey and exportKey.

        Tests: crypto/subtle/ecdh-generate-export-key-pkcs8-p256.html
               crypto/subtle/ecdh-generate-export-key-pkcs8-p384.html
               crypto/subtle/ecdsa-generate-export-jwk-key.html
               crypto/subtle/ecdsa-generate-export-key-pkcs8.html
               crypto/subtle/ecdsa-generate-export-key-raw.html
               crypto/subtle/ecdsa-generate-export-key-spki.html
               crypto/subtle/ecdsa-generate-key-sign-verify-p256.html
               crypto/subtle/ecdsa-generate-key-sign-verify-p384.html
               crypto/subtle/ecdsa-generate-key.html
               crypto/subtle/ecdsa-import-jwk-private-key.html
               crypto/subtle/ecdsa-import-jwk-public-key-alg-256.html
               crypto/subtle/ecdsa-import-jwk-public-key-alg-384.html
               crypto/subtle/ecdsa-import-jwk-public-key.html
               crypto/subtle/ecdsa-import-key-sign-p256.html
               crypto/subtle/ecdsa-import-key-sign-p384.html
               crypto/subtle/ecdsa-import-key-verify-p256.html
               crypto/subtle/ecdsa-import-key-verify-p384.html
               crypto/subtle/ecdsa-import-pkcs8-key.html
               crypto/subtle/ecdsa-import-raw-key.html
               crypto/subtle/ecdsa-import-spki-key.html
               crypto/subtle/ecdsa-verify-malformed-parameters.html
               crypto/workers/subtle/ecdsa-import-key-sign.html
               crypto/workers/subtle/ecdsa-import-key-verify.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::jsSubtleCryptoFunctionSignPromise):
        (WebCore::jsSubtleCryptoFunctionVerifyPromise):
        Add missing parameters.
        * crypto/CommonCryptoUtilities.h:
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        * crypto/CryptoAlgorithm.h:
        Add missing parameters.
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp: Added.
        (WebCore::CryptoAlgorithmECDSA::create):
        (WebCore::CryptoAlgorithmECDSA::identifier):
        (WebCore::CryptoAlgorithmECDSA::sign):
        (WebCore::CryptoAlgorithmECDSA::verify):
        (WebCore::CryptoAlgorithmECDSA::generateKey):
        (WebCore::CryptoAlgorithmECDSA::importKey):
        (WebCore::CryptoAlgorithmECDSA::exportKey):
        * crypto/algorithms/CryptoAlgorithmECDSA.h: Added.
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        Add missing parameters.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        Add missing parameters.
        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp: Added.
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/mac/CommonCryptoDERUtilities.cpp: Added.
        (WebCore::bytesUsedToEncodedLength):
        (WebCore::extraBytesNeededForEncodedLength):
        (WebCore::addEncodedASN1Length):
        (WebCore::bytesNeededForEncodedLength):
        * crypto/mac/CommonCryptoDERUtilities.h:
        (WebCore::bytesUsedToEncodedLength): Deleted.
        (WebCore::extraBytesNeededForEncodedLength): Deleted.
        (WebCore::addEncodedASN1Length): Deleted.
        (WebCore::bytesNeededForEncodedLength): Deleted.
        Move implementations to a .cpp file.
        * crypto/mac/CryptoAlgorithmECDSAMac.cpp: Added.
        (WebCore::cryptoDigestAlgorithm):
        (WebCore::signECDSA):
        (WebCore::verifyECDSA):
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h: Added.
        * crypto/parameters/EcdsaParams.idl: Added.

2017-04-17  Jeremy Jones  <jeremyj@apple.com>

        Refactor enumerateDevices to allow separate CaptureDeviceManagers for audio and video.
        https://bugs.webkit.org/show_bug.cgi?id=170778

        Reviewed by Eric Carlson.

        Add CoreAudioCaptureDeviceManager to enumerate CoreAudio devices.

        Refactor RealtimeMediaSourceCenter and RealtimeMediaSourceCenterMac to provide independent audio and video capture device managers
        and the abiliity to override the capture device managers.

        CoreAudioCaptureSource now uses CoreAudioCaptureDeviceManager to use the specified device instead of the default one. 

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::getAudioSourcesInfo):
        (CaptureDeviceManager::getVideoSourcesInfo):
        (CaptureDeviceManager::getSourcesInfo): Deleted.
        * platform/mediastream/CaptureDeviceManager.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setAudioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::setVideoCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::unsetVideoCaptureDeviceManager):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::defaultAudioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::defaultVideoCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::audioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenter::videoCaptureDeviceManager):
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::refreshAVCaptureDevicesOfType):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        (WebCore::AVCaptureDeviceManager::getAudioSourcesInfo):
        (WebCore::AVCaptureDeviceManager::getVideoSourcesInfo):
        (WebCore::AVCaptureDeviceManager::setUseAVFoundationAudioCapture): Deleted.
        (WebCore::AVCaptureDeviceManager::getSourcesInfo): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp: Added.
        (WebCore::getDeviceInfo):
        (WebCore::CoreAudioCaptureDevice::create):
        (WebCore::CoreAudioCaptureDevice::CoreAudioCaptureDevice):
        (WebCore::CoreAudioCaptureDevice::deviceID):
        (WebCore::CoreAudioCaptureDevice::deviceClock):
        (WebCore::CoreAudioCaptureDevice::isAlive):
        * platform/mediastream/mac/CoreAudioCaptureDevice.h: Copied from Source/WebCore/platform/mediastream/CaptureDeviceManager.h.
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp: Added.
        (WebCore::CoreAudioCaptureDeviceManager::singleton):
        (WebCore::CoreAudioCaptureDeviceManager::captureDevices):
        (WebCore::deviceHasInputStreams):
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::devicesChanged):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h: Copied from Source/WebCore/platform/mediastream/CaptureDeviceManager.h.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::setUseAVFoundationAudioCapture):
        (WebCore::RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac):
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamDevices):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

2017-04-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215366.

        This test is failing on performance bots.

        Reverted changeset:

        "Add performance test for asking the platform for a font for
        U+2060 WORD JOINER"
        https://bugs.webkit.org/show_bug.cgi?id=170842
        http://trac.webkit.org/changeset/215366

2017-04-17  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection addTrack does not require a stream parameter
        https://bugs.webkit.org/show_bug.cgi?id=170894

        Reviewed by Alex Christensen.

        Test: webrtc/video-addTrack.html

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack): Removing obsolete error throwing.

2017-04-17  Youenn Fablet  <youenn@apple.com>

        Add an external libwebrtc encoder factory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=170883

        Reviewed by Alex Christensen.

        No change of behavior, WebCore factory instantiating the default libwebrtc H264 encoder.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::staticFactoryAndThreads):
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp: Added.
        (WebCore::VideoToolboxVideoEncoderFactory::CreateVideoEncoder):
        (WebCore::VideoToolboxVideoEncoderFactory::DestroyVideoEncoder):
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.h: Added.

2017-04-17  Antti Koivisto  <antti@apple.com>

        GraphicsLayerCA::recursiveCommitChanges should not descend into subtrees without changes
        https://bugs.webkit.org/show_bug.cgi?id=170851

        Reviewed by Simon Fraser.

        With lots of layers this can be very slow as it always traverses the entire layer tree.
        For example GIF animations on tumblr.com trigger expensive commits where almost nothing changes.

        This patch adds m_hasDescendantsWithUncommittedChanges bit to GraphicsLayerCA. With this
        we can avoid descending to branches without changes when committing.

        This patch enabled the optimization on Mac.

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

            Set PositionChanged flag when syncing layer position. This flag does nothing except makes
            next commit to update the coverage rect (so tiling gets updated).

        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):

            Do all setting of m_uncommittedChanges bits via addUncommittedChanges function.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):

            Bail out if neither the current layer nor any of its descendants have any uncommited changes
            and none of the ancestors had changes.

        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::changeLayerTypeTo):
        (WebCore::GraphicsLayerCA::addUncommittedChanges):

            Set m_hasDescendantsWithUncommittedChanges bit in ancestors when mutating m_uncommittedChanges.

        (WebCore::GraphicsLayerCA::noteLayerPropertyChanged):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

            Tell the scrolling layer that it needs to recompute coverage.
            This also schedules a layer flush so no need to do that separately.

2017-04-16  Chris Dumez  <cdumez@apple.com>

        CMD+R / CMD+Q is considered as user interaction and beforeunload alert is shown
        https://bugs.webkit.org/show_bug.cgi?id=169995
        <rdar://problem/23798897>

        Reviewed by Sam Weinig.

        Any key event was considered as user interaction with the page, which meant that they
        would allow beforeunload alerts to be shown even when they do not represent actual
        user interaction (e.g CMD+R / CMD+Q / CMD+T keyboard shortcuts).

        To address the issue, we now only treat as user interaction with the page key events
        that are actually handled by the page (i.e. handled by JS, typed into a field, ...).

        Tests: fast/events/beforeunload-alert-handled-keydown.html
               fast/events/beforeunload-alert-unhandled-keydown.html

        * dom/Document.h:
        (WebCore::Document::setUserDidInteractWithPage):
        (WebCore::Document::userDidInteractWithPage):
        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        * loader/FrameLoader.cpp:
        (WebCore::shouldAskForNavigationConfirmation):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::internalKeyEvent):
        * page/EventHandler.h:

2017-04-16  Sam Weinig  <sam@webkit.org>

        [WebIDL] Switch IDLAttributes.txt over to a more structured format so that more information can be added for each attribute
        https://bugs.webkit.org/show_bug.cgi?id=170843

        Reviewed by Chris Dumez.

        - Converts IDLAttributes.txt to IDLAttributes.json, and adds additional
          information for each attribute about what contexts they are valid in 
          which is checked by the parser.
        - Removes CustomSetPrototype which was unused, and Immutable which did 
          nothing. 

        * DerivedSources.make:
        Update extension of IDLAttributes to .json

        * WebCore.xcodeproj/project.pbxproj:
        Update project file for new file name and add some missing IDL files.

        * bindings/scripts/CodeGenerator.pm:
        Store the processed IDLAttributes in the code generator, so it can
        be used for any additional Parser instantiations.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        Remove support for CustomSetPrototype. Nobody is using it.

        * bindings/scripts/IDLAttributes.json: Copied from Source/WebCore/bindings/scripts/IDLAttributes.txt.
        * bindings/scripts/IDLAttributes.txt: Removed.
        Rename IDLAttributes.txt -> IDLAttributes.json and move the data
        into a more structured format. For now each extended attribute can
        have the following fields:
            Required:
                'contextsAllowed' -> Non-empty array of strings from the contexts array.

            Optional:
                'values' -> Non-empty array of strings allowed after the equal (=) sign in 
                   the extended attribute. Like before, an empty string indicates it is 
                   ok to not have a value and a star (*) indicates any string is allowed.
                   Not providing a values property at all indicates that no value is
                   allowed.

                'standard' -> An object with information about the standard this attribute
                   comes from. Should only be added to attributes that come from standards.

                'unsupported' -> A boolean with value true, indicating this property is not
                   yet supported. Should only be used for standard attributes.

                'notes' -> A string with notes explaining something about this attribute.
        
        * bindings/scripts/IDLParser.pm:
        Pass and store the processed extended attribute map to the parser, and use it
        validate that extended attributes being added to things are appropriate for the
        context. Fix FIXME in isExtendedAttributeApplicableToTypes by using the map to 
        implement the predicate, rather than hard coding the list.

        * bindings/scripts/generate-bindings.pl:
        (generateEmptyHeaderAndCpp):
        (loadIDLAttributes): Deleted.
        (checkIDLAttributes): Deleted.
        (checkIfIDLAttributesExists): Deleted.
        Make specifying an IDL attributes file required. Switch to processing it
        as a JSON file, and having the parser validate attributes.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/TestImplements.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        - Remove use of Immutable extended attribute in the tests, as it does nothing.
        - Remove use of the made up ReadOnly attribute, as the tests now use the IDLAttributes
          file to validate that the attributes are supported, so this would otherwise fail.

        * css/WebKitCSSMatrix.idl:
        * svg/SVGZoomEvent.idl:
        - Remove use of the Immutable extended attribute, as it does nothing.

        * page/NavigatorID.idl:
        * page/NavigatorLanguage.idl:
        - Remove use of the Nondeterministic extended attribute, as it does nothing.

        * Modules/mediasource/SourceBufferList.idl:
        Remove use of CallWith on the interface. It is illegal, and does nothing.

        * animation/KeyframeEffect.idl:
        * animation/WebAnimation.idl:
        Remove use of [Default=Undefined]. This construct does nothing and now
        correctly fails to parse. 

2017-04-15  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r215396.
        https://bugs.webkit.org/show_bug.cgi?id=170828

        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::openTypeTable):

2017-04-15  Alex Christensen  <achristensen@webkit.org>

        Remove unused SharedBuffer constructor
        https://bugs.webkit.org/show_bug.cgi?id=170828

        Reviewed by Brady Eidson.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::openTypeTable):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::openTypeTable):

2017-04-15  Commit Queue  <commit-queue@webkit.org>

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

        breaks scrollable iframes on ios (Requested by anttik on
        #webkit).

        Reverted changeset:

        "GraphicsLayerCA::recursiveCommitChanges should not descend
        into subtrees without changes"
        https://bugs.webkit.org/show_bug.cgi?id=170851
        http://trac.webkit.org/changeset/215393

2017-04-14  Antti Koivisto  <antti@apple.com>

        GraphicsLayerCA::recursiveCommitChanges should not descend into subtrees without changes
        https://bugs.webkit.org/show_bug.cgi?id=170851

        Reviewed by Simon Fraser.

        With lots of layers this can be very slow as it always traverses the entire layer tree.
        For example GIF animations on tumblr.com trigger expensive commits where almost nothing changes.

        This patch adds m_hasDescendantsWithUncommittedChanges bit to GraphicsLayerCA. With this
        we can avoid descending to branches without changes when committing.

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

            Do all setting of m_uncommittedChanges bits via addUncommittedChanges function.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):

            Bail out if neither the current layer nor any of its descendants have any uncommited changes
            and none of the ancestors had changes.

        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::changeLayerTypeTo):
        (WebCore::GraphicsLayerCA::addUncommittedChanges):

            Set m_hasDescendantsWithUncommittedChanges bit in ancestors when mutating m_uncommittedChanges.

        (WebCore::GraphicsLayerCA::noteLayerPropertyChanged):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

            Tell the scrolling layer that it needs to recompute coverage.
            This also schedules a layer flush so no need to do that separately.

2017-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Support data interaction of files into file inputs
        https://bugs.webkit.org/show_bug.cgi?id=170803
        <rdar://problem/31286130>

        Reviewed by Tim Horton.

        Adds remaining support to allow data interaction of files onto inputs of type file. See per-change annotations
        for more details. Unit tests to be added in the next patch.

        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::numberOfFiles):
        * platform/ios/WebItemProviderPasteboard.mm:

        Implements numberOfFiles by counting the number of item providers that may be represented as a file, which
        includes all item providers that contain at least one content UTI type.

        (-[WebItemProviderPasteboard numberOfFiles]):

        Adds boilerplate plumbing to fetch the number of files available on the pasteboard. On Mac, logic that
        previously existed in DragData::numberOfFiles to query the number of files available in the pasteboard is now
        on PlatformPasteboard instead, which both makes the implementation of DragData::numberOfFiles platform-invariant,
        and also saves us one synchronous IPC call to the UI process in the WebKit2 implementation.

        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):

        Add support for recognizing objects in the pasteboard that may be represented by files, and therefore may be
        uploaded via file input. Following suit with behavior elsewhere on the platform, we consider item providers able
        to be represented by a file if they contain at least one content UTI type.

        * platform/mac/PlatformPasteboardMac.mm:

        Logic previously in DragData::numberOfFiles to get and then count all file path names in the pasteboard has been
        moved here instead, and no longer needs to go through the pasteboard proxy.

        (WebCore::PlatformPasteboard::numberOfFiles):

2017-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the build after r215389

        Use WebCore::createTemporaryDirectory instead of -_webkit_createTemporaryDirectoryWithTemplatePrefix:.

        * platform/ios/WebItemProviderPasteboard.mm:
        (temporaryFileURLForDataInteractionContent):

2017-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement a way in WebItemProviderPasteboard to perform actions after file loading completes
        https://bugs.webkit.org/show_bug.cgi?id=170839
        <rdar://problem/31286130>

        Reviewed by Tim Horton, Andy Estes, and Dan Bernstein.

        Introduces -[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:], which performs an action
        after all item providers which are able to provide content are done loading their content into temporary file
        URLs. If no item providers have available data, we will immediately invoke the action with an empty URL array.

        For each item provider with data, we save the local URL returned in the load completion block to a randomly
        generated path in the container's temporary directory. When all files are finished loading, we then invoke the
        action with all file URLs that successfully loaded.

        No new tests, since there is no change in behavior.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (temporaryFileURLForDataInteractionContent):
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:]):

2017-04-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: WebSockets: messages with non-latin letters are displayed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=170760

        Reviewed by Joseph Pecoraro.

        Add payloadLength property, which is used to display size. When payloadLength is unavailable,
        it is calculated from payloadData by Web Inspector frontend.

        This fixes <webkit.org/b/170609> Web Inspector: WebSockets: Transferred size is incorrect.

        Tests: http/tests/websocket/tests/hybi/inspector/binary.html
               http/tests/websocket/tests/hybi/inspector/send-and-receive.html

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorNetworkAgent::didSendWebSocketFrame):

2017-04-14  Mark Lam  <mark.lam@apple.com>

        Update architectures in xcconfig files.
        https://bugs.webkit.org/show_bug.cgi?id=170867
        <rdar://problem/31628104>

        Reviewed by Joseph Pecoraro.

        No new tests needed.  Only updating xcconfig files.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:

2017-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Support Icon creation from file URLs on iOS
        https://bugs.webkit.org/show_bug.cgi?id=170809
        <rdar://problem/31286130>

        Reviewed by Tim Horton.

        Minor tweaks and refactoring to support displaying a WebCore::Icon from a list of filepaths on iOS. Please see
        below annotations for more details. No new tests yet, as behavior on Mac should not have changed, and behavior
        on iOS will not change until later patches land. Tests will be added in a later patch.

        Most of the changes here remove platform special-casing in FileInputType for iOS and Mac, refactoring the code
        such that it works for both platforms while preserving behavior.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::~FileInputType):
        (WebCore::FileInputType::setFiles):
        (WebCore::FileInputType::filesChosen):
        * html/FileInputType.h:

        Un-guard m_fileIconLoader on iOS, and un-guard m_displayString for Mac. Consolidate logic in both version of
        filesChosen and remove the iOS-specific version. Behavior when passing in an empty display string and null Icon
        will be the same as that of the existing filesChosen method on Mac. Also, introduce a version of setFiles that
        takes an additional RequestIcon enum that indicates whether or not to additionally use the new filepaths to
        request an Icon update. filesChosen invokes this with RequestIcon::No if a non-null Icon was specified, as is
        the case when uploading a file via the image picker on iOS.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::displayString):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        * html/InputType.h:
        * loader/EmptyClients.h:
        * page/ChromeClient.h:

        Introduce ChromeClient::createIconForFiles, which generates an icon representing the content at a list of file
        paths. See WebKit and WebKit2 ChangeLogs for more details.

        * platform/FileChooser.h:
        (WebCore::FileChooserClient::filesChosen):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::fileTextValue):

        Remove platform special-casing when generating the text to display when uploading a file. If a displayString
        is specified, then we use the contents of the displayString; otherwise, fall back to using the input element's
        FileList to compute the display string.

2017-04-14  Brady Eidson  <beidson@apple.com>

        Fix basic WKURLSchemeHandler bugs.
        <rdar://problem/30647559> and https://bugs.webkit.org/show_bug.cgi?id=170862

        Reviewed by Andy Estes.

        Covered by new API tests.

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

2017-04-14  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Support HKDF
        https://bugs.webkit.org/show_bug.cgi?id=170636
        <rdar://problem/23539827>

        Reviewed by Brent Fulgham.

        This patch implements HKDF according to the spec: https://www.w3.org/TR/WebCryptoAPI/#hkdf.
        Supported operations include deriveKey, deriveBits, importKey and getKeyLength.

        Tests: crypto/subtle/ecdh-import-key-derive-hkdf-key.html
               crypto/subtle/hkdf-derive-bits-malformed-parametrs.html
               crypto/subtle/hkdf-import-key-derive-bits.html
               crypto/subtle/hkdf-import-key-derive-hmac-key.html
               crypto/subtle/hkdf-import-key-malformed-parameters.html
               crypto/subtle/hkdf-import-key.html
               crypto/workers/subtle/hkdf-import-key-derive-bits.html
               crypto/workers/subtle/hkdf-import-key-derive-hmac-key.html
               crypto/workers/subtle/hkdf-import-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        Rename HKDF_CTR to HKDF.
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        Rename HKDF_CTR to HKDF.
        * crypto/CommonCryptoUtilities.h:
        * crypto/CryptoAlgorithmIdentifier.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp: Added.
        (WebCore::CryptoAlgorithmHKDF::create):
        (WebCore::CryptoAlgorithmHKDF::identifier):
        (WebCore::CryptoAlgorithmHKDF::deriveBits):
        (WebCore::CryptoAlgorithmHKDF::importKey):
        (WebCore::CryptoAlgorithmHKDF::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmHKDF.h: Added.
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp: Added.
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp: Added.
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/parameters/CryptoAlgorithmHkdfParams.h: Added.
        * crypto/parameters/HkdfParams.idl: Added.

2017-04-14  Zalan Bujtas  <zalan@apple.com>

        text-align start / end failure in table cells
        https://bugs.webkit.org/show_bug.cgi?id=141417
        <rdar://problem/31051672>

        Reviewed by Antti Koivisto.

        Apply "text-align: center" on th elements when parent's computed value for the 'text-align' property
        is its initial value, unless it is explicitly set.

        Test: fast/table/center-th-when-parent-has-initial-text-align.html

        * css/CSSProperties.json:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialTextAlign):
        (WebCore::StyleBuilderCustom::applyValueTextAlign):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasExplicitlySetTextAlign):
        (WebCore::RenderStyle::setHasExplicitlySetTextAlign):
        (WebCore::RenderStyle::NonInheritedFlags::hasExplicitlySetTextAlign):
        (WebCore::RenderStyle::NonInheritedFlags::setHasExplicitlySetTextAlign):

2017-04-14  Andy Estes  <aestes@apple.com>

        [ios-simulator] API test WebKit2.DataDetectionReferenceDate timing out
        https://bugs.webkit.org/show_bug.cgi?id=161967

        Reviewed by Alexey Proskuryakov.

        DataDetectorsCoreSPI.h defined DDQueryOffset as a struct of two CFIndexes, which is 16 bytes
        on LP64, but the struct is actually defined as two CFIndex-typed 32-bit bitfields, which is
        8 bytes on LP64. This breaks the ABI on Public SDK builds when calling functions that take
        or return DDQueryOffsets.

        * platform/spi/cocoa/DataDetectorsCoreSPI.h: Updated the DDQueryOffset definition for
        Public SDK builds, and added a static_assert to detect future size changes at compile time.

2017-04-14  Konstantin Tokarev  <annulen@yandex.ru>

        Removed unused and unimplemented methods from MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=170848

        Reviewed by Jer Noble.

        No new tests needed.

        * platform/graphics/MediaPlayer.h:

2017-04-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Add performance test for asking the platform for a font for U+2060 WORD JOINER
        https://bugs.webkit.org/show_bug.cgi?id=170842

        Reviewed by Tim Horton.

        No new tests because there is no behavior change.

        * platform/graphics/WidthCache.h:
        (WebCore::WidthCache::add):
        (WebCore::WidthCache::addSlowCase):

2017-04-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215350.

        This change broke the Windows build.

        Reverted changeset:

        "Remove unused SharedBuffer constructor"
        https://bugs.webkit.org/show_bug.cgi?id=170828
        http://trac.webkit.org/changeset/215350

2017-04-14  Jer Noble  <jer.noble@apple.com>

        [MediaSource] Push capabilities across process boundary during UIProcess capture.
        https://bugs.webkit.org/show_bug.cgi?id=170814

        Reviewed by Eric Carlson.

        There's no real reason for RealtimeMediaSourceCapabilities to be RefCounted nor to keep them from
        being created on the stack. So in addition to making that class coder-compliant, change all the
        classes that vend capabilities to use a unique_ptr<> instead of a RefPtr<>.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::capabilities):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * platform/mediastream/MediaEndpoint.cpp:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::capabilities):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCapabilities.h:
        (WebCore::CapabilityValueOrRange::encode):
        (WebCore::CapabilityValueOrRange::decode):
        (WebCore::RealtimeMediaSourceCapabilities::RealtimeMediaSourceCapabilities):
        (WebCore::RealtimeMediaSourceCapabilities::supportedConstraints):
        (WebCore::RealtimeMediaSourceCapabilities::setSupportedConstraints):
        (WebCore::RealtimeMediaSourceCapabilities::encode):
        (WebCore::RealtimeMediaSourceCapabilities::decode):
        (WebCore::RealtimeMediaSourceCapabilities::create): Deleted.
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::initializeCapabilities):
        (WebCore::AVMediaCaptureSource::capabilities):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::capabilities):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::capabilities):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::capabilities):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::initializeCapabilities):
        (WebCore::MockRealtimeMediaSource::capabilities):
        * platform/mock/MockRealtimeMediaSource.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:

2017-04-13  Saam Barati  <sbarati@apple.com>

        WebAssembly: We should be able to postMessage a JSWebAssemblyModule
        https://bugs.webkit.org/show_bug.cgi?id=170573

        Reviewed by Filip Pizlo.

        This patch's main purpose is to implement postMessage of JSWebAssemblyModule.
        The spec text describing the behavior is: https://github.com/WebAssembly/design/blob/master/JS.md#structured-clone-of-a-webassemblymodule
        We only allow for JSWebAssemblyModule to be serialized in the postMessage
        context. More work needs to be done to make it valid to store a module in
        IndexDB.
        
        All that is needed to serialize a JSWebAssemblyModule is grab a Ref
        to its underlying Wasm::Module. So, when doing a postMessage, all we
        do is grab this Ref, and then re-create the JSWebAssemblyModule from
        the Wasm::Module in the new VM/global object. Because the code for
        Wasm::Module is VM-independent, this is all that's needed. This turned
        out nicely, because it requires little knowledge from WebCore about
        what it means to clone a JSWebAssemblyModule.
        
        
        The second significant part of this patch is teaching WorkerRunLoop about
        the various timers inside JSC. Before, the WorkerRunLoop wouldn't always
        wake up to address JSC timers. I noticed this bug when I was writing
        tests to make sure that Wasm was running concurrently in different
        workers. The bug is that the WorkerRunLoop's message queue has no insight
        into a timer being scheduled. This effected the PromiseDeferredTimer that
        Wasm uses, as well as the various GC timers that Heap uses. Now, WorkerRunLoop
        will set itself up to be notified when timers are set. When a timer is
        set, the WorkerRunLoop will perform an iteration to to reset its top
        level MessageQueue timeout to be no longer than the next timer fire date.

        Tests: storage/indexeddb/wasm-exceptions.html
               workers/wasm-hashset-many.html
               workers/wasm-hashset.html
               workers/wasm-long-compile-many.html
               workers/wasm-long-compile.html

        * ForwardingHeaders/heap/GCActivityCallback.h: Added.
        * ForwardingHeaders/runtime/JSRunLoopTimer.h: Added.
        * ForwardingHeaders/runtime/PromiseDeferredTimer.h: Added.
        * ForwardingHeaders/wasm: Added.
        * ForwardingHeaders/wasm/js: Added.
        * ForwardingHeaders/wasm/js/JSWebAssemblyModule.h: Added.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::addTimerSetNotification):
        (WebCore::WorkerScriptController::removeTimerSetNotification):
        * bindings/js/WorkerScriptController.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):

2017-04-13  Dean Jackson  <dino@apple.com>

        Large negative animation-delays may not work depending on machine uptime
        https://bugs.webkit.org/show_bug.cgi?id=166962
        <rdar://problem/30091526>

        Reviewed by Tim Horton.

        If you set a really negative animation delay, it would cause
        AnimationBase::m_startTime to become negative, because the delay
        value was "bigger" than monotonicallyIncreasingTime.

        However, the state machine was using -1 to mean that the start time
        hadn't yet been set. Classic cmarrin!

        Replace all the special values with std::optional, and use nullopt
        to mean the value doesn't exist yet.

        Test: animations/large-negative-delay.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::getTimeToNextEvent):
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::getElapsedTime):
        * page/animation/AnimationBase.h: Use std::optional.
        (WebCore::AnimationBase::paused):

2017-04-13  Alex Christensen  <achristensen@webkit.org>

        Remove unused SharedBuffer constructor
        https://bugs.webkit.org/show_bug.cgi?id=170828

        Reviewed by Brady Eidson.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create):

2017-04-13  Antti Koivisto  <antti@apple.com>

        Don't invalidate composition for style changes in non-composited layers
        https://bugs.webkit.org/show_bug.cgi?id=170805
        <rdar://problem/31606185>

        Reviewed by Simon Fraser.

        Test: compositing/updates/animation-non-composited.html

        In most cases they can't affect composition. Composition updates are expensive, this can
        save a lot of work (tumblr.com animations hit this at the moment).

        * rendering/RenderElement.h:
        (WebCore::RenderElement::createsGroup):
        (WebCore::RenderElement::createsGroupForStyle):

            Factor to a static function so we can test style directly.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        (WebCore::RenderLayerCompositor::styleChangeMayAffectIndirectCompositingReasons):

            Test if style change might cause compositing change that can't be determined without compositing update.

        * rendering/RenderLayerCompositor.h:

2017-04-13  JF Bastien  <jfbastien@apple.com>

        WebAssembly: manage memory better
        https://bugs.webkit.org/show_bug.cgi?id=170628

        Reviewed by Keith Miller, Michael Saboff.

        Re-use a VM tag which was intended for JavaScript core, was then
        used by our GC, and is now unused. If I don't do this then
        WebAssembly fast memories will make vmmap look super weird because
        it'll look like multi-gigabyte of virtual memory are allocated as
        part of our process' regular memory!

        Separately I need to update vmmap and other tools to print the
        right name. Right now this tag gets identified as "JS garbage
        collector".

        * page/ResourceUsageData.cpp:
        (WebCore::ResourceUsageData::ResourceUsageData):
        * page/ResourceUsageData.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::HistoricResourceUsageData::HistoricResourceUsageData):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::displayNameForVMTag):
        (WebCore::categoryForVMTag):

2017-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Update the comments for the number of bits in RenderStyle::InheritedFlags.

        Rubber-stamped by Zalan Bujtas

        * rendering/style/RenderStyle.h:

2017-04-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comment after r215314.
        https://bugs.webkit.org/show_bug.cgi?id=169015

        Reviewed by Alexey Proskuryakov.

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

2017-04-13  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for extended attributes on types in WebIDL
        https://bugs.webkit.org/show_bug.cgi?id=170759

        Reviewed by Alex Christensen.

        - Update parsing for WebIDL grammar changes.
        - Adds an extended attributes hash to IDLType that is filled according
          to the WebIDL annotated type rules.
        - Updates code generation to take advantage of IDLType's extended attribute
          simplifying some existing code.
        - Update IDLs in the project to adhere to the new grammar.
          
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/websockets/WebSocket.idl:
        * crypto/parameters/AesCtrParams.idl:
        * crypto/parameters/AesKeyParams.idl:
        * crypto/parameters/Pbkdf2Params.idl:
        * crypto/parameters/RsaKeyGenParams.idl:
        * testing/TypeConversions.idl:
        Update for grammar change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        (GetBaseIDLType):
        (GetIDLType):
        (GetIntegerConversionConfiguration):
        (GetStringConversionConfiguration):
        (JSValueToNative):
        (UnsafeToNative):
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        (NativeToJSValue):
        Remove the need for the type's context in many places since type
        associated extended attributes are now on the type itself.

        * bindings/scripts/IDLParser.pm:
        (copyExtendedAttributes):
        Move up so it can be reused.

        (isExtendedAttributeApplicableToTypes):
        Add temporary predicated to indicate which attributes should be moved to types. This
        logic should be moved to IDLAttributes.txt.

        (moveExtendedAttributesApplicableToTypes):
        Add helper to move attributes to the type's extended attributes hash if applicable.

        (makeSimpleType):
        Use initializer syntax to simplify.

        (cloneType):
        Support cloning types with extended attributes.

        (typeByApplyingTypedefs):
        When constructing the clone for a typedef application, move any applicable attributes
        to the clone from the original type.

        (parseDictionaryMember):
        (parseTypedef):
        (parseAttributeOrOperationRest):
        (parseAttributeRest):
        (parseOperationOrIterator):
        (parseSpecialOperation):
        (parseOptionalIterableInterface):
        (parseMapLikeProperties):
        (parseOptionalOrRequiredArgument):
        (parseType):
        (parseTypeWithExtendedAttributes):
        (parseUnionMemberType):
        (parseNonAnyType):
        Update for new grammar, moving applicable attributes eagerly.

        (assertNoExtendedAttributesInTypedef): Deleted.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampOnOptional):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampOnOptionalCaller):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeOnOptional):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeOnOptionalCaller):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsAttributeWithClamp):
        (WebCore::jsTestTypedefsAttributeWithClampGetter):
        (WebCore::jsTestTypedefsAttributeWithClampInTypedef):
        (WebCore::jsTestTypedefsAttributeWithClampInTypedefGetter):
        (WebCore::setJSTestTypedefsAttributeWithClamp):
        (WebCore::setJSTestTypedefsAttributeWithClampFunction):
        (WebCore::setJSTestTypedefsAttributeWithClampInTypedef):
        (WebCore::setJSTestTypedefsAttributeWithClampInTypedefFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampInTypedef):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampInTypedefCaller):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        Update for new grammar. Add some new tests for uncovered cases.

2017-04-13  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build
        https://bugs.webkit.org/show_bug.cgi?id=170815

        Reviewed by Beth Dakin.

        * platform/spi/cocoa/AVKitSPI.h:

2017-04-13  JF Bastien  <jfbastien@apple.com>

        cmake build fix

        Unreviewed build fix. A file was removed but left in the cmake
        build.

        * PlatformMac.cmake:

2017-04-13  Youenn Fablet  <youenn@apple.com>

        Remove RTCSignalingState::Closed
        https://bugs.webkit.org/show_bug.cgi?id=170811

        Reviewed by Eric Carlson.

        Covered by existing and rebased tests.

        Adding RTCPeerConnection::isClosed to better match the isClosed internal slot in webrtc specification.
        Using isClosed instead of checking signalingState value.
        Implementing isClosed in terms of m_connectionState which has a Closed value.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setLocalDescriptionTask):
        (WebCore::MediaEndpointPeerConnection::replaceTrackTask):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOffer):
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswer):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::PeerConnectionBackend::setLocalDescription):
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::PeerConnectionBackend::setRemoteDescription):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::addIceCandidate):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::removeTrack):
        (WebCore::RTCPeerConnection::queuedCreateOffer):
        (WebCore::RTCPeerConnection::queuedCreateAnswer):
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):
        (WebCore::RTCPeerConnection::setConfiguration):
        (WebCore::RTCPeerConnection::createDataChannel):
        (WebCore::RTCPeerConnection::doClose):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::scheduleNegotiationNeededEvent):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::signalingState):
        * platform/mediastream/RTCSignalingState.h:

2017-04-13  Zalan Bujtas  <zalan@apple.com>

        BreakingContext::WordTrailingSpace cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=170750

        Reviewed by Myles C. Maxfield.

        No change in functionality.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/line/BreakingContext.h:
        (WebCore::WordTrailingSpace::WordTrailingSpace):
        (WebCore::WordTrailingSpace::width):
        (WebCore::BreakingContext::handleText):

2017-04-13  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement cloneArrayBuffer in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=170008

        Reviewed by Youenn Fablet.

        Implemented cloneArrayBuffer based on existing structuredCloneArrayBuffer
        implementation. The code has been factorized so that both cloneArrayBuffer
        and structuredCloneArrayBuffer rely on the same code (which is basically
        the previous implementation of structuredCloneArrayBuffer + the ability
        to clone only a part of considered buffer).

        Test: streams/clone-array-buffer.html

        * Modules/streams/ReadableByteStreamInternals.js: Deleted cloneArrayBuffer JS implementation.
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals): Add cloneArrayBuffer private declaration.
        * bindings/js/StructuredClone.cpp:
        (WebCore::cloneArrayBufferImpl): Added (mostly based on previous structuredCloneArrayBuffer).
        (WebCore::cloneArrayBuffer): Added.
        (WebCore::structuredCloneArrayBuffer): Updated.
        * bindings/js/StructuredClone.h: Added cloneArrayBuffer declaration.
        * bindings/js/WebCoreBuiltinNames.h: Added cloneArrayBuffer declaration.
        * testing/Internals.cpp: Added support for testing cloneArrayBuffer.
        * testing/Internals.h: Added support for testing cloneArrayBuffer.
        * testing/Internals.idl: Added support for testing cloneArrayBuffer.

2017-04-13  Youenn Fablet  <youenn@apple.com>

        onnegotiationneeded should only be called once
        https://bugs.webkit.org/show_bug.cgi?id=170785

        Reviewed by Alex Christensen.

        Covered by updated test.

        Disabling explicit call to markAsNeedingNegotiation in case libwebrtc is used as libwebrtc is calling it.
        Making sure removeTrack gets notified up to libwebrtc.

        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::notifyRemovedTrack):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::removeTrack):
        (WebCore::RTCPeerConnection::completeAddTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::removeTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::notifyRemovedTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2017-04-13  Dave Hyatt  <hyatt@apple.com>

        Rendering flexbox children across columns
        https://bugs.webkit.org/show_bug.cgi?id=164166
        <rdar://problem/29055587>

        Reviewed by Zalan Bujtas.

        Added fast/multicol/flexbox-rows.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild):

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Clean up SharedBuffer public functions
        https://bugs.webkit.org/show_bug.cgi?id=170795

        Reviewed by Andreas Kling.

        Make some member functions that are now only used internally private.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::platformDataSize): Deleted.
        * platform/SharedBuffer.h:

2017-04-12  Dan Bernstein  <mitz@apple.com>

        [Mac] Future-proof .xcconfig files
        https://bugs.webkit.org/show_bug.cgi?id=170802

        Reviewed by Tim Horton.

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

2017-04-12  Brady Eidson  <beidson@apple.com>

        QuotaExceededError when saving to localStorage in private mode.
        https://bugs.webkit.org/show_bug.cgi?id=157010

        Reviewed by Alex Christensen.

        No new tests (Covered by changes to existing test).
        
        LocalStorage in private browsing is now effectively SessionStorage.
        It's ephemeral, per-tab, and copied over to tabs window.open()'ed from the current.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyStorageNamespaceProvider::createEphemeralLocalStorageNamespace):

        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):

        * page/Page.cpp:
        (WebCore::Page::ephemeralLocalStorage):
        (WebCore::Page::setEphemeralLocalStorage):
        * page/Page.h:

        * page/SecurityOriginData.h:

        * storage/Storage.cpp:
        (WebCore::Storage::length):
        (WebCore::Storage::key):
        (WebCore::Storage::getItem):
        (WebCore::Storage::setItem):
        (WebCore::Storage::removeItem):
        (WebCore::Storage::clear):
        (WebCore::Storage::contains):
        (WebCore::Storage::isDisabledByPrivateBrowsing): Deleted.

        * storage/StorageMap.h:

        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):
        * storage/StorageNamespaceProvider.h:

        * storage/StorageType.h:
        (WebCore::isLocalStorage):
        (WebCore::isPersistentLocalStorage):

2017-04-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Suppress font download dialog in new matching algorithm
        https://bugs.webkit.org/show_bug.cgi?id=169015

        Reviewed by Alexey Proskuryakov.

        Not testable.

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

2017-04-12  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (r215242-215243): [ios-simulator] API test WebKit1.AudioSessionCategoryIOS is failing
        https://bugs.webkit.org/show_bug.cgi?id=170777
        <rdar://problem/31592877>

        Reviewed by Jer Noble.

        No new tests, fixes an existing test.

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState): Pass parameters to lambda by reference.

2017-04-12  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Set correct audio session category when capturing audio
        https://bugs.webkit.org/show_bug.cgi?id=170736
        <rdar://problem/31559405>

        Unreviewed, update an assertion I missed in r215242.

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::PlatformMediaSession):

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Remove unused SharedBuffer::wrapCFDataArray
        https://bugs.webkit.org/show_bug.cgi?id=170794

        Reviewed by Brady Eidson.

        It's unused since r215280.

        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::wrapCFDataArray): Deleted.

2017-04-12  Anders Carlsson  <andersca@apple.com>

        Tweak WebCore::setMetadataURL function
        https://bugs.webkit.org/show_bug.cgi?id=170786

        Reviewed by Beth Dakin.

        Get rid of the "referrer" parameter, it isn't used. Make the remaining parameters const. Swap the
        urlString and path parameters since that makes more sense. Use String instead of NSString in the call to WKSetMetadataURL.

        * platform/FileSystem.cpp:
        (WebCore::setMetadataURL): Deleted.
        * platform/FileSystem.h:
        * platform/mac/FileSystemMac.mm:
        (WebCore::setMetadataURL):

2017-04-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Well-known variations should clamp to the values listed in the @font-face block
        https://bugs.webkit.org/show_bug.cgi?id=169260

        Reviewed by Dean Jackson.

        Most of this patch is plumbing the variation ranges from the CSSFontFace object
        to preparePlatformFont() where variation values get applied.

        Beyond that, there is one other piece of this patch - a nonspecified value in an
        @font-face block shouldn't perform any clamping, but a specified value should be
        clamped. This means that we need to retain whether or not a value is specified.
        This patch does this by migrating CSSFontFace from using FontSelectionCapabilities
        to using FontSelectionSpecifiedCapabilities, which has its internals behind
        std::optionals which represent whether or not the value was specified. For the
        purposes of font selection, these unspecified values are replaced with default
        values.

        Test: fast/text/variations/font-face-clamp.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::font):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::createFont):
        (WebCore::CachedFont::platformDataFromCustomData):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::createFont):
        (WebCore::CachedSVGFont::platformDataFromCustomData):
        * loader/cache/CachedSVGFont.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::fontForFamily):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::fontForFamily):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::createFontPlatformDataForTesting):
        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::FontSelectionRange::uniqueValue):
        (WebCore::FontSelectionCapabilities::operator==):
        (WebCore::FontSelectionCapabilities::operator!=):
        (WebCore::FontSelectionSpecifiedCapabilities::computeFontSelectionCapabilities):
        (WebCore::FontSelectionSpecifiedCapabilities::operator==):
        (WebCore::FontSelectionSpecifiedCapabilities::operator!=):
        (WebCore::FontSelectionSpecifiedCapabilities::operator=):
        (WebCore::FontSelectionSpecifiedCapabilities::computeWeight):
        (WebCore::FontSelectionSpecifiedCapabilities::computeWidth):
        (WebCore::FontSelectionSpecifiedCapabilities::computeSlope):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::lastResortFallbackFont):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:

2017-04-12  Beth Dakin  <bdakin@apple.com>

        Speculative open source build fix.

        * platform/spi/cocoa/AVKitSPI.h:

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Stop using didReceiveDataArray callback on El Capitan
        https://bugs.webkit.org/show_bug.cgi?id=170780

        Reviewed by Brady Eidson.

        didReceiveDataArray was an optimization that improved performance on iOS but is not needed any more.
        The only platform where this is used is El Capitan, and didReceiveData works fine on that platform.
        I've left some cleanup still to be done in SharedBuffer, and doing that is the motivation for this change.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/cf/SubresourceLoaderCF.cpp: Removed.
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray): Deleted.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::supportsDataArray): Deleted.
        (WebCore::ResourceHandleClient::didReceiveDataArray): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegate::makeConnectionClient):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveDataArrayCallback): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveDataArray): Deleted.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveDataArray:]): Deleted.

2017-04-12  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * platform/spi/cocoa/AVKitSPI.h:

2017-04-12  Beth Dakin  <bdakin@apple.com>

        Adopt AVKit name change from AVFunctionBar* to AVTouchBar*
        https://bugs.webkit.org/show_bug.cgi?id=170693
        -and corresponding-
        rdar://problem/31230018

        Reviewed by San Weinig.

        Since the new names only apply to some versions of macOS, this patch uses typedefs 
        for the older OS’s. SO:

        AVFunctionBarScrubber is now AVTouchBarScrubber

        AVFunctionBarPlaybackControlsProvider is now AVTouchBarPlaybackControlsProvider

        AVFunctionBarMediaSelectionOption is now AVTouchBarMediaSelectionOption

        And the protocol AVFunctionBarPlaybackControlsControlling is now 
        AVTouchBarPlaybackControlsControlling

        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager audioFunctionBarMediaSelectionOptions]):
        (-[WebPlaybackControlsManager setAudioFunctionBarMediaSelectionOptions:]):
        (-[WebPlaybackControlsManager currentAudioFunctionBarMediaSelectionOption]):
        (-[WebPlaybackControlsManager setCurrentAudioFunctionBarMediaSelectionOption:]):
        (-[WebPlaybackControlsManager legibleFunctionBarMediaSelectionOptions]):
        (-[WebPlaybackControlsManager setLegibleFunctionBarMediaSelectionOptions:]):
        (-[WebPlaybackControlsManager currentLegibleFunctionBarMediaSelectionOption]):
        (-[WebPlaybackControlsManager setCurrentLegibleFunctionBarMediaSelectionOption:]):
        (mediaSelectionOptions):

        Here is where the typedefs and #define are declared.
        * platform/spi/cocoa/AVKitSPI.h:

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r215265
        https://bugs.webkit.org/show_bug.cgi?id=170502

        m_threadId was removed in the header but not in the constructor implementation.
        Initializer lists are our friends.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::CurlDownloadManager):
        (WebCore::CurlDownload::CurlDownload): Deleted.
        * platform/network/curl/CurlDownload.h:

2017-04-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for Win and GTK
        https://bugs.webkit.org/show_bug.cgi?id=170758

        * platform/posix/SharedBufferPOSIX.cpp:
        (WebCore::SharedBuffer::createFromReadingFile):
        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createFromReadingFile):

2017-04-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Introduce Thread class and use RefPtr<Thread> and align Windows Threading implementation semantics to Pthread one
        https://bugs.webkit.org/show_bug.cgi?id=170502

        Reviewed by Mark Lam.

        Mechanical change. Use Thread:: APIs.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::IDBServer):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::~AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::runLoop):
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::uninitialize):
        (WebCore::OfflineAudioDestinationNode::startRendering):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::securityOrigin):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        * Modules/webdatabase/DatabaseThread.h:
        (WebCore::DatabaseThread::getThreadID):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):
        * fileapi/AsyncFileStream.cpp:
        (WebCore::callOnFileThread):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::close):
        * loader/icon/IconDatabase.h:
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::createThreadIfNeeded):
        * page/ResourceUsageThread.h:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::ScrollingThread):
        (WebCore::ScrollingThread::isCurrentThread):
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::threadCallback):
        * page/scrolling/ScrollingThread.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::HRTFDatabaseLoader):
        (WebCore::HRTFDatabaseLoader::loadAsynchronously):
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::ReverbConvolver::~ReverbConvolver):
        * platform/audio/ReverbConvolver.h:
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::ResourceHandleStreamingClient):
        (ResourceHandleStreamingClient::~ResourceHandleStreamingClient):
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoop):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::startThreadIfNeeded):
        (WebCore::CurlDownloadManager::stopThread):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::startThread):
        (WebCore::SocketStreamHandleImpl::stopThread):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::threadID):

2017-04-10  Antti Koivisto  <antti@apple.com>

        Cache small media resources in disk cache
        https://bugs.webkit.org/show_bug.cgi?id=170676
        <rdar://problem/31532649>

        Reviewed by Andreas Kling.

        Test: http/tests/cache/disk-cache/disk-cache-media-small.html

        Testing support. Functional changes are in WebKit2.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
        (WebCore::HTMLMediaElement::lastMediaResourceLoaderForTesting):
        * html/HTMLMediaElement.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        (WebCore::MediaResourceLoader::addResponseForTesting):
        (WebCore::MediaResource::responseReceived):
        * loader/MediaResourceLoader.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]):

            We can now receive cached responses.

        * testing/Internals.cpp:
        (WebCore::responseSourceToString):
        (WebCore::Internals::xhrResponseSource):
        (WebCore::Internals::mediaResponseSources):
        (WebCore::Internals::mediaResponseContentRanges):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-04-12  Alex Christensen  <achristensen@webkit.org>

        Modernize vector adoption
        https://bugs.webkit.org/show_bug.cgi?id=170758

        Reviewed by Geoffrey Garen.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids):
        * Modules/indexeddb/IDBGetResult.cpp:
        (WebCore::IDBGetResult::dataFromBuffer):
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::serializeIDBKeyData):
        (WebCore::decodeKey):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseNextPart):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::createCustomFontData):
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::create):
        (WebCore::utf8Buffer):
        (WebCore::SharedBuffer::adoptVector): Deleted.
        * platform/SharedBuffer.h:
        * platform/ThreadSafeDataBuffer.h:
        (WebCore::ThreadSafeDataBufferImpl::ThreadSafeDataBufferImpl):
        (WebCore::ThreadSafeDataBuffer::create):
        (WebCore::ThreadSafeDataBuffer::ThreadSafeDataBuffer):
        (WebCore::ThreadSafeDataBuffer::decode):
        (): Deleted.
        (WebCore::ThreadSafeDataBuffer::adoptVector): Deleted.
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decodeBase64):
        (WebCore::DataURLDecoder::decodeEscaped):

2017-04-12  Per Arne Vollan  <pvollan@apple.com>

        Implement stroke-color CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=169352

        Reviewed by Jon Lee.

        Support setting text stroke color using the CSS property stroke-color, see https://drafts.fxtf.org/paint/.
        Text stroke color can currently be set with the -webkit-text-stroke-color property. To make sure this still
        works, I added a check to determine if the stroke-color property has been explicitly set. If it has not been
        set, we fall back to the value of the -webkit-text-stroke-color property.

        Tests: fast/css/stroke-color-fallback.html
               fast/css/stroke-color.html
               fast/css/visited-link-stroke-color.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueStrokeColor):
        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isColorPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::decorationColor):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        (WebCore::computeTextSelectionPaintStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::colorIncludingFallback):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::strokeColor):
        (WebCore::RenderStyle::setStrokeColor):
        (WebCore::RenderStyle::setVisitedLinkStrokeColor):
        (WebCore::RenderStyle::visitedLinkStrokeColor):
        (WebCore::RenderStyle::setHasExplicitlySetStrokeColor):
        (WebCore::RenderStyle::hasExplicitlySetStrokeColor):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2017-04-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Use the DisplayRefreshMonitor facilities
        https://bugs.webkit.org/show_bug.cgi?id=170599

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt: Add missing files to the build.
        * platform/graphics/DisplayRefreshMonitor.cpp: Build fixes.
        (WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updatePlatformLayer): Mark the
        platform layer as updated in the layer's CoordinatedGraphicsState.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:

2017-04-11  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Allow modern-media-controls to be provided through WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=170722
        <rdar://problem/31553089>

        Reviewed by Dean Jackson.

        If modern media controls source files are provided through WebKitAdditions, use these instead
        of the sources found in the WebCore module.

        * WebCore.xcodeproj/project.pbxproj:

2017-04-11  Dean Jackson  <dino@apple.com>

        Disable outdated WritableStream API
        https://bugs.webkit.org/show_bug.cgi?id=170749
        <rdar://problem/31446233>

        Reviewed by Tim Horton.

        The API we implement is no longer accurate. Disable it until we
        are compatible with the new specification

        * Configurations/FeatureDefines.xcconfig:

2017-04-11  Matt Rajca  <mrajca@apple.com>

        Consider the current document when allowing autoplay quirks.
        https://bugs.webkit.org/show_bug.cgi?id=170744

        Reviewed by Eric Carlson.

        Added API test.

        In addition to checking if the top-level document supports autoplay quirks, we should check
        if the current document supports quirks. This allows all embedded YouTube videos (which use
        iframes) to play correctly if the client allows autoplay quirks on youtube.com.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::dispatchPlayPauseEventsIfNeedsQuirks):

2017-04-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215245.

        This change broke internal builds.

        Reverted changeset:

        "[Modern Media Controls] Allow modern-media-controls to be
        provided through WebKitAdditions"
        https://bugs.webkit.org/show_bug.cgi?id=170722
        http://trac.webkit.org/changeset/215245

2017-04-11  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Allow modern-media-controls to be provided through WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=170722
        <rdar://problem/31553089>

        Reviewed by Dean Jackson.

        If modern media controls source files are provided through WebKitAdditions, use these instead
        of the sources found in the WebCore module.

        * WebCore.xcodeproj/project.pbxproj:

2017-04-10  Matt Rajca  <mrajca@apple.com>

        Change autoplay state to "prevented" when media is paused due to restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=170686

        Reviewed by Alex Christensen.

        Added API tests.

        Currently, the autoplay state is set to "prevented" when playback is about to begin without
        user interaction and there are restrictions in place. We should also be setting this flag when
        autoplay is allowed but due to a change in audio tracks, for example, it gets paused.

        This patch also moves some common logic into setPlaybackWithoutUserGesture without changing behavior.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::setPlaybackWithoutUserGesture):
        (WebCore::HTMLMediaElement::updateShouldPlay):

2017-04-11  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Set correct audio session category when capturing audio
        https://bugs.webkit.org/show_bug.cgi?id=170736
        <rdar://problem/31559405>

        Reviewed by Jer Noble.

        No new tests yet, filed bug 170737.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Initialize m_mediaSession.
        (WebCore::MediaStream::statusDidChange): Call canProduceAudioChanged.
        (WebCore::MediaStream::mediaType): New. Return MediaStreamCapturingAudio when actively
        capturing audio.
        (WebCore::MediaStream::presentationType):
        (WebCore::MediaStream::characteristics):
        (WebCore::MediaStream::mayResumePlayback):
        (WebCore::MediaStream::suspendPlayback):
        (WebCore::MediaStream::sourceApplicationIdentifier):
        (WebCore::MediaStream::canProduceAudio):
        * Modules/mediastream/MediaStream.h:

        * platform/audio/PlatformMediaSession.h: Add MediaStreamCapturingAudio.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::has): Adjust assert for MediaStreamCapturingAudio.
        (WebCore::PlatformMediaSessionManager::count): Ditto.
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState): Set small preferred buffer size when
        capturing audio. Set audio session category to PlayAndRecord whenever there is a media
        stream that is capturing audio.

2017-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore][JSC] ResourceUsageData.{timeOfNextEdenCollection,timeOfNextFullCollection} should be MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=170725

        Reviewed by Sam Weinig.

        Use MonotonicTime instead of raw doubles.
        Currently, large part of data structures and helper functions are the same in
        ResourceUsageOverlayCocoa.mm and ResourceUsageOverlayLinux.cpp. This should be
        unified in a separate patch.

        * page/ResourceUsageData.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::gcTimerString):
        (WebCore::ResourceUsageOverlay::platformDraw):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::gcTimerString):

2017-04-11  Youenn Fablet  <youenn@apple.com>

        Activate WebRTC data channel tests for WK1
        https://bugs.webkit.org/show_bug.cgi?id=170710

        Reviewed by Eric Carlson.

        Covered by existing and activated tests.

        Making LibWebRTCProvider::factory not static.
        For that purpose LibWebRTCMediaEndpoint now stores its peer connection factory reference.
        Making LibWebRTCProvider use libebrtc networking by default.

        Removing some no longer needed checks related to libwebrtc availability.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::factory):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2017-04-11  Youenn Fablet  <youenn@apple.com>

        MediaStream id should be equal to msid
        https://bugs.webkit.org/show_bug.cgi?id=170712

        Reviewed by Eric Carlson.

        Covered by rebased tests.

        Setting MediaStream id to libwebrtc mediastream label.
        Refactoring to use more Ref<> in MediaStream code.

        Making PeerConnection use the libwebrtc backend by default for layout tests instead of the mock.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::createTrackPrivateVector):
        (WebCore::MediaStream::MediaStream):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::lookUp):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteStream):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        * platform/graphics/MediaPlayer.h:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivate::create):
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):

2017-04-11  Chris Fleizach  <cfleizach@apple.com>

        AX: Web article navigation does not work (article rotor for Facebook, Twitter, Messages etc.)
        https://bugs.webkit.org/show_bug.cgi?id=170330
        <rdar://problem/31366105>

        Reviewed by Joanmarie Diggs.

        Add a search ability for the "article" role.

        Test: accessibility/mac/search-predicate-article.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityArticleAncestor]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (createAccessibilitySearchKeyMap):

2017-04-11  Chris Fleizach  <cfleizach@apple.com>

        AX: PDF plugin needs to support PDF-DOM Mode
        https://bugs.webkit.org/show_bug.cgi?id=170589

        Reviewed by Tim Horton.

        Provide WebCore support for accessibility connect to PDF document.
        This includes the ability to connect a PDF annotation created node within WebKit to 
         its PDFAnnotation parent (through use of shadowPluginParent).

        * accessibility/AXObjectCache.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXPostNotificationWithUserInfo):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper shadowPluginParent]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::accessibilityShadowPluginParentForElement):

2017-04-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r215153): Request Animation Frame broken when building without REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR
        https://bugs.webkit.org/show_bug.cgi?id=170719

        Reviewed by Žan Doberšek.

        This is because when not using the display refresh monitor, the timer is always used, not only when throttling,
        but since r215153 the rAF timer is always aligned to 30ms.

        Fixes: fast/animation/request-animation-frame-too-rapid.html

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::scheduleAnimation): Only do the timer alignment when throttling.

2017-04-11  Yoav Weiss  <yoav@yoav.ws>

        [link preload] Double downloads of preloaded content when it's in MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=170122

        Reviewed by Antti Koivisto.

        No new tests, but unflaked http/tests/preload/single_download_preload_headers_charset.html.

        The test was flaky because it appears as if MemoryCache is not being evicted between runs,
        and running multiple iterations of the test resulted in preloaded being taken out of MemoryCache
        and not having the unknown encoding flag. In those cases, the result was a double download and
        a failed test.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::setEncoding): Set the m_encodingSet flag.
        * loader/TextResourceDecoder.h: Added an m_encodingSet flag initialized to false.
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::setEncoding): Assert that stylesheets don't maintain decoded text.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): Remove initialization of hasUnknownEncoding flag.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::hasUnknownEncoding): Remove.
        (WebCore::CachedResource::setHasUnknownEncoding): Remove.
        (WebCore::CachedResource::CachedResource): Remove initialization of hasUnknownEncoding flag.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy): Set the encoding in case it changed.

2017-04-11  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r215211): [GTK] Lots of image related tests are timing out, causing the test bot to exit early
        https://bugs.webkit.org/show_bug.cgi?id=170727

        Reviewed by Carlos Garcia Campos.

        Since r215211 ImageDecoder::isSizeAvailable() calls encodedDataStatus() in the different decoder implementations,
        and those implementations force a partial decoding of the image if the size is not available yet. But
        ImageDecoder::isSizeAvailable() was already being used inside the decoders assuming that it wasn't going to
        force this partial decoding. Due to this, there are some situations where the partial decoding is not
        desired but it's happening anyway. For example, the check in setSize(), which causes the partial decoding
        to happen again and again because no value is actually set to the animation size (which causes the timouts
        in the test bot).

        To avoid this, replace all the calls to ImageDecoder::isSizeAvailable() inside the decoders with calls to
        ImageDecoder::encodedDataStatus(), which doesn't force the partial decoding.

        Covered by existent tests.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setSize):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2017-04-11  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r215211): [GTK] Lots of image related tests are crashing, causing the test bot to exit early
        https://bugs.webkit.org/show_bug.cgi?id=170721

        Reviewed by Carlos Garcia Campos.

        r215211 caused an infinite loop because of calls between ImageDecoder::isSizeAvailable() and the specializations of
        ImageDecoder::encodedDataStatus(). Change the different decoders so ImageDecoder::encodedDataStatus doesn't call
        ImageDecoder::isSizeAvailable().

        Covered by existent tests.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::encodedDataStatus):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::encodedDataStatus):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::encodedDataStatus):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::encodedDataStatus):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::encodedDataStatus):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::encodedDataStatus):

2017-04-10  Alex Christensen  <achristensen@webkit.org>

        Revert r215217
        https://bugs.webkit.org/show_bug.cgi?id=170703

        * Configurations/FeatureDefines.xcconfig:

2017-04-10  Chris Dumez  <cdumez@apple.com>

        Fix bad change in r215167.
        https://bugs.webkit.org/show_bug.cgi?id=170656

        Reviewed by Yusuke Suzuki.

        Revert mistake made in r215167.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::caretBlinkInterval):

2017-04-10  Alex Christensen  <achristensen@webkit.org>

        Continue enabling WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=170703

        Reviewed by Youenn Fablet.

        * Configurations/FeatureDefines.xcconfig:

2017-04-10  Jeremy Jones  <jeremyj@apple.com>

        PlayerLayerView +layerClass methods should use return type Class.
        https://bugs.webkit.org/show_bug.cgi?id=165406

        Reviewed by Sam Weinig.

        No new tests because not behavior change.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebAVPictureInPicturePlayerLayerView_layerClass):
        (WebAVPlayerLayerView_layerClass):

2017-04-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        CachedImage should stop decoding images when unknown type is detected
        https://bugs.webkit.org/show_bug.cgi?id=170530

        Reviewed by Tim Horton.

        If the status of the encoded data is "unknown type", WebKit should stop
        decoding the rest of the data. Ideally WebKit should also cancel loading
        the rest of the encoded data.
        
        To do that we need to add a function to the ImageDecoder to return the
        encodedDataStatus(). We also need to change the return type of Image::setData()
        and Image::dataChanged() form bool to EncodedDataStatus.

        * WebCore.xcodeproj/project.pbxproj: Add ImageTypes.h to the WebCore project.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addIncrementalDataBuffer): Replace checking !sizeAvailable 
        by checking if encodedDataStatus isn't an error but it has not reached
        sizeAvailable state
        * loader/cache/CachedResourceClientWalker.h:
        (WebCore::CachedResourceClientWalker::CachedResourceClientWalker): Unrelated clean-up.
        (WebCore::CachedResourceClientWalker::next): Ditto.
        * loader/icon/IconRecord.cpp:
        (WebCore::IconRecord::setImageData): Image::setData() used to return a bool. Now it returns
        an EncodedDataStatus. !setData() now means setData() < EncodedDataStatus::SizeAvailable.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::dataChanged): Replace the return of dataChanged() from bool
        by EncodedDataStatus.
        * platform/graphics/BitmapImage.h: Replace isSizeAvailable() by a new function
        named encodedDataStatus().
        * platform/graphics/Image.cpp:
        (WebCore::Image::setData): Code clean-up and adding a clarification comment.
        * platform/graphics/Image.h: Change the return of setData() and dataChanged() to be
        EncodedDataStatus.
        (WebCore::Image::dataChanged): Return EncodedDataStatus::Unknown as an indication
        the size is not available but we do not have an error.
        * platform/graphics/ImageTypes.h: Added.
        Image definitions which are shared among Image, ImageDecoder, ImageSource,
        ImageFrameCache and ImageFrame used to be added to ImageFrame.h. This has
        been annoying since these definitions aren't related to ImageFrame only.
        A new header file named ImageTypes.h is to the to include such definitions.
        (WebCore::operator++):
        * platform/graphics/ImageFrame.h:
        (WebCore::operator++): Deleted.
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::ImageFrameCache): This is the case of a BitmapImage without
        a decoder but with a NativeImage. The status has to be EncodedDataStatus::Complete.
        (WebCore::ImageFrameCache::growFrames): Replace if (isSizeAvailable()) by
        if (encodedDataStatus() >= EncodedDataStatus::SizeAvailable).
        (WebCore::ImageFrameCache::metadata): Ditto.
        (WebCore::ImageFrameCache::encodedDataStatus): This is a replacement for isSizeAvailable().
        Don't cache the EncodedDataStatus until it is Complete. Don't call didDecodeProperties()
        until the status >= EncodedDataStatus::SizeAvailable.
        (WebCore::ImageFrameCache::isSizeAvailable): Deleted.
        * platform/graphics/ImageFrameCache.h: Replace isSizeAvailable() by encodedDataStatus().
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::dataChanged): Make return an EncodedDataStatus instead of returning
        a bool for isSizeAvailable.
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::encodedDataStatus): Replace isSizeAvailable() by encodedDataStatus().
        (WebCore::ImageSource::isSizeAvailable): Deleted.
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::encodedDataStatus): Replace isSizeAvailable() by encodedDataStatus().
        The logic of this function is the following:
            -- CGImageSourceGetStatus() can return kCGImageStatusUnexpectedEOF, kCGImageStatusInvalidData
            or kCGImageStatusReadingHeader even if CG will end up recovering form the error and drawing
            the image. Actually CG initializes the status of CGImageSource before receiving any data
            with kCGImageStatusInvalidData. So the status will be considered an error only if all the
            data is received but CG does not move the status of this CGImageSource to Complete.
            -- If CGImageSourceGetStatus() returns Incomplete, this means CG already created the image
            reader and therefore the image type is known.
            -- If CGImageSourceGetStatus() returns UnknownType, this means CG could not create the
            image reader and this should be considered an error.
        (WebCore::ImageDecoder::isSizeAvailable): Deleted.
        * platform/graphics/cg/ImageDecoderCG.h: Replace isSizeAvailable() by encodedDataStatus().
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged): The PDFDocument is created only when allDataReceived.
        * platform/graphics/cg/PDFDocumentImage.h: Change the return type from bool to EncodedDataStatus.
        * platform/image-decoders/ImageDecoder.h: 
        (WebCore::ImageDecoder::encodedDataStatus): Add a new function encodedDataStatus(). Deduce the
        status of the encoded data from the flags m_failed, m_isAllDataReceived and m_sizeAvailable in
        this order.
        (WebCore::ImageDecoder::isSizeAvailable): Make this function uses encodedDataStatus().
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::encodedDataStatus): Replace isSizeAvailable() by encodedDataStatus().
        (WebCore::BMPImageDecoder::isSizeAvailable): Deleted.
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::encodedDataStatus): Ditto.
        (WebCore::GIFImageDecoder::isSizeAvailable): Deleted.
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::encodedDataStatus): Ditto.
        (WebCore::ICOImageDecoder::isSizeAvailable): Deleted.
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::encodedDataStatus): Ditto.
        (WebCore::JPEGImageDecoder::isSizeAvailable): Deleted.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::encodedDataStatus): Ditto.
        (WebCore::PNGImageDecoder::isSizeAvailable): Deleted.
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::encodedDataStatus): Ditto.
        (WebCore::WEBPImageDecoder::isSizeAvailable): Deleted.
        * platform/image-decoders/webp/WEBPImageDecoder.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): m_page is created only when allDataReceived is true.
        * svg/graphics/SVGImage.h:

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

        Mark SVG-Within-OpenType as "Under Consideration"
        https://bugs.webkit.org/show_bug.cgi?id=170706

        Reviewed by Brady Eidson.

        * features.json:

2017-04-10  Jeremy Jones  <jeremyj@apple.com>

        Add CoreAudioCaptureSource.
        https://bugs.webkit.org/show_bug.cgi?id=170112
        rdar://problem/30293338

        Reviewed by Eric Carlson.

        No new tests because this provides the same funcitonality as AVAudioCaptureSource. 
        Funcionality is covered by existing test cases.

        Add CoreAudioCaptureSource for audio capture. And use it by default in AVCaptureDeviceManager.
        Add UseAVFoundationAudioCapture setting to switch back to AVFoundation for audio capture.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Settings.cpp:
        (WebCore::Settings::useAVFoundationAudioCapture):
        (WebCore::Settings::setUseAVFoundationAudioCapture):
        * page/Settings.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::setUseAVFoundationAudioCapture):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp: Added.
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::factory):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::preferredSampleRate):
        (WebCore::CoreAudioCaptureSource::preferredIOBufferDuration):
        (WebCore::CoreAudioCaptureSource::configureMicrophoneProc):
        (WebCore::CoreAudioCaptureSource::configureSpeakerProc):
        (WebCore::CoreAudioCaptureSource::addMicrophoneDataConsumer):
        (WebCore::CoreAudioCaptureSource::removeMicrophoneDataConsumer):
        (WebCore::CoreAudioCaptureSource::addEchoCancellationSource):
        (WebCore::CoreAudioCaptureSource::removeEchoCancellationSource):
        (WebCore::CoreAudioCaptureSource::checkTimestamps):
        (WebCore::CoreAudioCaptureSource::provideSpeakerData):
        (WebCore::CoreAudioCaptureSource::speakerCallback):
        (WebCore::CoreAudioCaptureSource::processMicrophoneSamples):
        (WebCore::CoreAudioCaptureSource::microphoneCallback):
        (WebCore::CoreAudioCaptureSource::defaultOutputDevice):
        (WebCore::CoreAudioCaptureSource::defaultInputDevice):
        (WebCore::CoreAudioCaptureSource::setupAudioUnits):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::stopProducingData):
        (WebCore::CoreAudioCaptureSource::suspend):
        (WebCore::CoreAudioCaptureSource::resume):
        (WebCore::CoreAudioCaptureSource::capabilities):
        (WebCore::CoreAudioCaptureSource::settings):
        * platform/mediastream/mac/CoreAudioCaptureSource.h: Added.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac):
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory):

2017-04-10  Youenn Fablet  <youenn@apple.com>

        Wrap legacy MediaStream API in runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=169877

        Reviewed by Alex Christensen.

        Covered by binding tests.

        Marking navigator.getUserMedia and MediaStreamEvent as runtime enabled if mediastream and webrtclegacy api flags
        are on.
        Updated binding generator to support multiple runtime flags.

        * Modules/mediastream/MediaStreamEvent.idl:
        * Modules/mediastream/NavigatorUserMedia.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetRuntimeEnableFunctionName):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):
        * bindings/scripts/test/TestObj.idl:

2017-04-10  Youenn Fablet  <youenn@apple.com>

        Remove deprecated parts of media stream spec
        https://bugs.webkit.org/show_bug.cgi?id=169879

        Reviewed by Jon Lee.

        Removing MediaStreamTrackState 'new' value which was unused.
        Removing MediaStreamTrack _readonly attribute which was unused.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::readonly): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::readonly): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.h:

2017-04-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215175.

        This change caused a flaky crash in existing media tests.

        Reverted changeset:

        "Add fallback fonts to video captions stylesheet."
        https://bugs.webkit.org/show_bug.cgi?id=170495
        http://trac.webkit.org/changeset/215175

2017-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction on an image enclosed by an anchor should vend the anchor's URL
        https://bugs.webkit.org/show_bug.cgi?id=170660
        <rdar://problem/31043220>

        Reviewed by Tim Horton.

        When writing an image embedded inside an anchor to the pasteboard, actually use the enclosing anchor's href if
        it exists. Previously, we were simply dropping this argument on the floor.

        Covered by 2 new DataInteractionTests: ImageInLinkToInput and ImageInLinkWithoutHREFToInput.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard):

2017-04-10  Jon Lee  <jonlee@apple.com>

        Update localizable strings to "full screen" from "fullscreen"
        https://bugs.webkit.org/show_bug.cgi?id=170675
        rdar://problem/28207034

        Reviewed by Antoine Quint.

        For localizable strings, it should consistently be "full screen" instead of "fullscreen".

        * English.lproj/Localizable.strings:
        * English.lproj/modern-media-controls-localized-strings.js:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagExitVideoFullscreen):
        (WebCore::localizedMediaControlElementString):
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::exitFullScreenButtonAccessibilityTitle):

2017-04-10  Andreas Kling  <akling@apple.com>

        Don't generate extra scrolling tiles for non-visible pages.
        https://bugs.webkit.org/show_bug.cgi?id=167213
        <rdar://problem/30105774>

        Reviewed by Antti Koivisto.

        Reduce the tiling coverage to a minimum when the page is non-visible.
        On macOS, this means that fully occluded web views can maintain a smaller set of tiles
        in non-volatile surfaces, reducing net footprint.

        Test: compositing/tiling/non-visible-window-tile-coverage.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::computePageTiledBackingCoverage): If the page's activity state is non-visible, use minimal tile coverage.
        * platform/ScrollView.h:
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::hide): Call adjustTiledBackingCoverage() in hide() since it now takes page visibility into account.

        (WebCore::FrameView::enableSpeculativeTilingIfNeeded):
        * testing/Internals.cpp:
        (WebCore::Internals::setSpeculativeTilingDelayDisabledForTesting):
        * testing/Internals.h:
        * testing/Internals.idl: Add an internals API for disabling the 500ms delay before speculative tiling begins after
        the main frame load finishes. This is needed for reliably testing this change.

2017-04-10  Per Arne Vollan  <pvollan@apple.com>

        Add fallback fonts to video captions stylesheet.
        https://bugs.webkit.org/show_bug.cgi?id=170495

        Reviewed by Myles C. Maxfield.

        The kCTFontCascadeListAttribute key is used to obtain the cascade list for a font reference.

        I have not added a test, since CaptionUserPreferences::testingMode() returns true when running tests,
        preventing this code path from being executed.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsDefaultFontCSS):

2017-04-10  Chris Dumez  <cdumez@apple.com>

        Drop Timer::startOneShot() overload taking a double
        https://bugs.webkit.org/show_bug.cgi?id=170659

        Reviewed by Yusuke Suzuki.

        Drop Timer::startOneShot() overload taking a double as people should use Seconds type now.

        * Modules/geolocation/GeoNotifier.cpp:
        (WebCore::GeoNotifier::startTimerIfNeeded):
        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::configureWatchdogTimer):
        * Modules/mediasession/WebMediaSessionManager.h:
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::timerFired):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::close):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::enqueuePasswordValueChangeNotification):
        (WebCore::AXObjectCache::postLiveRegionChangeNotification):
        (WebCore::AXObjectCache::focusAriaModalNode):
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::setStatus):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::addToMatchedPropertiesCache):
        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::finishedParsing):
        * dom/ScriptedAnimationController.cpp:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::startAlternativeTextUITimer):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addBehaviorRestrictionsOnEndIfNecessary):
        (WebCore::HTMLMediaElement::handleSeekToPlaybackPosition):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::startSearchEventTimer):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        * html/canvas/WebGLRenderingContextBase.cpp:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::startTimer):
        (WebCore::MediaControlPanelElement::makeTransparent):
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::startTimer):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameScheduledNavigationImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        * inspector/InspectorPageAgent.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::startTimer):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::documentDidFinishLoadEvent):
        * loader/icon/IconDatabase.cpp:
        * page/EventHandler.cpp:
        * page/EventSource.cpp:
        (WebCore::EventSource::scheduleReconnect):
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedElementNeedsRepaint):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::enableSpeculativeTilingIfNeeded):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setTimeWithoutMouseMovementBeforeHidingControls):
        (WebCore::Settings::timeWithoutMouseMovementBeforeHidingControls):
        * page/SuspendableTimer.h:
        * page/animation/CSSAnimationController.cpp:
        * page/mac/EventHandlerMac.mm:
        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::setTextIndicator):
        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::stop):
        * platform/ScrollAnimationSmooth.cpp:
        (WebCore::getAnimationParametersForGranularity):
        (WebCore::ScrollAnimationSmooth::updatePerAxisData):
        (WebCore::ScrollAnimationSmooth::animateScroll):
        (WebCore::ScrollAnimationSmooth::animationTimerFired):
        (WebCore::ScrollAnimationSmooth::startNextTimer):
        * platform/ScrollAnimationSmooth.h:
        * platform/Timer.h:
        (WebCore::TimerBase::startRepeating):
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::scheduleClientDataBufferingCheck):
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::scheduleStatelessScrollSnap):
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::gamepadHadInput):
        * platform/gamepad/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::openAndScheduleManager):
        (WebCore::HIDGamepadProvider::valuesChanged):
        * platform/glib/MainThreadSharedTimerGLib.cpp:
        (WebCore::MainThreadSharedTimer::setFireInterval):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startTimer):
        (WebCore::BitmapImage::internalStartAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::resetAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/MediaPlaybackTargetPicker.cpp:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::scheduleScratchBufferPurge):
        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::schedulePrune):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState):
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::scheduleReleaseUnusedTextures):
        (WebCore::BitmapTexturePool::releaseUnusedTexturesTimerFired):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::scheduleReleaseUnusedBuffers):
        (WebCore::TextureMapperPlatformLayerProxy::releaseUnusedBuffersTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        * platform/gtk/ScrollAnimatorGtk.cpp:
        (WebCore::ScrollAnimatorGtk::overlayScrollbarAnimationTimerFired):
        (WebCore::ScrollAnimatorGtk::showOverlayScrollbars):
        (WebCore::ScrollAnimatorGtk::hideOverlayScrollbars):
        * platform/gtk/ScrollAnimatorGtk.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::startScrollbarPaintTimer):
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::speak):
        * platform/mock/TimerEventBasedMock.h:
        (WebCore::TimerEvent::TimerEvent):
        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::timerFired):
        * platform/network/PingHandle.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::add):
        (WebCore::ResourceHandleManager::cancel):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::sendPendingRequest):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::restartTimer):
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        * rendering/RenderProgress.h:
        * rendering/RenderText.cpp:
        (WebCore::SecureTextTimer::restart):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::animationRepeatIntervalForProgressBar):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::mediaControlsFadeOutDuration):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar):
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::animationRepeatIntervalForProgressBar):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeMac::animationDurationForProgressBar):
        * replay/EventLoopInputDispatcher.cpp:
        (WebCore::EventLoopInputDispatcher::dispatchInputSoon):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::startTimer):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setTimeWithoutMouseMovementBeforeHidingControls):
        * testing/InternalSettings.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setImageFrameDecodingDuration):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2017-04-10  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r205841): [GTK] Test fast/images/animated-png.html is failing since r205841
        https://bugs.webkit.org/show_bug.cgi?id=168425

        Reviewed by Said Abou-Hallawa.

        There is a problem with animations that are blending their frames into the previous frame. Due to a change
        in how pixel components are premultiplied (the result is now rounded up), the parameters to the blending
        operation may vary in one unit, causing the result of the blending to be different from the expected result.
        In order to fix this, a new parameter is added to indicate whether we want to use rounding up when
        premultiplying or not, and ImageBackingStore uses that parameter to disable rounding up.

        Adjusted the expectation for fast/images/animated-png.html, as it must pass now.

        * platform/graphics/Color.cpp:
        (WebCore::premultipliedChannel):
        (WebCore::makePremultipliedRGBA):
        * platform/graphics/Color.h:
        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::blendPixel):
        (WebCore::ImageBackingStore::pixelValue):

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

        [WK2] Add infrastructure to perform actions after an asynchronous position information request finishes
        https://bugs.webkit.org/show_bug.cgi?id=170658
        <rdar://problem/31431450>

        Reviewed by Tim Horton.

        Minor adjustments to fix the build in the newest version of the SDK.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard setItemsFromObjectRepresentations:]):
        (-[WebItemProviderPasteboard _tryToCreateAndAppendObjectOfClass:toArray:usingProvider:]):

2017-04-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Annotate Seconds' member functions and operators with constexpr
        https://bugs.webkit.org/show_bug.cgi?id=170662

        Reviewed by Daniel Bates.

        * page/Frame.cpp:

2017-04-09  Chris Dumez  <cdumez@apple.com>

        Drop Timer::startRepeating() overload taking a double
        https://bugs.webkit.org/show_bug.cgi?id=170656

        Reviewed by Yusuke Suzuki.

        Drop Timer::startRepeating() overload taking a double as people should use Seconds type now.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::startProducingData):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearance):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::startProgressEventTimer):
        (WebCore::HTMLMediaElement::scheduleTimeupdateEvent):
        * html/HTMLMediaElement.h:
        * html/MediaController.cpp:
        (MediaController::MediaController):
        (MediaController::scheduleTimeupdateEvent):
        * html/MediaController.h:
        * html/MediaElementSession.cpp:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::showPaintRect):
        * loader/ProgressTracker.cpp:
        * page/AutoscrollController.cpp:
        * page/Frame.cpp:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::startFadeAnimation):
        * page/SuspendableTimer.h:
        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::setTestCallbackAndStartNotificationTimer):
        * platform/Theme.h:
        (WebCore::Theme::caretBlinkInterval):
        * platform/Timer.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::startSnapRubberbandTimer):
        (WebCore::ScrollController::startScrollSnapTimer):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::scheduleCohortRemoval):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setDownloadBuffering):
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::startProducingData):
        * platform/mock/MockRealtimeAudioSource.h:
        (WebCore::MockRealtimeAudioSource::renderInterval):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::startProducingData):
        (WebCore::MockRealtimeVideoSource::applyFrameRate):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):
        (WebCore::RenderMarquee::updateMarqueeStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::caretBlinkInterval):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::caretBlinkInterval):
        * rendering/RenderThemeGtk.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent):
        * xml/XMLHttpRequestProgressEventThrottle.h:

2017-04-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        generate-bindings-all.pl shouldn't use Perl threads
        https://bugs.webkit.org/show_bug.cgi?id=170106

        Reviewed by Yusuke Suzuki.

        The use of interpreter-based threads in Perl is officially
        discouraged and not all Linux distributions and BSD compile Perl
        with threads support. Use fork instead of threads to run
        generate-bindings.pl in parallel.

        * bindings/scripts/generate-bindings-all.pl:
        (spawnGenerateBindingsIfNeeded): Added.
        (executeCommand): Removed the workaround for Cygwin Perl threads.
        (spawnCommand): Added.
        (worker): Deleted.

2017-04-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r214635): Calculate image subsampling only for CG
        https://bugs.webkit.org/show_bug.cgi?id=170353

        Reviewed by Simon Fraser.

        In r214635, we needed to calculate the image scaleFactor for all platforms.
        It was needed do the calculation: sizeForDrawing = sizeOfImage * imageScaleFactor.
        This made ImageSource::subsamplingLevelForScale() now returns a SubsamplingLevel
        not equal to SubsamplingLevel::Default if the image scaleFactor is greater
        than {1, 1} for all platforms. The subsamplingLevel should only be used for CG.
        
        This is also a chance to make nativeImageDrawingScale() a across platform
        function and move it to the GraphicsContext class.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::scaleFactorForDrawing):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::subsamplingLevelForScaleFactor):
        (WebCore::ImageSource::subsamplingLevelForScale): Deleted.
        * platform/graphics/ImageSource.h:
        * platform/graphics/NativeImage.h:
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::nativeImageDrawingScale): Deleted.
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::nativeImageDrawingScale): Deleted.
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::nativeImageDrawingScale): Deleted.

2017-04-09  Chris Dumez  <cdumez@apple.com>

        Start dropping Timer API dealing with double
        https://bugs.webkit.org/show_bug.cgi?id=170649

        Reviewed by Yusuke Suzuki.

        Start dropping Timer API dealing with double as people should use Seconds now.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::generateKeyRequest):
        (WebCore::WebKitMediaKeySession::update):
        * Modules/geolocation/GeoNotifier.cpp:
        (WebCore::GeoNotifier::setFatalError):
        (WebCore::GeoNotifier::setUseCachedPosition):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::resume):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::schedulePendingOperationTimer):
        (WebCore::IDBTransaction::scheduleCompletedOperationTimer):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::rangeRemoval):
        (WebCore::SourceBuffer::appendBufferInternal):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::scheduleActiveStateChange):
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::scheduleDispatchEvent):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::scheduleDispatchEvent):
        * Modules/notifications/Notification.cpp:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::requestPermission):
        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::vibrate):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::resume):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::resume):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postNotification):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectOnNextRunLoop):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadingFontSoon):
        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::updateFocusAppearanceSoon):
        (WebCore::Document::resumeScheduledTasks):
        (WebCore::Document::requestFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        (WebCore::Document::decrementLoadEventDelayCount):
        (WebCore::Document::didAssociateFormControl):
        (WebCore::Document::setCachedDOMCookies):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::enqueueEvent):
        * dom/EventSender.h:
        (WebCore::EventSender<T>::dispatchEventSoon):
        * dom/Microtasks.cpp:
        (WebCore::MicrotaskQueue::append):
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::resume):
        (WebCore::ScriptRunner::notifyFinished):
        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::executeScriptsWaitingForStylesheetsSoon):
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheck):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::finishRequestAutocomplete):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleDelayedAction):
        (WebCore::HTMLMediaElement::beginScanning):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::setDisplayState):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::scheduleErrorEvent):
        (WebCore::HTMLSourceElement::resume):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::scheduleLoad):
        * html/MediaController.cpp:
        (MediaController::currentTime):
        (MediaController::scheduleEvent):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::mediaElementSawUnsupportedTracks):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::externalOutputDeviceAvailableDidChange):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::requestToHideMessage):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::loseContextImpl):
        (WebCore::WebGLRenderingContextBase::forceRestoreContext):
        (WebCore::WebGLRenderingContextBase::dispatchContextLostEvent):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        (WebCore::HTMLParserScheduler::scheduleForResume):
        (WebCore::HTMLParserScheduler::resume):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::scheduleLoad):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::ChangeRegionOversetTask::scheduleFor):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::scheduleFor):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::dispatch):
        (WebCore::InspectorBackendDispatchTask::timerFired):
        * inspector/WebHeapAgent.cpp:
        (WebCore::SendGarbageCollectionEventsTask::addGarbageCollection):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startDataLoadTimer):
        (WebCore::DocumentLoader::deliverSubstituteResourcesAfterDelay):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startCheckCompleteTimer):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updatedHasPendingEvent):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::notifyFinished):
        (WebCore::TextTrackLoader::newCuesParsed):
        (WebCore::TextTrackLoader::fileFailedToParse):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::scheduleReachedMaxAppCacheSizeCallback):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::Callback::Callback):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneSoon):
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::notify):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/DeviceController.cpp:
        (WebCore::DeviceController::addDeviceEventListener):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::scheduleHoverStateUpdate):
        * page/EventSource.cpp:
        (WebCore::EventSource::scheduleInitialConnect):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/Settings.cpp:
        (WebCore::Settings::setLoadsImagesAutomatically):
        (WebCore::Settings::setImagesEnabled):
        * page/SuspendableTimer.h:
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::startUpdateStyleIfNeededDispatcher):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::invalidateHighlightsOfType):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::scheduleTreeStateCommit):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::postTask):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        * platform/Scrollbar.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarTheme::autoscrollTimerDelay):
        * platform/Timer.cpp:
        * platform/Timer.h:
        (WebCore::TimerBase::startRepeating):
        (WebCore::TimerBase::startOneShot):
        (WebCore::TimerBase::augmentFireInterval):
        (WebCore::TimerBase::augmentRepeatInterval):
        * platform/gamepad/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::deviceAdded):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::networkStateChanged):
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions):
        (WebCore::MediaSelectionGroupAVFObjC::setSelectedOption):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::setNeedsUpdate):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::requestRender):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::scheduleUpdateOnCompositorThread):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        * platform/gtk/ScrollAnimatorGtk.cpp:
        (WebCore::ScrollAnimatorGtk::showOverlayScrollbars):
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::finishedCreatingTiles):
        (WebCore::LegacyTileCache::setSpeculativeTileCreationEnabled):
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/ScrollbarThemeIOS.mm:
        (WebCore::ScrollbarThemeIOS::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarThemeIOS::autoscrollTimerDelay):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledSoon):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::preferencesChanged):
        (WebCore::ScrollbarThemeMac::initialAutoscrollTimerDelay):
        (WebCore::ScrollbarThemeMac::autoscrollTimerDelay):
        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::setOrientation):
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::asyncUpdatePermission):
        (WebCore::GeolocationClientMock::asyncUpdateController):
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::dispatchFakeIceCandidates):
        (WebCore::MockMediaEndpoint::iceCandidateTimerFired):
        (WebCore::MockMediaEndpoint::stepIceTransportStates):
        (WebCore::MockMediaEndpoint::iceTransportTimerFired):
        (WebCore::MockMediaEndpoint::unmuteRemoteSourcesByMid):
        (WebCore::MockMediaEndpoint::unmuteTimerFired):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::DecodingResultDispatcher::startTimer):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::scheduleFailure):
        (WebCore::ResourceHandle::setDefersLoading):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleCompositingLayerUpdate):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::dispatchRegionOversetChangeEventIfNeeded):
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::scheduleLazyRepaint):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::scheduleUpdate):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossibleAsynchronously):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::prepareToSend):
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::resume):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::resume):

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

        [Variation Fonts] Width values of GX fonts are not mapped correctly
        https://bugs.webkit.org/show_bug.cgi?id=170367

        Reviewed by Simon Fraser.

        For some reason, when I performed my calculations for how to map the 'wdth' axis of GX-style
        variation fonts, I thought that font-stretch: 100% should map to a variation value of 0.0.
        Instead, this should map to 1.0.

        Test: fast/text/variations/gx-width.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::denormalizeSlope):
        (WebCore::denormalizeVariationWidth):
        (WebCore::normalizeVariationWidth):
        (WebCore::normalizeWidth):
        (WebCore::preparePlatformFont):
        (WebCore::variationCapabilitiesForFontDescriptor):
        (WebCore::denormalizeWidth): Deleted.

2017-04-08  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream Mac] Revert change of Mac video capture format
        https://bugs.webkit.org/show_bug.cgi?id=170642
        <rdar://problem/31520492>

        Reviewed by Sam Weinig.

        Revert r214968 which changed macOS video capture format to kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
        from kCVPixelFormatType_420YpCbCr8Planar because AVSampleBufferDisplayLayer sometimes fails
        to display the former.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:

2017-04-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        A synchronous DecodingOptions should be compatible with any asynchronous sizeForDrawing DecodingOptions
        https://bugs.webkit.org/show_bug.cgi?id=170577

        Reviewed by Simon Fraser.

        Once a synchronous decoded frame is found, there is no need to decode it
        again. This decoded frame is suitable for any sizeForDrawing. This will
        prevent double decoding if one image client wants synchronous decoded
        frame while the other needs an asynchronous decode frame for a specific
        sizeForDrawing.

        Test: fast/images/async-image-background-image-repeated.html

        * platform/graphics/DecodingOptions.h:
        (WebCore::DecodingOptions::DecodingOptions):
        (WebCore::DecodingOptions::isNone):
        (WebCore::DecodingOptions::isAsynchronousCompatibleWith):

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

        Align the timers for throttled rAF to reduce power usage
        https://bugs.webkit.org/show_bug.cgi?id=170630
        rdar://problem/31490620

        Reviewed by Chris Dumez.

        Align the timers for all throttled ScriptedAnimationControllers in the process with
        a resolution of 30ms, which reduces process wake-ups and thus saves power.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::scheduleAnimation):

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

        Drop std::chrono support from Timer class
        https://bugs.webkit.org/show_bug.cgi?id=170645

        Reviewed by Sam Weinig.

        Drop std::chrono support from Timer class now that we prefer using Seconds type.

        * css/CSSImageGeneratorValue.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/canvas/WebGLRenderingContextBase.cpp:
        * loader/cache/CachedResource.cpp:
        (WebCore::deadDecodedDataDeletionIntervalForResourceType):
        (WebCore::CachedResource::destroyDecodedDataIfNeeded):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::MemoryCache):
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::setDeadDecodedDataDeletionInterval):
        (WebCore::MemoryCache::deadDecodedDataDeletionInterval):
        * page/PerformanceMonitor.cpp:
        * page/SuspendableTimer.h:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::selectionRectsDidChange):
        (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown):
        (WebCore::ServicesOverlayController::determineActiveHighlight):
        (WebCore::ServicesOverlayController::mouseEvent):
        * platform/Timer.h:
        (WebCore::TimerBase::startRepeating):
        (WebCore::TimerBase::startOneShot):
        (WebCore::TimerBase::augmentFireInterval):
        (WebCore::TimerBase::augmentRepeatInterval):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::fontForFamily):
        * platform/graphics/ca/TileController.cpp:
        * platform/graphics/cg/IOSurfacePool.cpp:
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setTimeout):
        (WebCore::XMLHttpRequest::createRequest):
        * xml/XMLHttpRequest.h:

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

        Update CSSProperties.json with correct fill-and-stroke status, and other cleanup
        https://bugs.webkit.org/show_bug.cgi?id=170643

        Reviewed by Chris Dumez.

        Structural changes:
            - move implementation-related "comment" blocks into "codegen-properties"
            - move status-related "comment" blocks into "status"
        
        Add the concept of "obsolete-category" and "obsolete-url" for properties
        like the text-fill-and-stroke properties that used to be specified in SVG but
        now have their own module shared with CSS.
        
        Update the status of paint-order, stroke-linecap, stroke-linejoin, stroke-miterlimit
        and stroke-width to "supported", overriding the default for css-text-fill-and-stroke which
        is "under consideration".
        
        Add display values "flow" and "flow-root" but mark them as unimplemented.
        
        Fix makeprop.pl to ignore comments inside codegen-properties.

        * css/CSSProperties.json:
        * css/makeprop.pl:
        (addProperty):

2017-04-08  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream iOS] Update muted state when interrupted
        https://bugs.webkit.org/show_bug.cgi?id=170605
        <rdar://problem/31503896>

        Reviewed by Youenn Fablet.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setMuted): Don't check both m_stopped and stopped(). Split code
        to  notify observers out into notifyMutedObservers.
        (WebCore::RealtimeMediaSource::notifyMutedObservers): Split from setMuted.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::captureSessionIsRunningDidChange): Set m_muted directly and 
        call notifyMutedObservers because the session has already stopped running.
        (WebCore::AVMediaCaptureSource::isProducingData): Move from .h file to make debugging easier.

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

        Unprefix CSS cursor values grab and grabbing
        https://bugs.webkit.org/show_bug.cgi?id=170543

        Reviewed by Jon Lee.

        Add support for unprefixed "grab" and "grabbing" values for cursor (retaining
        support for the prefixed values) which are now in <https://drafts.csswg.org/css-ui-3/#cursor>

        Canonicalize the order of the values based on the order in the spec in the enums
        and switch statements.

        Tested by fast/css/cursor-parsing.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ECursor):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/style/RenderStyleConstants.h:

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

        WebRTC tests gardening
        https://bugs.webkit.org/show_bug.cgi?id=170508

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Changing webrtc enabling for ios.

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

        MediaStreamTrack id should be preserved by PeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=170624

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createReceiverForSource): Setting track id according source id.

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

        Timer's nextFireInterval() / repeatInterval() should return Seconds
        https://bugs.webkit.org/show_bug.cgi?id=170639

        Reviewed by Simon Fraser.

        Timer's nextFireInterval() / repeatInterval() should return Seconds, not double.

        * loader/NavigationScheduler.cpp:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::updateTimerIntervalIfNecessary):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::suspend):
        (WebCore::SuspendableTimer::repeatInterval):
        * page/SuspendableTimer.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::getTimeToNextEvent):
        (WebCore::AnimationBase::goIntoEndingOrLoopingState):
        * page/animation/AnimationBase.h:
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::updateAnimations):
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimerForRenderer):
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimer):
        (WebCore::CSSAnimationControllerPrivate::animationFrameCallbackFired):
        * page/animation/CSSAnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::timeToNextService):
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::timeToNextService):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::timeToNextService):
        * page/animation/KeyframeAnimation.h:
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        * platform/Timer.cpp:
        (WebCore::TimerBase::nextFireInterval):
        * platform/Timer.h:
        (WebCore::TimerBase::repeatInterval):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setIsInWindow):
        (WebCore::TileController::scheduleTileRevalidation):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):

2017-04-08  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Mac cmake buildfix after r215051, just for fun.
        https://bugs.webkit.org/show_bug.cgi?id=169761

        * PlatformMac.cmake:

2017-04-07  Simon Fraser  <simon.fraser@apple.com>

        Build fix: TimerBase::start(double, double) can't be inline and exported,
        so make it non-inline.

        * platform/Timer.cpp:
        (WebCore::TimerBase::start):
        * platform/Timer.h:
        (WebCore::TimerBase::start): Deleted.

2017-04-07  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r203941): iAd Producer widgets fail to play in iBooks
        https://bugs.webkit.org/show_bug.cgi?id=170635
        <rdar://problem/30797958>

        Reviewed by Daniel Bates.

        Extend the MouseEvent::initMouseEvent() workaround we added for iAd Producer
        to iBooks since the iBooks widgets generated by iAd Producer contain the same
        bug.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEventQuirk):

2017-04-07  Chris Dumez  <cdumez@apple.com>

        Start using MonotonicTime / Seconds in Timer class
        https://bugs.webkit.org/show_bug.cgi?id=170625

        Reviewed by Simon Fraser.

        Start using MonotonicTime / Seconds in Timer class. More work will be needed
        for the transition to be complete. I plan to do this in a follow-up.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::alignedFireTime):
        * page/DOMTimer.h:
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::suspend):
        (WebCore::SuspendableTimer::startRepeating):
        (WebCore::SuspendableTimer::startOneShot):
        (WebCore::SuspendableTimer::repeatInterval):
        (WebCore::SuspendableTimer::augmentFireInterval):
        (WebCore::SuspendableTimer::augmentRepeatInterval):
        * page/SuspendableTimer.h:
        (WebCore::SuspendableTimer::startRepeating):
        (WebCore::SuspendableTimer::startOneShot):
        (WebCore::SuspendableTimer::augmentFireInterval):
        (WebCore::SuspendableTimer::augmentRepeatInterval):
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::ThreadTimers):
        (WebCore::ThreadTimers::setSharedTimer):
        (WebCore::ThreadTimers::updateSharedTimer):
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
        * platform/ThreadTimers.h:
        * platform/Timer.cpp:
        (WebCore::TimerHeapLessThanFunction::operator()):
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::start):
        (WebCore::TimerBase::stop):
        (WebCore::TimerBase::nextFireInterval):
        (WebCore::TimerBase::heapPop):
        (WebCore::TimerBase::updateHeapIfNeeded):
        (WebCore::TimerBase::setNextFireTime):
        (WebCore::TimerBase::nextUnalignedFireInterval):
        * platform/Timer.h:
        (WebCore::TimerBase::start):
        (WebCore::TimerBase::startOneShot):
        (WebCore::TimerBase::repeatInterval):
        (WebCore::TimerBase::repeatIntervalSeconds):
        (WebCore::TimerBase::augmentFireInterval):
        (WebCore::TimerBase::augmentRepeatInterval):
        (WebCore::TimerBase::alignedFireTime):
        (WebCore::TimerBase::isActive):
        * testing/Internals.cpp:
        (WebCore::Internals::isTimerThrottled):

2017-04-07  Yuichiro Kikura  <y.kikura@gmail.com>

        WebGPU: implement ComputeCommandEncoder and related components
        https://bugs.webkit.org/show_bug.cgi?id=170444

        Reviewed by Alex Christensen.

        I implemented WebGPUComputeCommandEncoder and related components based on the WebGPU proposal.
        https://webkit.org/wp-content/uploads/webgpu-api-proposal.html

        Test: fast/canvas/webgpu/webgpu-dispatch.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGPUCommandBufferCustom.cpp: Added.
        (WebCore::JSWebGPUCommandBuffer::completed):
        * html/canvas/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::createComputeCommandEncoder):
        * html/canvas/WebGPUCommandBuffer.h:
        * html/canvas/WebGPUCommandBuffer.idl:
        * html/canvas/WebGPUComputeCommandEncoder.cpp: Added.
        (WebCore::GPUSizeMake):
        (WebCore::WebGPUComputeCommandEncoder::create):
        (WebCore::WebGPUComputeCommandEncoder::WebGPUComputeCommandEncoder):
        (WebCore::WebGPUComputeCommandEncoder::~WebGPUComputeCommandEncoder):
        (WebCore::WebGPUComputeCommandEncoder::setComputePipelineState):
        (WebCore::WebGPUComputeCommandEncoder::setBuffer):
        (WebCore::WebGPUComputeCommandEncoder::dispatch):
        (WebCore::WebGPUComputeCommandEncoder::endEncoding):
        * html/canvas/WebGPUComputeCommandEncoder.h: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.h.
        (WebCore::WebGPUComputeCommandEncoder::computeCommandEncoder):
        * html/canvas/WebGPUComputeCommandEncoder.idl: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.idl.
        * html/canvas/WebGPUComputePipelineState.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUCommandBuffer.cpp.
        (WebCore::WebGPUComputePipelineState::create):
        (WebCore::WebGPUComputePipelineState::WebGPUComputePipelineState):
        (WebCore::WebGPUComputePipelineState::~WebGPUComputePipelineState):
        * html/canvas/WebGPUComputePipelineState.h: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.h.
        (WebCore::WebGPUComputePipelineState::computePipelineState):
        * html/canvas/WebGPUComputePipelineState.idl: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.idl.
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::createComputePipelineState):
        * html/canvas/WebGPURenderingContext.h:
        * html/canvas/WebGPURenderingContext.idl:
        * html/canvas/WebGPUSize.h: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.idl.
        * html/canvas/WebGPUSize.idl: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.idl.
        * platform/graphics/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::completed):
        * platform/graphics/cocoa/GPUComputeCommandEncoderMetal.mm: Added.
        (WebCore::MTLSizeMake):
        (WebCore::GPUComputeCommandEncoder::GPUComputeCommandEncoder):
        (WebCore::GPUComputeCommandEncoder::setComputePipelineState):
        (WebCore::GPUComputeCommandEncoder::setBuffer):
        (WebCore::GPUComputeCommandEncoder::dispatch):
        (WebCore::GPUComputeCommandEncoder::endEncoding):
        (WebCore::GPUComputeCommandEncoder::platformComputeCommandEncoder):
        * platform/graphics/cocoa/GPUComputePipelineStateMetal.mm: Copied from Source/WebCore/platform/graphics/gpu/GPUCommandBuffer.cpp.
        (WebCore::GPUComputePipelineState::GPUComputePipelineState):
        (WebCore::GPUComputePipelineState::platformComputePipelineState):
        * platform/graphics/gpu/GPUCommandBuffer.cpp:
        (WebCore::GPUCommandBuffer::createComputeCommandEncoder):
        * platform/graphics/gpu/GPUCommandBuffer.h:
        * platform/graphics/gpu/GPUComputeCommandEncoder.cpp: Copied from Source/WebCore/platform/graphics/gpu/GPUCommandBuffer.cpp.
        (WebCore::GPUComputeCommandEncoder::create):
        (WebCore::GPUComputeCommandEncoder::~GPUComputeCommandEncoder):
        (WebCore::GPUComputeCommandEncoder::setComputePipelineState):
        (WebCore::GPUComputeCommandEncoder::setBuffer):
        (WebCore::GPUComputeCommandEncoder::endEncoding):
        * platform/graphics/gpu/GPUComputeCommandEncoder.h: Copied from Source/WebCore/platform/graphics/gpu/GPUCommandBuffer.h.
        * platform/graphics/gpu/GPUComputePipelineState.cpp: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.idl.
        (WebCore::GPUComputePipelineState::create):
        (WebCore::GPUComputePipelineState::~GPUComputePipelineState):
        * platform/graphics/gpu/GPUComputePipelineState.h: Copied from Source/WebCore/platform/graphics/gpu/GPUCommandBuffer.h.
        * platform/graphics/gpu/GPUSize.h: Copied from Source/WebCore/html/canvas/WebGPUCommandBuffer.idl.

2017-04-07  Alex Christensen  <achristensen@webkit.org>

        Private browsing sessions should not look in keychain for client certificates
        https://bugs.webkit.org/show_bug.cgi?id=170618
        <rdar://problem/18457427>

        Reviewed by Dan Bernstein.

        Our client certificate testing in WebKit leaves much to be desired.
        See rdar://problem/17694210 for reproduction steps.

        * platform/spi/cf/CFNetworkSPI.h:
        Add some new SPI.

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

        Simple line layout: FlowContents::segmentIndexForRunSlow skips empty runs.
        https://bugs.webkit.org/show_bug.cgi?id=170552

        Reviewed by Antti Koivisto.

        The compare function passed to std::lower_bound completely misses empty runs. 

        Test: fast/text/simple-line-layout-hover-over-subsequent-linebreaks.html

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForRunSlow):

2017-04-07  Chris Dumez  <cdumez@apple.com>

        We should log how much CPU a background process was using when killing it due to CPU limiting
        https://bugs.webkit.org/show_bug.cgi?id=170619

        Reviewed by Andreas Kling.

        CPUMonitor now passes the CPU usage to the callback when it exceeds the threashold.

        * platform/CPUMonitor.cpp:
        (WebCore::CPUMonitor::timerFired):
        * platform/CPUMonitor.h:

2017-04-07  Chris Dumez  <cdumez@apple.com>

        Audible autoplay videos should not get paused when outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=170610
        <rdar://problem/31505984>

        Reviewed by Eric Carlson.

        Audible autoplay videos should not get paused when outside the viewport as this
        would be observable by the user.

        Test: media/video-restricted-invisible-autoplay-allowed-if-audible.html

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::autoplayPermitted):

2017-04-07  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r211382): Complex text with justification erroneously overflows containers
        https://bugs.webkit.org/show_bug.cgi?id=170399
        <rdar://problem/31442008>

        Reviewed by Simon Fraser.

        When we perform justification, we adjust glyphs' advances to add extra space between words.
        ComplexTextController maintains an invariant where m_totalWidth is equal to the sum of these
        advances. However, in RTL text, inserting extra justification space to the left of a glyph
        would break that invariant, and would increase the advances of two glyphs instead of just
        one. Then, when we go to draw the text, the sum of the advances is wider than m_totalWidth,
        which means the glyphs would be drawn outside of their container.

        This regressed in r211382 simply because of an oversight and because there were no tests for
        this codepath.

        Test: ComplexTextControllerTest.TotalWidthWithJustification

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):

2017-04-07  Chris Dumez  <cdumez@apple.com>

        Throttle / Align DOM Timers in cross-origin iframes to 30fps
        https://bugs.webkit.org/show_bug.cgi?id=170613
        <rdar://problem/31506444>

        Reviewed by Simon Fraser.

        Throttle / Align DOM Timers in cross-origin iframes to 30fps unless the user
        has interacted with them, in order to reduce power use.

        Test: http/tests/frame-throttling/timer-throttle-in-cross-origin-subframe.html

        * dom/Document.cpp:
        (WebCore::Document::domTimerAlignmentInterval):
        (WebCore::Document::updateLastHandledUserGestureTimestamp):
        * page/DOMTimer.h:

2017-04-07  John Wilander  <wilander@apple.com>

        Follow-up fix for Soup platform.
        https://bugs.webkit.org/show_bug.cgi?id=170322

        Unreviewed build fix. Error introduced by me in
        https://trac.webkit.org/changeset/215104/webkit.

        No new tests.

        * platform/network/soup/SocketStreamHandleImpl.h:
            Move parameter change to the right
            SocketStreamHandleImpl::create() function.

2017-04-07  John Wilander  <wilander@apple.com>

        WebSocket streams should have network usage attributed to correct process
        https://bugs.webkit.org/show_bug.cgi?id=170322
        <rdar://problem/26413551>

        Reviewed by Alex Christensen.

        Tested manually since it requires a per-app VPN.

        * page/SocketProvider.cpp:
        (WebCore::SocketProvider::createSocketStreamHandle):
            Sends in an empty struct since it doesn't have access to
            platform dependent sourceApplicationAuditData.
        * platform/network/SocketStreamHandle.h:
            Declaration of a per-platform struct to hold CF data for
            Cocoa platforms.
        * platform/network/cf/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
            Now takes WebCore::SourceApplicationAuditToken which is
            passed on to the constructor.
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
            Now takes WebCore::SourceApplicationAuditToken which is
            passed on to the streams once created.
        (WebCore::SocketStreamHandleImpl::createStreams):
            Now sets kCFStreamPropertySourceApplication for the two
            streams.
        * platform/network/curl/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
            Added unused WebCore::SourceApplicationAuditToken parameter.
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::create):
            Added unused WebCore::SourceApplicationAuditToken parameter.

2017-04-07  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r204512): WebSocket errors with "Failed to send WebSocket frame."  if too much data is sent
        https://bugs.webkit.org/show_bug.cgi?id=170463

        Reviewed by Michael Catanzaro.

        This only reproduces when using WebSockets to communicate with an external server.
        When communicating with a local server, CFWriteStreamWrite succeeds too reliably, so
        CFWriteStreamCanAcceptBytes returns true, when sometimes it doesn't when communicating
        across the real internet.

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        Returning std::nullopt means there was an error, which is not true when the socket stream
        is in a state where it cannot be written to because it is actively communicating.
        Returning 0 means 0 new bytes were sent, so we will try again later.

2017-04-07  Eric Carlson  <eric.carlson@apple.com>

        MediaSample should store video sample rotation instead of orientation
        https://bugs.webkit.org/show_bug.cgi?id=170598

        Reviewed by Youenn Fablet.

        No new tests, no functional change.

        * platform/MediaSample.h:
        (WebCore::MediaSample::videoRotation):
        (WebCore::MediaSample::videoOrientation): Deleted.
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayLayer):

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::processNewFrame):

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::OnFrame):
        (WebCore::RealtimeIncomingVideoSource::processNewSample):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:

        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::videoSampleAvailable):

2017-04-07  Brent Fulgham  <bfulgham@apple.com>

        WebKit should percent encode single quotes in query strings
        https://bugs.webkit.org/show_bug.cgi?id=170561
        <rdar://problem/7415154>

        Reviewed by Alex Christensen.

        Modify the characterClassTable to instruct the URLParser to convert
        the single-quote character ' to %27 in URL query strings.

        Tests: URLParserTest in TestWebKitAPI.
            fast/events/popup-blocked-from-unique-frame-via-window-open-named-sibling-frame.html
            fast/frames/xss-auditor-handles-file-urls.html
            http/tests/security/xssAuditor

        * platform/URLParser.cpp:

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

        Text insertion cursor disappears after pressing enter
        https://bugs.webkit.org/show_bug.cgi?id=169291
        <rdar://problem/30899611>

        Reviewed by Tim Horton.

        Positon upstream/downstream (as the result of VisiblePosition -> canonicalPosition) require
        linebox tree. In addition to regular text, we need to bail out of simple line layout on line breaks too.

        Test: editing/simple-line-layout-caret-is-gone.html

        * dom/Position.cpp:
        (WebCore::ensureLineBoxesIfNeeded):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::getInlineBoxAndOffset):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::ensureLineBoxes):
        (WebCore::RenderLineBreak::positionForPoint):
        (WebCore::RenderLineBreak::setSelectionState):
        (WebCore::RenderLineBreak::collectSelectionRects):
        (WebCore::ensureLineBoxes): Deleted.
        * rendering/RenderLineBreak.h:

2017-04-07  Xan Lopez  <xlopez@igalia.com>

        [GTK] Fix codec name in OWR ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=170600

        Reviewed by Carlos Garcia Campos.

        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::prepareMediaSession): uppercase the
        codec name we are looking for, that's how they appear in the
        vector.

2017-04-07  Per Arne Vollan  <pvollan@apple.com>

        Add hasVideo property to WebAVPlayerController.
        https://bugs.webkit.org/show_bug.cgi?id=170545
        rdar://problem/31325182

        Reviewed by Eric Carlson.

        Add a new "hasVideo" property which can be used to discover if any video content is present in the playback item,
        whether video content is currently enabled or not.

        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::hasVideoChanged):

2017-04-07  Miguel Gomez  <magomez@igalia.com>

        [GTK+] Animations not played properly when using synchronous decoding
        https://bugs.webkit.org/show_bug.cgi?id=170591

        Reviewed by Carlos Garcia Campos.

        Fix an index error when destroying decoded frames that was sometimes deleting the frame we wanted
        to keep.

        Covered by exitent tests.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::destroyDecodedData):

2017-04-07  Xan Lopez  <xan@igalia.com>

        [GTK] Add message about missing codecs to ASSERT in OWR
        https://bugs.webkit.org/show_bug.cgi?id=170596

        Reviewed by Carlos Garcia Campos.

        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp:
        (WebCore::MediaEndpointOwr::prepareMediaSession): add a message
        about the missing coded to the ASSERT.

2017-04-07  Tomas Popela  <tpopela@redhat.com>

        AX: Don't crash if no renderer is available for AccessibilityRenderObject
        https://bugs.webkit.org/show_bug.cgi?id=170448

        Reviewed by Chris Fleizach.

        Don't crash or assert if no renderer is available, but early return
        gracefully (as in other places in the AccessibilityRenderObject.cpp).
        Spotted by running some tests through dogtail.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        (WebCore::AccessibilityRenderObject::isUnvisited):
        (WebCore::AccessibilityRenderObject::isVisited):

2017-04-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Update the priorities used in glib main loop sources
        https://bugs.webkit.org/show_bug.cgi?id=170457

        Reviewed by Žan Doberšek.

        * platform/glib/MainThreadSharedTimerGLib.cpp:
        (WebCore::MainThreadSharedTimer::MainThreadSharedTimer):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::TextureMapperPlatformLayerProxy):
        (WebCore::TextureMapperPlatformLayerProxy::activateOnCompositingThread):

2017-04-07  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement AES_CBC support
        https://bugs.webkit.org/show_bug.cgi?id=170550

        Reviewed by Michael Catanzaro.

        Implement the CryptoAlgorithmAES_CBC::platform{Encrypt,Decrypt}
        functionality for configurations that use libgcrypt. This is done
        by leveraging the gcry_cipher_* APIs for the AES algorithm that's
        deduced appropriately from the key size and the CBC cipher mode.
        Additionally, the PKCS#7 padding is implemented for each operation,
        as demanded by the Web Crypto specification.

        No new tests -- current ones cover this sufficiently, but are not yet
        enabled due to missing platform-specific SUBTLE_CRYPTO implementations.

        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):

2017-04-07  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement raw and JWK imports and exports for EC keys
        https://bugs.webkit.org/show_bug.cgi?id=170546

        Reviewed by Michael Catanzaro.

        Implement import and export operations for EC keys, covering the raw
        and JWK import/export types.

        CryptoKeyEC::platformImportRaw() builds a public-key s-expression,
        providing the curve name and the key data, and yields the gcry_sexp_t
        object to the new CryptoKeyEC.

        CryptoKeyEC::platformImportJWKPublic() first constructs a Vector<uint8_t>
        object that contains the EC point in the uncompressed format. It then
        puts that data into a newly-constructed public-key s-expression that is
        then used to construct the new CryptoKeyEC object.

        CryptoKeyEC::platformImportJWKPrivate() constructs the EC point data just
        the same, but it also lays out the private key field element data into
        the private-key s-expression that's then handed off to the CryptoKeyEC
        object.

        CryptoKeyEC::platformExportRaw() constructs a new EC operations context
        and then uses it to retrieve the q parameter as an MPI. A Vector<uint8_t>
        is retrieved from the MPI data through the extractMPIData() helper
        function.

        CryptoKeyEC::platformAddFieldElements() similarly uses the EC operations
        context to retrieve the q parameter data, which it then splits into the
        x and y field elements and Base64 URL-encodes them into a form that can
        be placed in a JsonWebKey. If the key is private, the d parameter is
        retrieved in the same fashion and again Base64 URL-encoded and stored
        in the JsonWebKey object.

        No new tests -- current ones cover this sufficiently, but are not yet
        enabled due to other missing platform-specific SUBTLE_CRYPTO
        implementations.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::uncompressedPointSizeForCurve):
        (WebCore::uncompressedFieldElementSizeForCurve):
        (WebCore::extractMPIData):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::CryptoKeyEC::platformExportRaw):
        (WebCore::CryptoKeyEC::platformAddFieldElements):

2017-04-07  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyRSA::generatePair()
        https://bugs.webkit.org/show_bug.cgi?id=170350

        Reviewed by Michael Catanzaro.

        Start implementing the libgcrypt-based platform bits of CryptoKeyRSA.

        Implement generatePair() by constructing a genkey s-expression
        that requests a generation of an RSA key that should use a modulus
        of the specified bit-length and the specified exponent. The exponent
        is extracted from an uint8_t array through a helper function. The
        modulus length value is checked to be at least 16, since libgcrypt
        does not support generating primes of less than that length in bits.

        The returned s-expression upon request will contain the data for
        both the public and the private key. gcry_sexp_t handles representing
        those s-expressions are then passed to CryptoKeyRSA::create() before
        invoking the success callback with a new CryptoKeyPair object in a
        separate ScriptExecutionContext task.

        The CryptoKeyRSA constructor simply has the notImplemented() call
        removed. The destructor now invokes the HandleDeleter<gcry_sexp_t>
        object instance to destroy the object represented by the
        m_platformKey handle.

        The methods in CryptoKeyRSA.cpp are also reordered to follow the
        declaration order used in the header.

        No new tests -- current ones cover this sufficiently, but are not yet
        enabled due to other missing platform-specific SUBTLE_CRYPTO
        implementations.

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::~CryptoKeyRSA):
        (WebCore::exponentVectorToUInt32):
        (WebCore::CryptoKeyRSA::generatePair):
        (WebCore::CryptoKeyRSA::importSpki):
        (WebCore::CryptoKeyRSA::importPkcs8):
        (WebCore::CryptoKeyRSA::exportPkcs8):
        (WebCore::CryptoKeyRSA::buildAlgorithm):
        (WebCore::CryptoKeyRSA::exportData):
        * crypto/keys/CryptoKeyRSA.h:

2017-04-06  Youenn Fablet  <youenn@apple.com>

        [Debug] ASSERT(!throwScope.exception()) on imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-status-worker.html
        https://bugs.webkit.org/show_bug.cgi?id=170395
        <rdar://problem/31394017>

        Reviewed by Mark Lam.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredPromise::reject): Exiting early in case of scope having an exception.
        Adding an assertion to ensure this is a worker termination exception.

2017-04-06  Andreas Kling  <akling@apple.com>

        Inaudible background tabs should become eligible for memory kill after 8 minutes
        https://bugs.webkit.org/show_bug.cgi?id=170574
        <rdar://problem/31488686>

        Reviewed by Gavin Barraclough.

        Lower the delay for potentially marking background tabs as inactive from 60 minutes to 8 minutes.
        Letting a tab misbehave in the background for an entire hour was overly charitable.

        * page/PerformanceMonitor.cpp:

2017-04-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scroll offset jumps after a programmatic scroll in an overflow container with scroll snapping
        https://bugs.webkit.org/show_bug.cgi?id=170560
        <rdar://problem/31484693>

        Reviewed by Tim Horton.

        Test: css3/scroll-snap/scroll-snap-programmatic-overflow-scroll.html

        Logic for maintaining the scroll snap state in ScrollController was previously removed from iOS when refactoring
        ScrollController. This was done because scroll snapping on iOS is driven not by the ScrollController (as it is
        on Mac) but rather by sending scroll snap offsets to the UI process and hooking into UIScrollView delegates to
        handle retargeted scrolling.

        However, on iOS, this ScrollController state is still important for the purposes of keeping the last active
        snap point index in sync with the UI process when the scroll offset changes outside of a user gesture (i.e.
        programmatic scrolling). Since the UI process does not get a chance to update the active snap offset during a
        programmatic scroll, our last active snap offset state was only being updated to the last snap position that the
        user manually scrolled to, making programmatic scrolling jump to this offset.

        To fix this, we need to update scroll snap state on iOS within ScrollController. Also adds a new Layout test
        that exercises programmatic scrolling in an overflow scrolling container on all platforms.

        * platform/cocoa/ScrollController.mm:
        (WebCore::otherScrollEventAxis):
        (WebCore::ScrollController::updateScrollSnapState):
        (WebCore::ScrollController::updateScrollSnapPoints):

2017-04-05  Simon Fraser  <simon.fraser@apple.com>

        Throttle requestAnimationFrame in cross-origin iframes to 30fps
        https://bugs.webkit.org/show_bug.cgi?id=170534

        Reviewed by Dan Bates.

        Add a throttling reason to ScriptedAnimationController which is NonInteractedCrossOriginFrame,
        set on cross-origin iframes whose documents have never seen a user interaction. It's cleared
        as soon as an interaction on this frame or a child frame is detected.

        Move the initialization of the LowPowerMode throttling reason to Document::requestAnimationFrame(),
        since it's more appropriate to compute NonInteractedCrossOriginFrame here than down in ScriptedAnimationController,
        and best to do both in the same place.

        Tests: http/tests/frame-throttling/raf-throttle-in-cross-origin-subframe.html

        * dom/Document.cpp:
        (WebCore::Document::requestAnimationFrame):
        (WebCore::Document::updateLastHandledUserGestureTimestamp):
        * dom/Document.h:
        (WebCore::Document::hasHadUserInteraction):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::throttlingReasonToString):
        (WebCore::ScriptedAnimationController::interval):
        * dom/ScriptedAnimationController.h:
        * loader/FrameLoader.cpp:
        (WebCore::shouldAskForNavigationConfirmation):

2017-04-05  Simon Fraser  <simon.fraser@apple.com>

        Use the Accelerate framework to optimize FEColorMatrix operations
        https://bugs.webkit.org/show_bug.cgi?id=170518

        Reviewed by Tim Horton.

        On macOS and iOS, we can use the Accelerate framework (vImage) to do color matrix
        math to optimize color matrix, hue rotate, saturation and luminosity to alpha filters.
        
        Change ImageBuffer::getUnmultipliedImageData() and getPremultipliedImageData() to
        return the size of the returned Uint8ClampedArray in physical pixels, because we
        need to pass that to vImage.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::effectApplyAccelerated):
        (WebCore::effectType):
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):

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

        Do some minor FEColorMatrix code cleanup and optimization
        https://bugs.webkit.org/show_bug.cgi?id=170474

        Reviewed by Dean Jackson.

        Don't switch inside of a pixel processing loop; repeat the loop inside switch (filterType).
        
        Change matrix() and saturateAndHueRotate() to dereference the source pixels once, instead
        of multiple times, which is faster.
        
        This kind of code benefits from aligning things with spaces for readability, so do so,
        violating webkit style.
        
        Add some off-by-default performance logging code.

        Increases pixel processing performance from about 86ms per megapixel to 65ms per megapixel.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::matrix):
        (WebCore::saturateAndHueRotate):
        (WebCore::effectType):
        (WebCore::FEColorMatrix::platformApplySoftware):

2017-04-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215041.

        The LayoutTest for this change is failing on ios-simulator.

        Reverted changeset:

        "Rendering flexbox children across columns"
        https://bugs.webkit.org/show_bug.cgi?id=164166
        http://trac.webkit.org/changeset/215041

2017-04-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r215046.

        This change broke internal builds.

        Reverted changeset:

        "WebRTC tests gardening"
        https://bugs.webkit.org/show_bug.cgi?id=170508
        http://trac.webkit.org/changeset/215046

2017-04-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Only Capture Extra Network Load Metrics when there is a Web Inspector Frontend
        https://bugs.webkit.org/show_bug.cgi?id=170525

        Reviewed by Youenn Fablet.

        Covered by existing tests that when Web Inspector is open we enable collecting the extra data.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::firstFrontendCreated):
        (WebCore::InspectorInstrumentation::lastFrontendDeleted):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frontendCreated):
        (WebCore::InspectorInstrumentation::frontendDeleted):
        When the first frontend is created enable a new loader strategy to
        collect extra network load metrics. When the last frontend is closed
        disable the extra metrics.

        * loader/LoaderStrategy.h:
        * platform/PlatformStrategies.h:
        New load strategy to enable/disable new metrics.

2017-04-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show all headers in the Request Headers section of the Resource details sidebar
        https://bugs.webkit.org/show_bug.cgi?id=16531
        <rdar://problem/5712895>

        Reviewed by Timothy Hatcher.

        Test: http/tests/inspector/network/resource-request-headers.html

        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::ResourceTiming):
        Eliminate unnecessary data from the NetworkLoadTiming object
        when it is used for ResourceTiming. This clears up some memory
        that will otherwise never be used.

        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy):
        (WebCore::NetworkLoadMetrics::reset):
        (WebCore::NetworkLoadMetrics::clearNonTimingData):
        (WebCore::NetworkLoadMetrics::operator==):
        (WebCore::NetworkLoadMetrics::encode):
        (WebCore::NetworkLoadMetrics::decode):
        Include an optional HTTPHeaderMap for a refined list of
        request headers for this network load.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForMetrics):
        Include request headers with other optional metrics data
        when the load is completed.

2017-04-06  Tim Horton  <timothy_horton@apple.com>

        Follow up to r209304, remove line numbers from one more StyleRule construction
        https://bugs.webkit.org/show_bug.cgi?id=170564

        Reviewed by Simon Fraser.

        * css/StyleRule.cpp:
        (WebCore::StyleRuleViewport::StyleRuleViewport):
        This one was missed in r209304.

2017-04-06  Timothy Horton  <timothy_horton@apple.com>

        Remove an unused member and constructor parameter from CSSPropertyParser
        https://bugs.webkit.org/show_bug.cgi?id=170562

        Reviewed by Simon Fraser.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSingleValue):
        (WebCore::CSSParser::parseValueWithVariableReferences):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeDeclarationValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::CSSPropertyParser):
        (WebCore::CSSPropertyParser::parseValue):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * css/parser/CSSPropertyParser.h:
        It is possible to get Clang to complain about the unused member, though
        I'm not sure why it doesn't in the build today.

2017-04-06  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Hittest always returns the first renderer in the block.
        https://bugs.webkit.org/show_bug.cgi?id=170520
        <rdar://problem/30979175>

        Reviewed by Antti Koivisto.

        This is incorrect now with <br> support (multiple renderers within the same block flow).

        Test: fast/dom/Document/CaretRangeFromPoint/simple-line-layout-hittest-with-caret-range-from-point.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint): Related fix. We don't yet support positionForPoint with multiple renderes. 
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::segmentForRun): Empty runs are all valid.
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*): This should eventually return a list of renderes.
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::flowContents):

2017-04-06  Jon Davis  <jond@apple.com>

        Updates feature status for recently shipped features
        https://bugs.webkit.org/show_bug.cgi?id=170359

        Reviewed by Brian Burg.

        Added missing Gamepad entry.
        Changed "Done" status to "Supported".
        Also changed status from "In Development" to "Supported" for:
        
        - CSS Grid Layout Level 1
        - CSS Inline Layout Module Level 3
        - CSS Scroll Snap Points Module Level 1
        - CSS Color Level 4
        - Fetch API
        - Indexed Database 2.0
        - Media Capture and Streams
        - Pointer Lock
        - Preload
        - Input Events

        * features.json:

2017-03-31  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Add support for AES-CTR
        https://bugs.webkit.org/show_bug.cgi?id=169761
        <rdar://problem/31331321>

        Reviewed by Brent Fulgham.

        This patch adds support for AES-CTR. Operations of AES-CTR include: encrypt, decrypt, generateKey,
        importKey, exportKey, wrapKey, and unwrapKey. This implementation follows the latest WebCryptoAPI
        spec: https://www.w3.org/TR/WebCryptoAPI/#aes-ctr.

        Tests: crypto/subtle/aes-ctr-encrypt-malformed-parameters.html
               crypto/subtle/aes-ctr-encrypt-overflow.html
               crypto/subtle/aes-ctr-generate-export-key-jwk-length-128.html
               crypto/subtle/aes-ctr-generate-export-key-jwk-length-192.html
               crypto/subtle/aes-ctr-generate-export-key-jwk-length-256.html
               crypto/subtle/aes-ctr-generate-export-raw-key.html
               crypto/subtle/aes-ctr-generate-key-encrypt-decrypt.html
               crypto/subtle/aes-ctr-generate-key.html
               crypto/subtle/aes-ctr-import-jwk-key-length-128.html
               crypto/subtle/aes-ctr-import-jwk-key-length-192.html
               crypto/subtle/aes-ctr-import-jwk-key-length-256.html
               crypto/subtle/aes-ctr-import-key-decrypt.html
               crypto/subtle/aes-ctr-import-key-encrypt.html
               crypto/subtle/aes-ctr-import-key-unwrap-jwk-key.html
               crypto/subtle/aes-ctr-import-key-unwrap-raw-key.html
               crypto/subtle/aes-ctr-import-key-wrap-jwk-key.html
               crypto/subtle/aes-ctr-import-key-wrap-raw-key.html
               crypto/subtle/aes-ctr-import-raw-key.html
               crypto/workers/subtle/aes-ctr-import-key-decrypt.html
               crypto/workers/subtle/aes-ctr-import-key-encrypt.html
               crypto/workers/subtle/aes-ctr-import-key-unwrap-key.html
               crypto/workers/subtle/aes-ctr-import-key-wrap-key.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp: Added.
        (WebCore::usagesAreInvalidForCryptoAlgorithmAES_CTR):
        (WebCore::parametersAreValid):
        (WebCore::CryptoAlgorithmAES_CTR::create):
        (WebCore::CryptoAlgorithmAES_CTR::identifier):
        (WebCore::CryptoAlgorithmAES_CTR::encrypt):
        (WebCore::CryptoAlgorithmAES_CTR::decrypt):
        (WebCore::CryptoAlgorithmAES_CTR::generateKey):
        (WebCore::CryptoAlgorithmAES_CTR::importKey):
        (WebCore::CryptoAlgorithmAES_CTR::exportKey):
        (WebCore::CryptoAlgorithmAES_CTR::getKeyLength):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h: Added.
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp: Added.
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp: Added.
        (WebCore::bigIntegerToSize):
        (WebCore::transformAES_CTR):
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/parameters/AesCtrParams.idl: Added.
        * crypto/parameters/CryptoAlgorithmAesCtrParams.h: Added.

2017-04-06  Youenn Fablet  <youenn@apple.com>

        WebRTC tests gardening
        https://bugs.webkit.org/show_bug.cgi?id=170508

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Changing webrtc enabling for ios.

2017-04-06  Andreas Kling  <akling@apple.com>

        Stop forcing CA commit when memory pressure changes.
        https://bugs.webkit.org/show_bug.cgi?id=170522
        <rdar://problem/31460236>

        Reviewed by Antti Koivisto.

        Don't force a CA commit when reaching critical memory pressure. We're already doing a ton
        of work in response to the pressure, and this was really a hack to try to react quickly on
        512 MB devices which we don't support anymore.

        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):

2017-04-06  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement ReadableStreamBYOBRequest respondWithNewView()
        https://bugs.webkit.org/show_bug.cgi?id=170339

        Reviewed by Youenn Fablet.

        Implemented ReadableStreamBYOBRequest respondWithNewView().

        Added new tests to check respondWithNewView() behaviour.

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerRespondWithNewView): Added.
        * Modules/streams/ReadableStreamBYOBRequest.js:
        (respondWithNewView): Updated.

2017-04-06  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Host application should be able to mute and unmute media streams
        https://bugs.webkit.org/show_bug.cgi?id=170519
        <rdar://problem/31174326>

        Unreviewed, fix crash introduced in r214980.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): NULL-check page.

2017-04-06  Dave Hyatt  <hyatt@apple.com>

        Rendering flexbox children across columns
        https://bugs.webkit.org/show_bug.cgi?id=164166
        <rdar://problem/29055587>

        Reviewed by Zalan Bujtas.

        Added fast/multicol/flexbox-rows.html.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild):
        Treat block-level flexboxes that occur inside block flows the same as replaced
        and unsplittable elements and push them to the next page if they don't fit. We don't
        update the minimum page height though, since the flexbox is not really unsplittable.

2017-04-05  Simon Fraser  <simon.fraser@apple.com>

        Set lastHandledUserGestureTimestamp on all ancestor documents, not just the top document
        https://bugs.webkit.org/show_bug.cgi?id=170479

        Reviewed by Sam Weinig.

        When interacting with a subframe document, set lastHandledUserGestureTimestamp on all ancestor
        documents up to the root.

        This will be used in future for requestAnimationFrame throttling.

        Test: fast/frames/user-gesture-timestamp-propagation.html

        * dom/Document.cpp:
        (WebCore::Document::updateLastHandledUserGestureTimestamp):
        * dom/Document.h:
        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        * testing/Internals.cpp:
        (WebCore::Internals::lastHandledUserGestureTimestamp):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-04-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Host application should be able to mute and unmute media streams
        https://bugs.webkit.org/show_bug.cgi?id=170519
        <rdar://problem/31174326>

        Unreviewed, address review comments missed in the initial checkin.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Mute the private stream if the page doesn't allow
        capture.
        (WebCore::MediaStream::pageMutedStateDidChange): setMuted -> setCaptureTracksMuted.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::addTrack): Don't track muted state, the capture source already does.
        (WebCore::MediaStreamPrivate::startProducingData):  Ditto.
        (WebCore::MediaStreamPrivate::setCaptureTracksMuted): Renamed from setMuted.
        (WebCore::MediaStreamPrivate::setMuted): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:

2017-04-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Host application should be able to mute and unmute media streams
        https://bugs.webkit.org/show_bug.cgi?id=170519
        <rdar://problem/31174326>

        Reviewed by Youenn Fablet.

        No new tests, fast/mediastream/MediaStream-page-muted.html was updated.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::~MediaStream): Fix a typo.
        (WebCore::MediaStream::pageMutedStateDidChange): Don't store muted state, let the private
        stream store it.
        (WebCore::MediaStream::mediaState): Deal with new muted state flags.
        * Modules/mediastream/MediaStream.h:

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Clear media state before the frame is cleared.

        * page/MediaProducer.h: Add muted flags.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack): The display layer
        should not be visible when the video track is muted.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::addTrack): Mute the new track if necessary.
        (WebCore::MediaStreamPrivate::startProducingData): Do nothing when muted.
        (WebCore::MediaStreamPrivate::setExternallyMuted): New, mute/unmute tracks.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setMuted): Start/stop producing data.

        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState): Support new media stream muted flags.

2017-04-05  Andreas Kling  <akling@apple.com>

        Make inactive web processes behave as though under memory pressure.
        https://bugs.webkit.org/show_bug.cgi?id=170042
        <rdar://problem/31038445>

        Reviewed by Antti Koivisto.

        Prevent PerformanceMonitor from marking the process as inactive at startup.
        This fixes the API test failure that caused this patch to get rolled out.

        * page/PerformanceMonitor.h:

2017-04-05  Youenn Fablet  <youenn@apple.com>

        Switch to kCVPixelFormatType_420YpCbCr8BiPlanarFullRange for Mac video capture format
        https://bugs.webkit.org/show_bug.cgi?id=170509

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:

2017-04-05  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] Implement the place-items shorthand
        https://bugs.webkit.org/show_bug.cgi?id=168847

        Reviewed by David Hyatt.

        The CSS Box Alignment specification defines a new shorthand to set the
        Content Alignment properties (align-items and justify-items) at the
        same time.

        This patch provides the implementation of the CSS parsing logic and the
        required regression tests. For the time being, as it happens with the
        rest of the new alignment properties, the new parsing logic is
        implemented behind the CSS Grid Layout runtime flag.

        Test: css3/parse-place-items.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::getAlignmentShorthandValue):
        * css/StyleProperties.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isAutoOrNormalOrStretch):
        (WebCore::consumeSelfPositionOverflowPosition):
        (WebCore::consumeSimplifiedItemPosition):
        (WebCore::CSSPropertyParser::consumePlaceItemsShorthand):
        * css/parser/CSSPropertyParser.h:

2017-04-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214932.

        This change broke an internal build.

        Reverted changeset:

        "[ios-simulator] API test WebKit2.DataDetectionReferenceDate
        timing out"
        https://bugs.webkit.org/show_bug.cgi?id=161967
        http://trac.webkit.org/changeset/214932

2017-04-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214962.

        Roll r214937 back in because it wasn't at fault for the build
        breakage.

        Reverted changeset:

        "Unreviewed, rolling out r214937."
        https://bugs.webkit.org/show_bug.cgi?id=170365
        http://trac.webkit.org/changeset/214962

2017-04-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214937.

        This change broke an internal build.

        Reverted changeset:

        "REGRESSION (r202472): Data Detection overwrites existing
        links in detected ranges"
        https://bugs.webkit.org/show_bug.cgi?id=170365
        http://trac.webkit.org/changeset/214937

2017-04-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WebRTC][OpenWebRTC] Add support for SDP BUNDLE ("a:group:BUNDLE" and "a=bundle-only" lines)
        https://bugs.webkit.org/show_bug.cgi?id=170157

        Reviewed by Alejandro G. Castro.

        This implements support on the SDPProcessor for generating an "a=group:BUNDLE"
        attribute with the MID identifiers specified in the bundle group in the most
        recent answer.
        It also implements support for generating "a=bundle-only" attributes on the
        "m=" sections of the SDP according to the bundlePolicy defined.

        Test: fast/mediastream/RTCPeerConnection-inspect-offer-bundlePolicy-bundle-only.html

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::createOfferTask):
        (WebCore::MediaEndpointPeerConnection::createAnswerTask):
        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::getBundlePolicyName):
        (WebCore::configurationToJSON):
        * Modules/mediastream/sdp.js:
        (SDP.generate):
        * platform/mediastream/MediaEndpointSessionConfiguration.h:
        (WebCore::MediaEndpointSessionConfiguration::bundlePolicy):
        (WebCore::MediaEndpointSessionConfiguration::setBundlePolicy):
        (WebCore::MediaEndpointSessionConfiguration::clone):

2017-04-05  Jer Noble  <jer.noble@apple.com>

        [MSE] Seeks to currentTime=0 will fail if currentTime is already 0.
        https://bugs.webkit.org/show_bug.cgi?id=170510
        <rdar://problem/30988403>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-unnecessary-seek-seeked.html

        The AVSampleBufferRenderSynchronizer won't fire a time jumped notification if no seek is actully
        necessary. So short circuit the seek logic if the seek time is identical to the current synchronizer
        time.

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

2017-04-05  Chris Dumez  <cdumez@apple.com>

        <input type="range"> changing to disabled while active breaks all pointer events
        https://bugs.webkit.org/show_bug.cgi?id=170447
        <rdar://problem/31442875>

        Reviewed by Geoffrey Garen.

        When a range's slider is being moved, we set SliderThumbElement's m_inDragMode flag
        to true and mark the range elements as the CapturingMouseEventsElement. When we get
        the mouseUp event, we are supposed to exit drag mode. However, when the range element
        gets disabled while dragging, we do not get the mouseUp event and we need to make
        sure we exit dragging mode anyway. r112547 tried to fix this by calling stopDragging()
        in SliderThumbElement::defaultEventHandler() when the input element is disabled.
        While this often works, this is fragile and we sometimes fail to exit dragging mode
        when we should.

        This patch addressed the issue by calling stopDragging() in
        SliderThumbElement::disabledAttributeChanged() instead. This is much safer as we
        guarantee will exit dragging mode whenever the range element gets disabled, even
        if SliderThumbElement::defaultEventHandler() does not get called after that.

        Test: fast/forms/range/disabled-while-dragging.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::disabledAttributeChanged):
        * html/RangeInputType.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::disabledAttributeChanged):
        * html/shadow/SliderThumbElement.h:

2017-04-05  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Video doesn't render in fullscreen on iOS
        https://bugs.webkit.org/show_bug.cgi?id=170404

        Reviewed by Youenn Fablet.
        
        No new tests, filed https://bugs.webkit.org/show_bug.cgi?id=170512.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Include
        video fullscreen manager on iOS too.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix): Add paramater
        to force transform recalculation.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Restructure code since
        the display layer resize happens elsewhere.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers): Include video fullscreen
        manager on iOS too.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayers): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVideoFullscreenLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::backgroundLayerBoundsChanged): Change the
        display layer size and position immediately instead of waiting for the next sample buffer
        so the display is correct when fullscreen mode changes when paused.

2017-04-05  Youenn Fablet  <youenn@apple.com>

        Deprecate and remove URL.createObjectURL(mediastream)
        https://bugs.webkit.org/show_bug.cgi?id=167518
        <rdar://problem/31149607>

        Reviewed by Eric Carlson.

        Covered by updated tests.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/mediastream/DOMURLMediaStream.cpp: Removed.
        * Modules/mediastream/DOMURLMediaStream.h: Removed.
        * Modules/mediastream/DOMURLMediaStream.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMURL.idl:

2017-04-05  Alejandro G. Castro  <alex@igalia.com>

        [Webrtc] Mock realtime sources factories should be static after r213941
        https://bugs.webkit.org/show_bug.cgi?id=170282

        Reviewed by Alex Christensen.

        If we don't make the variables static we would be returning a
        local variable.

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::factory):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::factory):

2017-04-05  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        Some JavaScript inline functions were not being accessed from this file with different enable flags.
        * platform/spi/cf/CFNetworkSPI.h:
        * platform/spi/cocoa/NSURLConnectionSPI.h:
        Moved NSURLSession-specific SPI from NSURLConnectionSPI.h to CFNetworkSPI.h.

2017-04-05  Chris Dumez  <cdumez@apple.com>

        _blank / _self / _parent / _top browsing context names should be case-insensitive
        https://bugs.webkit.org/show_bug.cgi?id=169747

        Reviewed by Alex Christensen.

        _blank / _self / _parent / _top browsing context names should be case-insensitive
        as per the HTML specification:
        - https://html.spec.whatwg.org/#browsing-context-names

        This aligns our behavior with Firefox as well. See discussion at:
        - https://github.com/whatwg/html/issues/2443

        Tests: imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/browsing-context-_blank.html
               imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-001.html
               imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-002.html
               imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-003.html
               imported/w3c/web-platform-tests/html/browsers/windows/browsing-context-names/browsing-context-choose-parent-004.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::createWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::uniqueChildName):
        (WebCore::FrameTree::find):

2017-04-05  Miguel Gomez  <magomez@igalia.com>

        [GTK+] PNG animations that should run once are not played at all
        https://bugs.webkit.org/show_bug.cgi?id=170499

        Reviewed by Carlos Garcia Campos.

        The repetition count reported bu the PNGImageDecoder is wrong. It's returning m_playCount - 1, which
        means 0 for the animations that need to be played once. Change it to return an appropriate value.

        Covered by existent tests.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::repetitionCount):
        * platform/image-decoders/png/PNGImageDecoder.h:

2017-04-05  Andy Estes  <aestes@apple.com>

        REGRESSION (r202472): Data Detection overwrites existing links in detected ranges
        https://bugs.webkit.org/show_bug.cgi?id=170365
        <rdar://problem/29205721>

        Reviewed by Tim Horton.

        r202472 changed the node traversal in searchForLinkRemovingExistingDDLinks() to only
        consider nodes that are descendants of startNode, but we need to traverse all nodes between
        startNode and endNode to find existing non-DD links.

        As a result, we'd add a Data Detector link to the following snippet and make the original
        links un-clickable:

            <a href='#'>tomorrow</a> <a href='#'>night</a>

        Fix this by not specifying a stayWithin node when calling NodeTraversal::next(). The loop
        will terminate when we reach endNode.

        Updated WebKit2.DataDetectionReferenceDate API test.

        * editing/cocoa/DataDetection.mm:
        (WebCore::searchForLinkRemovingExistingDDLinks):

2017-04-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move WebErrors from WebProcess to Shared and get rid of ErrorsGtk in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=156974

        Reviewed by Sam Weinig.

        Remove ErrorsGtk.

        * PlatformGTK.cmake:
        * platform/gtk/ErrorsGtk.cpp: Removed.
        * platform/gtk/ErrorsGtk.h: Removed.

2017-04-05  Andy Estes  <aestes@apple.com>

        [ios-simulator] API test WebKit2.DataDetectionReferenceDate timing out
        https://bugs.webkit.org/show_bug.cgi?id=161967

        Reviewed by Alexey Proskuryakov.

        DataDetectorsCoreSPI.h defined DDQueryOffset as a struct of two CFIndexes, which is 16 bytes
        on LP64, but the struct is actually defined as two CFIndex-typed 32-bit bitfields, which is
        8 bytes on LP64. This breaks the ABI on Public SDK builds when calling functions that take
        or return DDQueryOffsets.

        * platform/spi/cocoa/DataDetectorsCoreSPI.h: Updated the DDQueryOffset definition for
        Public SDK builds, and added a static_assert to detect future size changes at compile time.

2017-04-04  Jer Noble  <jer.noble@apple.com>

        Move AVSampleBufferDisplayLayer declarations into AVFoundationSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=170471

        Reviewed by Eric Carlson.

        Move the declaration of AVSampleBufferDisplayLayer (and related classes) into AVFoundationSPI.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/spi/mac/AVFoundationSPI.h:

2017-04-04  Youenn Fablet  <youenn@apple.com>

        Canvas is tainted when painting a video with MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=170486

        Reviewed by Eric Carlson.

        Test: http/tests/media/media-stream/getusermedia-with-canvas.html

        Adding the notion of isolated source so that we can later on implement WebRTC isolated tracks.
        For now, canvas will not be tainted if painted from a MediaStreamTrack.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::didPassCORSAccessCheck):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::isIsolated):
        * platform/mediastream/RealtimeMediaSource.h:

2017-04-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r214894, r214895, r214907, r214912,
        and r214918.
        https://bugs.webkit.org/show_bug.cgi?id=170491

        Caused build failures on Mac (Requested by rniwa on #webkit).

        Reverted changesets:

        "Build fix."
        http://trac.webkit.org/changeset/214894

        "Rolling back the build fix, as it broke other builds."
        http://trac.webkit.org/changeset/214895

        "Move AVSampleBufferDisplayLayer declarations into
        AVFoundationSPI.h"
        https://bugs.webkit.org/show_bug.cgi?id=170471
        http://trac.webkit.org/changeset/214907

        "Unreviewed build fix: fix compilation error on Sierra."
        http://trac.webkit.org/changeset/214912

        "More build fixing."
        http://trac.webkit.org/changeset/214918

2017-04-04  Youenn Fablet  <youenn@apple.com>

        [Mac] Add back web audio support for getUserMedia MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=170482

        Reviewed by Eric Carlson.

        ´Covered by reenabled test.

        Exporting method and class used in WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/mac/CAAudioStreamDescription.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:

2017-04-04  Alexey Proskuryakov  <ap@apple.com>

        More build fixing.

        * platform/spi/mac/AVFoundationSPI.h:

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

        Do some minor FEColorMatrix code cleanup and optimization
        https://bugs.webkit.org/show_bug.cgi?id=170474

        Reviewed by Dean Jackson.

        Don't switch inside of a pixel processing loop; repeat the loop inside switch (filterType).
        
        Change matrix() and saturateAndHueRotate() to dereference the source pixels once, instead
        of multiple times, which is faster.
        
        This kind of code benefits from aligning things with spaces for readability, so do so,
        violating webkit style.
        
        Add some off-by-default performance logging code.

        Increases pixel processing performance from about 86ms per megapixel to 65ms per megapixel.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::matrix):
        (WebCore::saturateAndHueRotate):
        (WebCore::effectType):
        (WebCore::FEColorMatrix::platformApplySoftware):

2017-04-04  Brent Fulgham  <bfulgham@apple.com>

        Do not assert when CharacterData representing an Attr fires events
        https://bugs.webkit.org/show_bug.cgi?id=170454
        <rdar://problem/30979320>

        Reviewed by Ryosuke Niwa.

        Make the NoEventDispatchAssertion in CharacterData::notifyParentAfterChange conditional
        since Attr elements should be allowed to fire events.

        Tests: fast/dom/no-assert-for-malformed-js-url-attribute.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::notifyParentAfterChange):

2017-04-04  Youenn Fablet  <youenn@apple.com>

        LayoutTest webrtc/libwebrtc/descriptionGetters.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=169481

        Reviewed by Eric Carlson.

        No need to enumerate all network interfaces in most layout tests.
        Adding an Internals API for that in case we want to use TCP localhost candidates.

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


2017-04-04  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix: fix compilation error on Sierra.

        * platform/spi/mac/AVFoundationSPI.h:

2017-04-04  Jer Noble  <jer.noble@apple.com>

        Move AVSampleBufferDisplayLayer declarations into AVFoundationSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=170471

        Reviewed by Eric Carlson.

        Move the declaration of AVSampleBufferDisplayLayer (and related classes) into AVFoundationSPI.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer): Deleted.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/spi/mac/AVFoundationSPI.h:

2017-04-04  Saam Barati  <sbarati@apple.com>

        WebAssembly: JSWebAssemblyCallee should not be a JSCell
        https://bugs.webkit.org/show_bug.cgi?id=170135

        Reviewed by Michael Saboff.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::callerDOMWindow):

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

        Change Document's lastHandledUserGestureTimestamp to be a MonotonicTime
        https://bugs.webkit.org/show_bug.cgi?id=170468

        Reviewed by Zalan Bujtas.
        
        Change the double to MonotonicTime. No behavior change.

        * dom/Document.cpp:
        (WebCore::Document::updateLastHandledUserGestureTimestamp):
        * dom/Document.h:
        (WebCore::Document::lastHandledUserGestureTimestamp):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::documentHadRecentUserGesture):
        * loader/FrameLoader.cpp:
        (WebCore::shouldAskForNavigationConfirmation):

2017-04-04  Youenn Fablet  <youenn@apple.com>

        [Debug] ASSERT(!throwScope.exception()) on imported/w3c/web-platform-tests/fetch/api/cors/cors-preflight-status-worker.html
        https://bugs.webkit.org/show_bug.cgi?id=170395
        <rdar://problem/31394017>

        Reviewed by Mark Lam.

        No change of behavior.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredPromise::reject): Adding early ASSERT that creating an exception is happening correctly.

2017-04-04  Alexey Proskuryakov  <ap@apple.com>

        Rolling back the build fix, as it broke other builds.

        * platform/spi/mac/AVFoundationSPI.h:

2017-04-04  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        Rubber-stamped by Jer Noble.

        * platform/spi/mac/AVFoundationSPI.h:

2017-04-04  Tim Horton  <timothy_horton@apple.com>

        [Mac] -[WKWebView findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:] invokes the resultCollector with didWrap = NO even when it wraps
        https://bugs.webkit.org/show_bug.cgi?id=165801
        <rdar://problem/29649535>

        Reviewed by Wenson Hsieh.

        New API tests: WebKit2.FindInPageWrapping*

        * page/FrameTree.cpp:
        (WebCore::FrameTree::traverseNextWithWrap):
        (WebCore::FrameTree::traversePreviousWithWrap):
        (WebCore::FrameTree::traverseNextInPostOrderWithWrap):
        * page/FrameTree.h:
        Add CanWrap and DidWrap boolean enums, and add an optional out argument
        to traverse*WithWrap indicating whether a wrap actually occurred.

        * history/CachedPage.cpp:
        (WebCore::firePageShowAndPopStateEvents):
        * history/PageCache.cpp:
        (WebCore::destroyRenderTree):
        Adjust to the new CanWrap enum.
        
        * page/Page.cpp:
        (WebCore::incrementFrame):
        (WebCore::Page::findString):
        (WebCore::Page::findStringMatchingRanges):
        (WebCore::Page::rangeOfString):
        (WebCore::Page::findMatchesForText):
        (WebCore::Page::unmarkAllTextMatches):
        * page/Page.h:
        Adjust to the new CanWrap enum, and optionally plumb DidWrap through
        to callers of findString().

2017-04-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] PLATFORM(GTK) && !USE(COORDINATED_GRAPHICS_THREADED) is no longer possible
        https://bugs.webkit.org/show_bug.cgi?id=170458

        Reviewed by Carlos Alberto Lopez Perez.

        That is not supported anymore, so we can remove dead code from VideoSinkGStreamer.cpp

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::VideoRenderRequestScheduler):

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

        Unreviewed Windows build fix.

        * bindings/js/JSDOMGuardedObject.h:

2017-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Data interaction should register type identifiers in order of priority
        https://bugs.webkit.org/show_bug.cgi?id=170428
        <rdar://problem/30633296>

        Reviewed by Tim Horton.

        Currently, due to the shared logic for writing to a UIPasteboard (in the case of copy/paste) and the shared
        UIItemProvider-based pasteboard wrapper (in the case of data interaction), we don't enforce any particular
        ordering in which type identifiers are registered in the generated item provider. This is because
        -[UIPasteboard setItems:] only takes an unordered mapping of type identifiers to objects.

        To fix this, we introduce a separate way to set pasteboard data that first writes a list of object
        representations in order of priority (which is dependent on the content being interacted with) and then register
        individual type-data mappings at the end.

        Augmented existing API tests in DataInteractionTests to check for the existence and priority of type identifiers
        in the UIItemProviders created upon starting data interaction. Also adds a new unit test:
        DataInteractionTests.TextAreaToInput.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString):
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::writeSelection):
        * platform/Pasteboard.h:
        * platform/PasteboardWriterData.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/AbstractPasteboard.mm: Copied from Source/WebCore/platform/ios/AbstractPasteboard.h.

        Introduce WebPasteboardItemData, a wrapper around a list of objects representating the pasteboard data in order
        of priority, and a dictionary containing additional NSData blobs that contain data useful for private clients.

        (+[WebPasteboardItemData itemWithRepresentingObjects:additionalData:]):
        (-[WebPasteboardItemData initWithRepresentingObjects:additionalData:]):
        (-[WebPasteboardItemData representingObjects]):
        (-[WebPasteboardItemData additionalData]):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::richTextRepresentationsForPasteboardWebContent):
        (WebCore::PlatformPasteboard::writeObjectRepresentations):
        (WebCore::PlatformPasteboard::write):

        Tweaked to check whether the pasteboard responds to -setItemsFromObjectRepresentations:. If so, uses the
        PlatformPasteboard::writeObjectRepresentations codepath to write data to the pasteboard, respecting type
        priority.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard pasteboardTypes]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard setItemsFromObjectRepresentations:]):

        Replaces -setItems: with -setItemsFromObjectRepresentations:, which respects the priority of each object
        representation of the data in the pasteboard.

        (-[WebItemProviderPasteboard setItems:]): Deleted.

2017-04-03  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] Adapt place-content alignment shorthand to the new baseline syntax
        https://bugs.webkit.org/show_bug.cgi?id=170340

        Reviewed by David Hyatt.

        Now that the align-content and justify-content CSS properties are
        adapted to the new baseline-position CSS values syntax we can adapt the
        shorthand that controls such properties to the new syntax as well.

        No new tests, just adding some additional cases to the tests we already have.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::placeContentPropertyValue):
        * css/StyleProperties.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isContentDistributionKeyword):
        (WebCore::isContentPositionKeyword):
        (WebCore::isOverflowKeyword):
        (WebCore::getBaselineKeyword):
        (WebCore::consumeContentDistributionOverflowPosition):
        (WebCore::consumeSimplifiedContentPosition):

2017-04-03  Nan Wang  <n_wang@apple.com>

        AX: Expose link children when doing search predication on iOS
        https://bugs.webkit.org/show_bug.cgi?id=170424
        <rdar://problem/31413335>

        The children of links are accessible elements on iOS instead of the link itself, 
        so we should expose the children when doing predicated searches as well.

        Reviewed by Chris Fleizach.

        Test: accessibility/ios-simulator/ios-search-predicate-link-children.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):

2017-04-03  Jer Noble  <jer.noble@apple.com>

        No audio output for MediaStream-backed audio elements on iOS
        https://bugs.webkit.org/show_bug.cgi?id=170427

        Reviewed by Eric Carlson.

        The logic for setting the output timestamp offset in AudioSampleDataSource was reversed; instead of
        subtracting out the timestamp of the first pull request, it effectively doubled it.

        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pullSamplesInternal):

2017-04-03  Dave Hyatt  <hyatt@apple.com>

        Japanese fonts in vertical text should support synthesized italics
        https://bugs.webkit.org/show_bug.cgi?id=169301

        Reviewed by Simon Fraser.

        Updated test in fast/text/international.

        * platform/graphics/Font.cpp:
        (WebCore::Font::nonSyntheticItalicFont): Deleted.
        * platform/graphics/Font.h:
        Removed the non-synthetic italic font member, since it's not used.

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::glyphDataForNonCJKCharacterWithGlyphOrientation):
        Patched to ensure that a text-orientation-fallback font data is always
        returned in the synthetic oblique case, so that non-CJK and CJK are
        guaranteed to be broken up so that their slants can be applied differently.

        (WebCore::FontCascadeFonts::glyphDataForSystemFallback):
        (WebCore::FontCascadeFonts::glyphDataForNormalVariant):
        (WebCore::glyphDataForCJKCharacterWithoutSyntheticItalic): Deleted.
        Patched to no longer turn off synthetic oblique for CJK.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):
        Apply the correct italic transform to CJK when in vertical text.

2017-04-03  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r206744): CSS background-image in style attribute ignored when using createHTMLDocument method of DOM parsing
        https://bugs.webkit.org/show_bug.cgi?id=170285
        <rdar://problem/31378543>

        Reviewed by Andy Estes.

        r206744 caused up to stop trying to resolve relative URLs when trying to load an image
        referred to by CSS. We already try to resolve the relative URL when parsing the CSS
        property so this will usually work fine. However, in the case when the CSS property
        is parsed in detached document and then moved to another document, we will not have
        the complete URL.

        Test: fast/images/background-image-relative-url-changes-document.html

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::loadImage):

2017-04-03  Jeremy Jones  <jeremyj@apple.com>

        Do not set WebAVPlayerLayerView background to black in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=170132
        rdar://problem/30839278

        Reviewed by Tim Horton.

        No new tests because no behavior change.

        The black background on WebAVPlayerLayerView interferes with the fullscreen animation
        and has been removed.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenStandard):

2017-04-03  Antti Koivisto  <antti@apple.com>

        REGRESSION (r207669): FileMaker Pro Help pages do not render correctly
        https://bugs.webkit.org/show_bug.cgi?id=170402
        <rdar://problem/31004344>

        Reviewed by Simon Fraser.

        If a new stylesheet load is started from the load event the document.styleSheets does not
        always reflect the already loaded stylesheets.

        Test: fast/css/document-stylesheets-dynamic.html

        * style/StyleScope.cpp:
        (WebCore::Style::Scope::updateActiveStyleSheets):

            Remove an old optimization where we would not update active stylesheets if there were pending
            (head) stylesheet loads and they had not been updated already.
            This is probably not a valuable optimization anymore with the new lazy stylesheet update strategy.

        * style/StyleScope.h:

2017-04-03  Anders Carlsson  <andersca@apple.com>

        Tweak ApplePaySession API
        https://bugs.webkit.org/show_bug.cgi?id=170409
        rdar://problem/31405459

        Reviewed by Tim Horton.

        Rename "address" to "addressLines". Add "postalAddress". Reorder the ApplePayError constructor parameters.

        * Modules/applepay/ApplePayError.cpp:
        (WebCore::ApplePayError::create):
        (WebCore::ApplePayError::ApplePayError):
        * Modules/applepay/ApplePayError.h:
        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/PaymentRequest.h:

2017-04-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyEC::keySizeInBits(), ::platformGeneratePair()
        https://bugs.webkit.org/show_bug.cgi?id=170345

        Reviewed by Michael Catanzaro.

        Start implementing the libgcrypt-based platform bits of CryptoKeyEC.

        Implement keySizeInBits() by returning the appropriate size for this
        object's curve type. An assertion is added to ensure that this size
        matches the one that's returned by gcry_pk_get_nbits() for this
        object's EC key as represented by the m_platformKey gcry_sexp_t object.

        Implement platformGeneratePair() by constructing a genkey s-expression
        that requests a generation of an EC key for the specified curve type.
        The s-expression is then passed to gcry_pk_genkey(), and the public
        and private key data is then retrieved from the returned s-expression
        upon success and used to create the public and private CryptoKeyEC
        objects.

        The PlatformECKey type alias is changed to match gcry_sexp_t. The
        CryptoKeyEC destructor releases the gcry_sexp_t object through
        a PAL::GCrypt::HandleDeleter<gcry_sexp_t> instance.

        The method definitions in the CryptoKeyECGCrypt.cpp file are also
        sorted to match the declaration order in the header.

        No new tests -- current ones cover this sufficiently, but are not yet
        enabled due to other missing platform-specific SUBTLE_CRYPTO
        implementations.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::curveSize):
        (WebCore::curveName):
        (WebCore::CryptoKeyEC::~CryptoKeyEC):
        (WebCore::CryptoKeyEC::keySizeInBits):
        (WebCore::CryptoKeyEC::platformGeneratePair):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformExportRaw):
        (WebCore::CryptoKeyEC::platformAddFieldElements):
        (WebCore::CryptoKeyEC::platformExportSpki):
        * crypto/keys/CryptoKeyEC.h:

2017-04-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement AES_KW support
        https://bugs.webkit.org/show_bug.cgi?id=170274

        Reviewed by Michael Catanzaro.

        Implement the CryptoAlgorithmAES_KW::platform{Wrap,Unwrap}Key()
        functionality for configurations that use libgcrypt. This is done
        by leveraging the gcry_cipher_* APIs for the AES algorithm that's
        deducted appropriately from the key size and the AESWRAP cipher mode.

        No new tests -- current ones cover this sufficiently, but are not yet
        enabled due to other missing platform-specific SUBTLE_CRYPTO
        implementations.

        * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:
        (WebCore::gcryptWrapKey):
        (WebCore::gcryptUnwrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):

2017-04-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement AES_GCM support
        https://bugs.webkit.org/show_bug.cgi?id=170271

        Reviewed by Michael Catanzaro.

        Implement the CryptoAlgorithmAES_GCM::platform{Encrypt,Decrypt}
        functionality for configurations that use libgcrypt. This is done
        by leveraging the gcry_cipher_* APIs for the AES algorithm that's
        deducted appropriately from the key size and the GCM cipher mode.

        No new tests -- current ones cover this sufficiently, but are not yet
        enabled due to other missing platform-specific SUBTLE_CRYPTO
        implementations.

        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):

2017-04-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement PBKDF2 support
        https://bugs.webkit.org/show_bug.cgi?id=170270

        Reviewed by Michael Catanzaro.

        Implement the CryptoAlgorithmPBKDF2::platformDeriveBits() functionality
        for configurations that use libgcrypt. This is done by leveraging the
        gcry_kdf_derive() API, using GCRY_KDF_PBKDF2 as the preferred KDF
        along with the properly deducted SHA algorithm.

        No new tests -- current ones cover this sufficiently, but are not yet
        enabled due to other missing platform-specific SUBTLE_CRYPTO
        implementations.

        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::gcryptDeriveBits):
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):

2017-04-01  Simon Fraser  <simon.fraser@apple.com>

        Clean up touch event handler registration when moving nodes between documents
        https://bugs.webkit.org/show_bug.cgi?id=170384
        rdar://problem/30816694

        Reviewed by Chris Dumez.

        Make sure that Node::didMoveToNewDocument() does the correct unregistration on the
        old document, and registration on the new document for nodes with touch event listeners,
        and gesture event listeners. Touch "handler" nodes (those for overflow and sliders) are
        already correctly moved via renderer-related teardown.

        Add assertions that fire when removal was not complete.

        Use references in more places.

        Tests: fast/events/touch/ios/gesture-node-move-between-documents.html
               fast/events/touch/ios/overflow-node-move-between-documents.html
               fast/events/touch/ios/slider-node-move-between-documents.html
               fast/events/touch/ios/touch-node-move-between-documents.html

        * dom/EventNames.h:
        (WebCore::EventNames::gestureEventNames):
        * dom/Node.cpp:
        (WebCore::Node::willBeDeletedFrom):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::registerForTouchEvents):
        (WebCore::SliderThumbElement::unregisterForTouchEvents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::registerAsTouchEventListenerForScrolling):
        (WebCore::RenderLayer::unregisterAsTouchEventListenerForScrolling):

2017-04-03  Youenn Fablet  <youenn@apple.com>

        captureStream is getting black frames with webgl canvas
        https://bugs.webkit.org/show_bug.cgi?id=170325

        Reviewed by Dean Jackson.

        Test: fast/mediastream/captureStream/canvas3d.html

        Changing the webgl context to save buffers in case the canvas is captured.
        Adding a canvas changed notification in case of clear.
        In the future, we might want to change this notification and do it when endPaint or similar is called.

        Adding an Internals API to grab the RGBA equivalent of the next track frame.
        For that purpose, adding a bunch of WEBCORE_EXPORT.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::Source): Adding constraints support so that track settings
        getter actually transmits the width and height of the source.
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged): ensuring webgl canvas context keep their drawing buffer.
        * Modules/mediastream/MediaStreamTrack.h:
        * bindings/js/JSDOMGuardedObject.h:
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredPromise::resolve):
        (WebCore::DeferredPromise::reject):
        * dom/ActiveDOMCallback.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::captureStream):
        * html/ImageData.h:
        * html/ImageData.idl:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clear): ensuring canvas observers get notified in case of clear calls.
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::preserveDrawingBuffer): Added to allow canvas capture to update this property.
        * platform/MediaSample.h:
        (WebCore::MediaSample::getRGBAImageData): Added for internals API.
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::getRGBAImageData):
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::PixelBufferConformerCV::convert): Helper routine for getRGBAImageData.
        * platform/graphics/cv/PixelBufferConformerCV.h:
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::setSupportedConstraints):
        (WebCore::RealtimeMediaSourceSettings::setSupportedConstraits): Deleted.
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::initializeSettings):
        * platform/mediastream/openwebrtc/RealtimeAudioSourceOwr.h:
        * platform/mediastream/openwebrtc/RealtimeVideoSourceOwr.h:
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::initializeSettings):
        * testing/Internals.cpp:
        (WebCore::Internals::grabNextMediaStreamTrackFrame):
        (WebCore::Internals::videoSampleAvailable):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-04-03  Per Arne Vollan  <pvollan@apple.com>

        Implement stroke-miterlimit.
        https://bugs.webkit.org/show_bug.cgi?id=169078

        Reviewed by Dean Jackson.

        Support stroke-miterlimit for text rendering, see https://drafts.fxtf.org/paint/.

        Tests: fast/css/stroke-miterlimit-default.html
               fast/css/stroke-miterlimit-large.html
               fast/css/stroke-miterlimit-zero.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::strokeMiterLimit):
        (WebCore::RenderStyle::setStrokeMiterLimit):
        (WebCore::RenderStyle::initialStrokeMiterLimit):
        (WebCore::RenderStyle::setStrokeDashOffset):
        * rendering/style/RenderStyleConstants.cpp:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialStrokeDashArray):
        (WebCore::SVGRenderStyle::strokeDashArray):
        (WebCore::SVGRenderStyle::initialStrokeMiterLimit): Deleted.
        (WebCore::SVGRenderStyle::strokeMiterLimit): Deleted.
        (WebCore::SVGRenderStyle::setStrokeMiterLimit): Deleted.
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleStrokeData::StyleStrokeData):
        (WebCore::StyleStrokeData::operator==):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::hasSmoothStroke):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):

2017-04-03  Alejandro G. Castro  <alex@igalia.com>

        [OWR] Fix class structure for the OWR mock classes after last modifications
        https://bugs.webkit.org/show_bug.cgi?id=170173

        Reviewed by Youenn Fablet.

        In case of OWR MockRealtimeMediaSource inherits from
        RealtimeMediaSourceOwr, so we have to change some of the function
        interfaces.

        * platform/mock/MockRealtimeMediaSource.h:

2017-04-02  Alexey Proskuryakov  <ap@apple.com>

        Build fix for
        Add missing text styles
        https://bugs.webkit.org/show_bug.cgi?id=170295

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::cachedSystemFontDescription):
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):

2017-04-01  Zalan Bujtas  <zalan@apple.com>

        Long Arabic text in ContentEditable with css white-space=pre hangs Safari
        https://bugs.webkit.org/show_bug.cgi?id=170245

        Reviewed by Myles C. Maxfield.

        While searching for mid-word break, we measure the text by codepoints in a loop until the accumulated width > available width.
        When we see that the accumulated width for the individual codepoints overflows, we join the codepoints and re-measure them.
        These 2 widths could be considerably different for number of reasons (ligatures is a prime example). When we figure that
        the run still fits, we go back to the main loop (since we are not supposed to wrap the line here) and take the next codepoint.
        However this time we start the measurement from the last whitespace, so we end up remeasuring a potentially long chuck of text
        until we hit the wrapping point. This is way too expensive.
        This patch changes the logic so that we just go back to measuring individual codepoints until we hit the constrain again.  

        Covered by existing tests.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText): canUseSimpleFontCodePath() is just to mitigate the potential risk of regression and
        complex text is more likely to fall into this category. 

2017-04-01  Jon Lee  <jonlee@apple.com>

        Add missing text styles
        https://bugs.webkit.org/show_bug.cgi?id=170295
        rdar://problem/30219503

        Reviewed by Dean Jackson.

        Updated existing test to include new text styles.

        * css/CSSValueKeywords.in: Add title0 and title4.
        * platform/spi/cocoa/CoreTextSPI.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::cachedSystemFontDescription):
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):

2017-04-01  Dan Bernstein  <mitz@apple.com>

        [iOS] <input type=file> label should be specified using plural rules
        https://bugs.webkit.org/show_bug.cgi?id=170388

        Reviewed by Alexey Proskuryakov.

        * English.lproj/Localizable.strings: Updated using update-webkit-localizable-strings.

        * English.lproj/Localizable.stringsdict: Added an entry for the new key "%lu photo(s) and
          %lu video(s)", with plural rules covering all the different combinations in English.
          Other localizations may specify additional combinations as needed.

2017-04-01  Alexey Proskuryakov  <ap@apple.com>

        Rolling back <https://trac.webkit.org/r214697>, as it made WebKit2.DataDetectionReferenceDate time out.

        Was REGRESSION (r202472): Data Detection overwrites existing links in detected ranges
        https://bugs.webkit.org/show_bug.cgi?id=170365

        * editing/cocoa/DataDetection.mm:
        (WebCore::searchForLinkRemovingExistingDDLinks):

2017-04-01  Chris Dumez  <cdumez@apple.com>

        We should pause silent WebAudio rendering in background tabs
        https://bugs.webkit.org/show_bug.cgi?id=170299
        <rdar://problem/31289132>

        Reviewed by Eric Carlson.

        We should pause silent WebAudio rendering in background tabs since it uses CPU and is
        not observable by the user. Such silent WebAudio rendering seems to be used by
        doubleclick ads.

        Test: webaudio/silent-audio-interrupted-in-background.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::uninitialize):
        Have AudioContext register / unregister itself with the Document to get
        visibility change notifications, similarly to what HTMLMediaElement was
        already doing.

        (WebCore::AudioContext::visibilityStateChanged):
        Begin / End session interruption whenever the page visiblity changes.

        * Modules/webaudio/AudioContext.h:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/Document.cpp:
        (WebCore::Document::registerForVisibilityStateChangedCallbacks):
        (WebCore::Document::unregisterForVisibilityStateChangedCallbacks):
        (WebCore::Document::visibilityStateChanged):
        * dom/Document.h:
        * dom/Element.h:
        * dom/VisibilityChangeClient.h: Added.
        (WebCore::VisibilityChangeClient::~VisibilityChangeClient):
        * html/HTMLMediaElement.h:
        Introduce a new VisibilityChangeClient interface and have both AudioContext
        and HTMLMediaElement subclass it. Previously, the visibilityStateChanged()
        function was on Element but this prevented AudioContext from registering
        itself since AudioContext is not an Element.

2017-04-01  Dan Bernstein  <mitz@apple.com>

        [Cocoa] A couple of UI strings use three periods instead of an ellipsis
        https://bugs.webkit.org/show_bug.cgi?id=170386

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings: Updated using update-webkit-localizable-strings.

        * platform/LocalizedStrings.cpp:
        (WebCore::mediaElementLoadingStateText): Changed "Loading..." to "Loading…".

        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::contextMenuItemTagStyles): Changed "Styles..." to "Styles…".

2017-04-01  Dan Bernstein  <mitz@apple.com>

        Localizable strings files are out of date
        https://bugs.webkit.org/show_bug.cgi?id=170383

        Reviewed by Tim Horton.

        Ran update-webkit-localizable-strings.

        * English.lproj/Localizable.strings:

2017-04-01  Dan Bernstein  <mitz@apple.com>

        [Xcode] In engineering builds, linker warns about libwebrtc.dylib’s install name being invalid
        https://bugs.webkit.org/show_bug.cgi?id=170385

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig: Set WK_RELOCATABLE_FRAMEWORKS to YES like we do
          in some other projects’ DebugRelease.xcconfig. Engineering builds are always relocatable.
        * Configurations/WebCore.xcconfig: When WebCore is relocatable, tell the linker that it’s
          not going to be in the shared cache, even if its install name implies that it might be.

2017-04-01  Alexey Proskuryakov  <ap@apple.com>

        Rolling back http://trac.webkit.org/r214663 - memory corruption

        * Modules/streams/ReadableByteStreamInternals.js:
        (cloneArrayBuffer):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/StructuredClone.cpp:
        (WebCore::structuredCloneArrayBuffer):
        (WebCore::cloneArrayBufferImpl): Deleted.
        (WebCore::cloneArrayBuffer): Deleted.
        * bindings/js/StructuredClone.h:
        * bindings/js/WebCoreBuiltinNames.h:
        * testing/Internals.cpp:
        (WebCore::markerTypeFrom):
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::isLoadingFromMemoryCache):
        (WebCore::Internals::setImageFrameDecodingDuration):
        (WebCore::deferredStyleRulesCountForList):
        (WebCore::deferredGroupRulesCountForList):
        (WebCore::deferredKeyframesRulesCountForList):
        (WebCore::Internals::eventThrottlingBehaviorOverride):
        (WebCore::Internals::enableMockSpeechSynthesizer):
        (WebCore::Internals::rangeForDictionaryLookupAtLocation):
        (WebCore::Internals::nodesFromRect):
        (WebCore::Internals::layerIDForElement):
        (WebCore::Internals::setElementUsesDisplayListDrawing):
        (WebCore::Internals::setElementTracksDisplayListReplay):
        (WebCore::Internals::styleRecalcCount):
        (WebCore::Internals::compositingUpdateCount):
        (WebCore::Internals::setCaptionDisplayMode):
        (WebCore::Internals::endMediaSessionInterruption):
        (WebCore::Internals::postRemoteControlCommand):
        (WebCore::appendOffsets):
        (WebCore::Internals::scrollSnapOffsets):
        (WebCore::Internals::setShowAllPlugins):
        (WebCore::Internals::cloneArrayBuffer): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-03-31  Zalan Bujtas  <zalan@apple.com>

        <table>: Including <caption>, <thead> or <tbody> causes clipping across page breaks
        https://bugs.webkit.org/show_bug.cgi?id=170348
        <rdar://problem/24727151>

        Reviewed by David Hyatt.

        1. In RenderFlowThread::offsetFromLogicalTopOfFirstRegion() we need to take table section offset into account (they are skipped
        during the containing block traversal).
        2. Trigger paginated relayout when body is moved vertically due to caption/thead etc.

        Test: fast/multicol/table-section-page-break.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::offsetFromLogicalTopOfFirstRegion):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2017-03-31  Simon Fraser  <simon.fraser@apple.com>

        Rename DOMWindow's m_touchEventListenerCount to m_touchAndGestureEventListenerCount
        https://bugs.webkit.org/show_bug.cgi?id=170371

        Reviewed by Tim Horton.

        This count tracks touch and gesture event listeners, so name it appropriately.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.h:

2017-03-31  Simon Fraser  <simon.fraser@apple.com>

        When destroying a Node, assert that it's been removed from all the touch handler maps
        https://bugs.webkit.org/show_bug.cgi?id=170363
        rdar://problem/31377469

        Reviewed by Tim Horton.

        Assert that the Node has been removed from the touch handler maps in all documents on destruction.

        * dom/Document.h:
        (WebCore::Document::hasTouchEventHandlers):
        (WebCore::Document::touchEventTargetsContain):
        * dom/Node.cpp:
        (WebCore::Node::~Node):

2017-03-31  Alexey Proskuryakov  <ap@apple.com>

        Rolling back https://trac.webkit.org/r214689, as it caused many crashes.

        Was:
        Fix memory leak in CreateSessionDescriptionObserver::OnSuccess
        https://bugs.webkit.org/show_bug.cgi?id=170357

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

2017-03-31  Youenn Fablet  <youenn@apple.com>

        Fix memory leak in RealtimeVideoIncomingSource
        https://bugs.webkit.org/show_bug.cgi?id=170356

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::OnFrame): Adopting the newly created pointer.

2017-03-31  Andy Estes  <aestes@apple.com>

        REGRESSION (r202472): Data Detection overwrites existing links in detected ranges
        https://bugs.webkit.org/show_bug.cgi?id=170365
        <rdar://problem/29205721>

        Reviewed by Tim Horton.

        r202472 changed the node traversal in searchForLinkRemovingExistingDDLinks() to only
        consider nodes that are descendants of startNode, but we need to traverse all nodes between
        startNode and endNode to find existing non-DD links.

        As a result, we'd add a Data Detector link to the following snippet and make the original
        links un-clickable:

            <a href='#'>tomorrow</a> <a href='#'>night</a>

        Fix this by not specifying a stayWithin node when calling NodeTraversal::next(). The loop
        will terminate when we reach endNode.

        Updated WebKit2.DataDetectionReferenceDate API test.

        * editing/cocoa/DataDetection.mm:
        (WebCore::searchForLinkRemovingExistingDDLinks):

2017-03-31  Eric Carlson  <eric.carlson@apple.com>

        Incoming video source doesn't propogate frame rotation
        https://bugs.webkit.org/show_bug.cgi?id=170364

        Reviewed by Youenn Fablet.

        No new tests, the mock video source doesn't support rotation. Test will be added when
        this is fixed in https://bugs.webkit.org/show_bug.cgi?id=169822. The changes were 
        verified manually.

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::OnFrame): Convert frame rotation to sample
        orientation and swap width and height when necessary.
        (WebCore::RealtimeIncomingVideoSource::processNewSample):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:

2017-03-31  Chris Dumez  <cdumez@apple.com>

        Possible null dereference under SourceBuffer::sourceBufferPrivateDidReceiveSample()
        https://bugs.webkit.org/show_bug.cgi?id=159639

        Reviewed by Eric Carlson.

        Add a null check for trackBuffer.description before dereferencing as it seems
        it can be null.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2017-03-31  Youenn Fablet  <youenn@apple.com>

        Fix memory leak in CreateSessionDescriptionObserver::OnSuccess
        https://bugs.webkit.org/show_bug.cgi?id=170357

        Reviewed by Geoffrey Garen.

        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionSucceeded): Adopting the raw pointer parameter.

2017-03-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] WebCore::PlatformDisplay::terminateEGLDisplay causes a crash in libGLESv2.dll while processing atexit
        https://bugs.webkit.org/show_bug.cgi?id=170331

        Reviewed by Michael Catanzaro.

        WebCore::PlatformDisplay uses atexit to destruct EGL displays
        while exiting process. But, when the atexit will be processed,
        heap of libGLESv2.dll would be already destructed and causing a
        crash on Windows. Do not use atexit for Windows.

        AppleWin port does not use PlatformDisplay. Thus, it does not have
        this bug.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::initializeEGLDisplay): Do not use atexit for Windows.
        (WebCore::PlatformDisplay::shutDownEglDisplays): Added.
        * platform/graphics/PlatformDisplay.h: Added a declaration of shutDownEglDisplays.

2017-03-31  Yoav Weiss  <yoav@yoav.ws>

        Remove PRELOAD_DEBUG related code.
        https://bugs.webkit.org/show_bug.cgi?id=170352

        Reviewed by Youenn Fablet.

        As the PRELOAD_DEBUG related code stopped building and it seems like no one noticed,
        it seems safe to assume that we can remove that code. This patch removes it.

        No new tests as there's no functional change.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::clearPreloads):
        (WebCore::CachedResourceLoader::printPreloadStats): Deleted.

2017-03-31  Brady Eidson  <beidson@apple.com>

        Clean up the "StorageType" enum.
        https://bugs.webkit.org/show_bug.cgi?id=170349

        Reviewed by Tim Horton.

        - Make this `enum` into an `enum class`
        - Add a new type specific for "transient local storage"

        No new tests (No behavior change).

        * WebCore.xcodeproj/project.pbxproj:
        
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        
        * inspector/InspectorInstrumentation.h:
        
        * loader/EmptyClients.cpp:
        
        * storage/Storage.cpp:
        (WebCore::Storage::isDisabledByPrivateBrowsing):
        
        * storage/StorageArea.h:
        (): Deleted.
        
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        
        * storage/StorageType.h:
        (WebCore::isLocalStorage):

2017-03-31  Chris Dumez  <cdumez@apple.com>

        Unreviewed, Mark "HTML interactive form validation" as done.

        It is shipping in Safari 10.1.
 
        * features.json:

2017-03-31  Csaba Osztrogonác  <ossy@webkit.org>

        Mac cmake buildfix after r214666
        https://bugs.webkit.org/show_bug.cgi?id=170342

        Unreviewed buildfix.

        * PlatformMac.cmake:
        * testing/MockPreviewLoaderClient.h:

2017-03-31  Sam Weinig  <sam@webkit.org>

        Remove unneeded custom constructors include.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ios: Removed.
        * bindings/js/ios/TouchConstructors.cpp: Removed.

2017-03-31  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Check if the store exists before clearing it
        https://bugs.webkit.org/show_bug.cgi?id=170324
        <rdar://problem/31258505>

        Reviewed by Brent Fulgham.

        No new tests. Added a null check.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::clearInMemoryAndPersistentStore):
            Added a null check.

2017-03-31  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement cloneArrayBuffer in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=170008

        Reviewed by Youenn Fablet.

        Implemented cloneArrayBuffer based on existing structuredCloneArrayBuffer
        implementation. The code has been factorized so that both cloneArrayBuffer
        and structuredCloneArrayBuffer rely on the same code (which is basically
        the previous implementation of structuredCloneArrayBuffer + the ability
        to clone only a part of considered buffer).

        Added test to check cloneArrayBuffer behaviour.

        * Modules/streams/ReadableByteStreamInternals.js: Deleted cloneArrayBuffer JS implementation.
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals): Add cloneArrayBuffer private declaration.
        * bindings/js/StructuredClone.cpp:
        (WebCore::cloneArrayBufferImpl): Added (mostly based on previous structuredCloneArrayBuffer).
        (WebCore::cloneArrayBuffer): Added.
        (WebCore::structuredCloneArrayBuffer): Updated.
        * bindings/js/StructuredClone.h: Added cloneArrayBuffer declaration.
        * bindings/js/WebCoreBuiltinNames.h: Added cloneArrayBuffer declaration.
        * testing/Internals.cpp: Added support for testing cloneArrayBuffer.
        * testing/Internals.h: Added support for testing cloneArrayBuffer.
        * testing/Internals.idl: Added support for testing cloneArrayBuffer.

2017-03-31  Antoine Quint  <graouts@apple.com>

        [mac-wk1] LayoutTest media/modern-media-controls/airplay-button/airplay-button.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=168409
        <rdar://problem/30799198>

        Unreviewed. Yet more logging to determine under what circumstance ScriptedAnimationController gets suspended.

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

2017-03-30  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK+ build fix. Add missing ANGLE build targets
        to the build.

        * CMakeLists.txt:

2017-03-30  Simon Fraser  <simon.fraser@apple.com>

        Ensure that Node::willBeDeletedFrom() always removes touch event handlers from the document
        https://bugs.webkit.org/show_bug.cgi?id=170323
        rdar://problem/23647630

        Reviewed by Chris Dumez.

        There are two instances where nodes are registered as touch event handlers without
        having normal touch event listeners: slider thumb elements, and elements with overflow scrolling,
        on iOS.

        For such nodes, hasEventTargetData() will be false, but we want to ensure
        that they are removed from the Document's touchEventHandler set, so move the
        call to document.removeTouchEventHandler() outside of the conditional block.

        This should be cheap in most cases when the touchEventHandler is empty.

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

2017-03-30  Simon Fraser  <simon.fraser@apple.com>

        Minor cleanup checking for gesture event names
        https://bugs.webkit.org/show_bug.cgi?id=170319

        Reviewed by Tim Horton.

        Just use isGestureEventType() in a couple of places.

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

2017-03-30  Simon Fraser  <simon.fraser@apple.com>

        Rename a touch event function, and new touch region test results
        https://bugs.webkit.org/show_bug.cgi?id=170309
        rdar://problem/31329520

        Reviewed by Chris Dumez.

        Adapt to a naming change in WebKitAdditions.

        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListeners):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::calculateClipRects):

2017-03-30  Matt Rajca  <mrajca@apple.com>

        YouTube sometimes does not respect "user gesture" restriction for videos.
        https://bugs.webkit.org/show_bug.cgi?id=170297

        I discovered a code path that does not honor the "user gesture" requirement and playback is able to begin
        even though we have a restriction in place. When using Media Source Extensions, which YouTube does, we transition
        from a "Have Metadata" to a "Future Data" state that causes playback to begin, however, we never check
        if we have a playback restriction in place.

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):

2017-03-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r213764): Background image from sprite sheet incorrectly scaled
        https://bugs.webkit.org/show_bug.cgi?id=169547

        Reviewed by Simon Fraser.

        The bug happens when drawing only a rectangle of an image not the whole
        image. In BitmapImage::draw(), sizeForDrawing was calculated as the destRect
        scaled by the transformation which is applied to the GraphicsContext. Two
        problems with this approach. The first one is destRect can be only part of
        the image. The second problem is, the ratio destRect / srcRect is another
        scaling that needs to be considered.

        To fix this issue, first the base size has to be size of the image and not
        destRect.size(). Secondly, we need to scale this base size with the context
        transformation multiplied by the ratio destRect / srcRect. This scaling is
        exactly the same scaling which is calculated in subsamplingScale(). Finally
        we use this scaled size as the sizeForDrawing to send to the ImageDecoder.

        Test: fast/images/sprite-sheet-image-draw.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw): Fix the bug.
        (WebCore::BitmapImage::stopAnimation): Stops the async image decoding for animated images only.
        The decoding for large images will be stopped when BitmapImage::newFrameNativeImageAvailableAtIndex()
        is called and the decoding queue is idle.
        (WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex): Add image logging.
        * platform/graphics/BitmapImage.h: Move sourceURL() to the Image class.
        * platform/graphics/GraphicsContext.cpp: Pass imagePaintingOptions.m_decodingMode to Image::drawTiled().
        (WebCore::GraphicsContext::drawTiledImage): Pass imagePaintingOptions.m_decodingMode) to Image::drawTiled().
        * platform/graphics/Image.cpp:
        (WebCore::Image::sourceURL): Moved from BitmapImage.
        (WebCore::Image::drawTiled): Add a DecodingMode argument instead of calling always with DecodingMode::Synchronous.
        * platform/graphics/Image.h:
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::cacheAsyncFrameNativeImageAtIndex): Add image logging.
        (WebCore::ImageFrameCache::startAsyncDecodingQueue): Ditto,
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Ditto.
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue): Ditto.
        (WebCore::ImageFrameCache::sourceURL): A helper function to avoid checking the value of m_image.
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/NativeImage.h: Rename subsamplingScale() to nativeImageDrawingScale() and return image scaling instead.
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::nativeImageDrawingScale): Ditto.
        (WebCore::subsamplingScale): Deleted.
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::nativeImageDrawingScale): Ditto.
        (WebCore::subsamplingScale): Deleted.
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::nativeImageDrawingScale): Ditto.
        (WebCore::subsamplingScale): Deleted.

2017-03-30  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Assertion failure in InspectorStyleProperty::setRawTextFromStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=170279
        <rdar://problem/30200492>

        Reviewed by David Hyatt.

        The SourceRange for a CSSPropertySourceData should be relative to the start
        of the declaration body, not the start of the StyleSheetHandler’s parsed
        text. This only affected the ranges of unparsed (parsedOK == false) properties
        lacking a trailing semi-colon.

        This patch doesn't change the behavior of InspectorStyleSheet other than
        silencing an irksome assert, as String::substring does a safety check on
        the passed in length.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::fixUnparsedProperties):

2017-03-30  Youenn Fablet  <youenn@apple.com> and Jon Lee <jonlee@apple.com>

        Clean up RTCDataChannel
        https://bugs.webkit.org/show_bug.cgi?id=169732

        Reviewed by Chris Dumez.

        Test: webrtc/datachannel/datachannel-event.html
              webrtc/datachannel/bufferedAmountLowThreshold.html

        Making RTCDataChannel interface closer to the spec updating implementation accordingly.
        See https://w3c.github.io/webrtc-pc/#rtcdatachannel.
        In particular adding RTCDataChannelEvent constructor, and missing bufferedAmount related attributes.
        Doing some additional cleaning refactoring.

        Making bufferedAmountIsDecreasing take a bufferedAmount argument so that we get the actual value passed by
        libwebrtc without needing to get it from the libwebrtc network thread again.
        In the future, we should store the bufferedAmount value in RTCDataChannel and update its value on each libwebrtc
        OnBufferedAmountChange. Special treatment may be needed when the data channel is closed, in which case the bufferedAmount should just be
        updated to increase in the send method.

        Added some FIXMEs as RTCDataChannel is not aligned with the spec related to send and bufferedAmount.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::send):
        (WebCore::RTCDataChannel::close):
        (WebCore::RTCDataChannel::didChangeReadyState):
        (WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCDataChannelEvent.cpp:
        (WebCore::RTCDataChannelEvent::create):
        (WebCore::RTCDataChannelEvent::RTCDataChannelEvent):
        (WebCore::RTCDataChannelEvent::channel):
        * Modules/mediastream/RTCDataChannelEvent.h:
        * Modules/mediastream/RTCDataChannelEvent.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::OnStateChange):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addDataChannel):
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * platform/mediastream/RTCDataChannelHandler.h:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mediastream/RTCDataChannelState.h: Added.
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp:
        (WebCore::RTCDataChannelHandlerMock::setClient):
        (WebCore::RTCDataChannelHandlerMock::close):
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::IceConnectionNotifier::IceConnectionNotifier):
        (WebCore::SignalingStateNotifier::SignalingStateNotifier):
        (WebCore::DataChannelStateNotifier::DataChannelStateNotifier):
        * platform/mock/RTCNotifiersMock.h:

2017-03-30  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] Adapt content-alignment properties to the new baseline syntax
        https://bugs.webkit.org/show_bug.cgi?id=170262

        Reviewed by David Hyatt.

        The baseline-position syntax has changed recently, so we need to update
        the CSS properties using the old syntax. This patch address only the
        content-alignment (align-content and justify-content).

        I used this patch to adapt the implementation of the parsing logic for
        these properties to the new Blink's CSS Parsing Design.

        The new baseline syntax is "[first | last ]? baseline" which implies
        modifying the parsing and computed value logic.

        There are several layout tests affected by this change, so I'll update
        them accordingly.

        No new tests, just added/modified some cases to the tests we
        already have using the new baseline values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        * css/CSSContentDistributionValue.cpp:
        (WebCore::CSSContentDistributionValue::customCSSText):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator ItemPosition):
        (WebCore::CSSPrimitiveValue::operator ContentPosition):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isBaselineKeyword):
        (WebCore::consumeBaselineKeyword):
        (WebCore::consumeContentDistributionOverflowPosition):
        (WebCore::consumeSelfPositionOverflowPosition):

2017-03-30  James Craig  <jcraig@apple.com>

        AX: Expose a new AXSubrole for explicit ARIA "group" role
        https://bugs.webkit.org/show_bug.cgi?id=169810
        <rdar://problem/31039693>

        Reviewed by Chris Fleizach.

        Split GroupRole into generics (GroupRole) and explicit groups 
        (ApplicationGroupRole) so we can expose a subrole on the explicit 
        groups. Account for the change in ARIA Tree and Menu hierachies. 
        Update the computedRoleValue for WebKit Inspector usage, too.

        Updated existing tests.

        Test: accessibility/list-detection2.html:
        Test: accessibility/roles-computedRoleString.html:
        Test: inspector/dom/getAccessibilityPropertiesForNode.html:
        Test: inspector/dom/highlightFrame.html:
        Test: inspector/dom/highlightSelector.html:

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::helpText):
        (WebCore::AccessibilityNodeObject::hierarchicalLevel):
        (WebCore::AccessibilityNodeObject::remapAriaRoleDueToParent):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibleNameDerivesFromContent):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::computedRoleString):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):

2017-03-30  Chris Dumez  <cdumez@apple.com>

        We are spending a lot of time bzero'ing AudioChannel buffers on uni-watch.com
        https://bugs.webkit.org/show_bug.cgi?id=170288
        <rdar://problem/31289132>

        Reviewed by Eric Carlson.

        We are spending a lot of time bzero'ing AudioChannel buffers on uni-watch.com due
        to doubleclick ads using WebAudio with a 0-gain GainNode. We should optimize the
        0-gain case as much as possible.

        No new tests, only an optimization.

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::processIfNecessary):
        Drop call to unsilenceOutputs() before calling AudioNode::process(). The AudioChannel
        API already takes care of clearing its 'silent' flag whenever its buffer changes so
        there should be no need to explicitly clearing the 'silent' flag before calling
        process(). This was causing us to zero out buffers that were already filled with
        zeros because AudioChannel::zero() would no longer return early, not knowing the
        channel is already silent. This reduces the number of bzero() calls by ~3.5x on
        uni-watch.com (from 100 calls every ~20ms to 100 calls every ~70ms.

        * Modules/webaudio/AudioNode.h:
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::render):
        Avoid clamping the values in the channel buffer if the channel is silent since this
        will have no effect (given that the buffer only contains zeros).

2017-03-30  Eric Carlson  <eric.carlson@apple.com>

        [Crash] WebCore::AudioBuffer::AudioBuffer don't checking illegal value
        https://bugs.webkit.org/show_bug.cgi?id=169956

        Reviewed by Youenn Fablet.

        Test: webaudio/audiobuffer-crash.html

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::AudioBuffer): Invalidate the object and return early if the channel 
        array allocation fails.
        (WebCore::AudioBuffer::AudioBuffer): Ditto.
        (WebCore::AudioBuffer::invalidate): Invalidate the object.
        * Modules/webaudio/AudioBuffer.h:

2017-03-30  Antoine Quint  <graouts@apple.com>

        [mac-wk1] LayoutTest media/modern-media-controls/airplay-button/airplay-button.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=168409
        <rdar://problem/30799198>

        Unreview. Print the backtrace when we suspend scripted animations.

        * page/Page.cpp:
        (WebCore::Page::suspendScriptedAnimations):

2017-03-30  Antoine Quint  <graouts@apple.com>

        [mac-wk1] LayoutTest media/modern-media-controls/airplay-button/airplay-button.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=168409
        <rdar://problem/30799198>

        Unreview. Pring the backtrace when we suspend ScriptedAnimationController.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::suspend):

2017-03-30  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Invalid placard icon is not visible for short video
        https://bugs.webkit.org/show_bug.cgi?id=170277
        <rdar://problem/31327955>

        Reviewed by Eric Carlson.

        Make the minimum dimension needed to display a placard icon configurable and let the
        invalid placard use a 50pt dimension. We also make a drive-by fix to reset "text-align"
        for media controls as having a "text-align: center" inherited value would mess up
        positioning of the placard icon and make it flush to the right of the placard.

        Test: media/modern-media-controls/invalid-placard/invalid-placard-constrained-metrics.html

        * Modules/modern-media-controls/controls/invalid-placard.js:
        (InvalidPlacard):
        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls):
        * Modules/modern-media-controls/controls/placard.js:
        (Placard.prototype.layout):

2017-03-30  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Register missing algorithms in CryptoAlgorithmRegistry::platformRegisterAlgoritmhs()
        https://bugs.webkit.org/show_bug.cgi?id=170273

        Reviewed by Michael Catanzaro.

        * crypto/gcrypt/CryptoAlgorithmRegistryGCrypt.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Add registerAlgorithm<> calls for AES_CFB, AES_GCM, ECDH and
        PBKDF2 algorithms.

2017-03-30  Brent Fulgham  <bfulgham@apple.com>

        Remove unused MediaControlsApple implementation
        https://bugs.webkit.org/show_bug.cgi?id=170258
        <rdar://problem/31331056>

        Reviewed by Eric Carlson.

        Remove dead code related to old media controls. We switched to HTML5-based media controls
        several years ago.

        No new tests. Removing this dead code should have no change in behavior.

        * WebCore.xcodeproj/project.pbxproj: Remove unused files.
        * dom/EventListener.h: Remove unused event type.
        * html/shadow/MediaControlsApple.cpp: Removed.
        * html/shadow/MediaControlsApple.h: Removed.

2017-03-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] ImageCairoWin.cpp: error C2660: 'WebCore::BitmapImage::draw': function does not take 6 arguments
        https://bugs.webkit.org/show_bug.cgi?id=170275

        Reviewed by Said Abou-Hallawa.

        Apply the similar change of ImageCGWin.cpp of r214450 to ImageCairoWin.cpp.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize): Pass DecodingMode::Synchronous to Image::draw().
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): Ditto.

2017-03-27  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Clamp the number of autorepeat tracks
        https://bugs.webkit.org/show_bug.cgi?id=170120

        Reviewed by Manuel Rego Casasnovas.

        As suggested by the specs we do clamp the maximum number of tracks per grid in order to
        minimize potential OOM situations. However we were not considering the case of the recently
        added auto repeat syntax. Abnormally huge values for the width/height on the grid container
        could lead to a number of auto repeat tracks higher than the maximum.

        A new API was added to Internals in order to test limits without having to create huge
        grids. This new API allows clients to set an arbitrary limit to the number of tracks. The
        addition of this new API forced us to add GridPosition.cpp to the project to define the
        global variable we use for testing. We took the chance to move part of the implementation
        from the header file to the source file.

        Last but not least, several new ASSERTs were added to Grid.cpp implementation to ensure that
        we do not surpass the grid track limits.

        Test: fast/css-grid-layout/grid-auto-repeat-huge-grid.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeGridTrackRepeatFunction):
        * rendering/Grid.cpp:
        (WebCore::Grid::ensureGridSize): Added ASSERT.
        (WebCore::Grid::setSmallestTracksStart): Ditto.
        (WebCore::Grid::setAutoRepeatTracks): Ditto.
        (WebCore::Grid::setAutoRepeatEmptyColumns): Ditto.
        (WebCore::Grid::setAutoRepeatEmptyRows): Ditto.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::clampAutoRepeatTracks): New method.
        (WebCore::RenderGrid::placeItemsOnGrid): Clamp the number of auto repeat tracks before
        passing them to the Grid.
        * rendering/RenderGrid.h:
        * rendering/style/GridArea.h:
        (WebCore::GridSpan::GridSpan):
        * rendering/style/GridPosition.cpp: Added.
        (WebCore::GridPosition::setExplicitPosition):
        (WebCore::GridPosition::setAutoPosition):
        (WebCore::GridPosition::setSpanPosition):
        (WebCore::GridPosition::setNamedGridArea):
        (WebCore::GridPosition::integerPosition):
        (WebCore::GridPosition::namedGridLine):
        (WebCore::GridPosition::spanPosition):
        (WebCore::GridPosition::operator==):
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::shouldBeResolvedAgainstOppositePosition):
        (WebCore::GridPosition::max):
        (WebCore::GridPosition::min):
        (WebCore::GridPosition::setMaxPositionForTesting):
        (WebCore::GridPosition::setExplicitPosition): Deleted.
        (WebCore::GridPosition::setAutoPosition): Deleted.
        (WebCore::GridPosition::setSpanPosition): Deleted.
        (WebCore::GridPosition::setNamedGridArea): Deleted.
        (WebCore::GridPosition::integerPosition): Deleted.
        (WebCore::GridPosition::namedGridLine): Deleted.
        (WebCore::GridPosition::spanPosition): Deleted.
        (WebCore::GridPosition::operator==): Deleted.
        * rendering/style/GridPositionsResolver.cpp:
        (WebCore::GridPositionsResolver::explicitGridColumnCount):
        (WebCore::GridPositionsResolver::explicitGridRowCount):
        * testing/Internals.cpp:
        (WebCore::Internals::setGridMaxTracksLimit):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-03-29  Ryosuke Niwa  <rniwa@webkit.org>

        Disconnecting a HTMLObjectElement does not always unload its content document
        https://bugs.webkit.org/show_bug.cgi?id=169606

        Reviewed by Andy Estes.

        When removing a node, we first disconnect all subframes then update the focused element as we remove each child.
        However, when the removed element is a focused object element with a content document, removeFocusedNodeOfSubtree
        can update the style tree synchronously inside Document::setFocusedElement, and reload the document.

        Avoid this by instantiating a SubframeLoadingDisabler on the parent of the focused element.

        Test: fast/dom/removing-focused-object-element.html

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

2017-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate to kCTFontCSSWidthAttribute
        https://bugs.webkit.org/show_bug.cgi?id=170265

        Reviewed by Darin Adler.

        Previously, we were mapping from Core Text widths to CSS widths in WebKit.
        However, on some OSes, Core Text can directly tell us what the CSS width
        value is.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::getCSSAttribute):
        (WebCore::capabilitiesForFontDescriptor):
        * platform/spi/cocoa/CoreTextSPI.h:

2017-03-28  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to dump touch event regions for testing
        https://bugs.webkit.org/show_bug.cgi?id=170209
        <rdar://problem/31309258>

        Reviewed by Tim Horton.

        Expose internals.touchEventRectsForEvent() and internals.passiveTouchEventListenerRects(), which
        fetch data via Page.

        Because the regions are normally updated on a timer, we have to force an eager update via Document::updateTouchEventRegions().

        Test: fast/events/touch/ios/touch-event-regions.html

        * page/Page.cpp:
        (WebCore::Page::nonFastScrollableRects):
        (WebCore::Page::touchEventRectsForEvent):
        (WebCore::Page::passiveTouchEventListenerRects):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::touchEventRectsForEvent):
        (WebCore::Internals::passiveTouchEventListenerRects):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-03-29  Zalan Bujtas  <zalan@apple.com>

        RenderBlockFlow::addFloatsToNewParent should check if float is already added to the object list.
        https://bugs.webkit.org/show_bug.cgi?id=170259
        <rdar://problem/31300584>

        Reviewed by Simon Fraser.

        r210145 assumed that m_floatingObjects would simply ignore the floating box if it was already in the list.  

        Test: fast/block/float/placing-multiple-floats-crash.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addFloatsToNewParent):

2017-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Try to normalize variation ranges
        https://bugs.webkit.org/show_bug.cgi?id=170119

        Unreviewed.

        Addressing post-review comment.

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

2017-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Try to normalize variation ranges
        https://bugs.webkit.org/show_bug.cgi?id=170119

        Reviewed by Simon Fraser.

        TrueType GX-style variation fonts use one particular scale for values on their
        weight/width/slope axes - usually the values lie between -1 and 1 on that scale.
        However, OpenType 1.8-style fonts use the CSS scale for values on these axes.
        For the purposes of font selection, these values need to lie on the same scale.
        However, when font selection is completed and the variation values are actually
        being applied to the fonts, values which lie on the font's actual scale need to
        be applied. This patch adds normalize*() and denormalize*() functions to perform
        both of these operations. 

        The conversion itself between the two scales isn't an exact mapping. Mapping
        slope is just a linear relationship with 0deg <=> 0 and 20deg <=> 1 (as per the
        CSS Fonts spec). Mapping widths is similar, it uses a 2-component piecewise
        linear relationship which includes the values given in the Microsoft OpenType
        spec for the OS/2 table's usWidthClass field. Weights are more difficult, so I
        plotted the CSS weights and the GX-style weights for every style of San
        Francisco, saw that the relationship appears to be linear, and ran a linear
        regression to compute the line equation.

        As for the actual discrimination of determining whether a font is a GX-style
        font or not, we can use the presence of the 'STAT' table. This table didn't
        exist when GX fonts were being created, and OpenType 1.8 variable fonts are
        required to have this table.

        Facebook uses the string ".SFNSText" in their @font-face blocks. This font is
        a variation font, but uses the GX-style values. Facebook asks us to create
        this font with a weight of 700, and because the values in the font are around
        1.0, we were erroneously thinking that the font wasn't bold, so we were then
        applying synthetic bold. This was causing text on facebook to look fuzzy and
        ugly.

        Test: fast/text/variations/font-selection-properties-expected.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::isGXVariableFont):
        (WebCore::normalizeWeight):
        (WebCore::normalizeSlope):
        (WebCore::denormalizeWeight):
        (WebCore::denormalizeWidth):
        (WebCore::denormalizeSlope):
        (WebCore::normalizeWidth):
        (WebCore::preparePlatformFont): Instead of using FontSelectionValues for the
        intermediate values, we should use floats instead. This is because
        FontSelectionValues are fixed-point numbers with the denominator having 2 bits.
        When using this data type to represent values on the GX scale, which are usually
        between 0 and 1, you lose a lot of fidelity. Instead, our intermediate
        calculations should be done with floats, and converted to FontSelectionValues at
        the end when they are representative of values on the CSS scale.
        (WebCore::stretchFromCoreTextTraits):
        (WebCore::fontWeightFromCoreText):
        (WebCore::extractVariationBounds):
        (WebCore::variationCapabilitiesForFontDescriptor):
        (WebCore::capabilitiesForFontDescriptor):

2017-03-29  Saam Barati  <sbarati@apple.com>

        LinkBuffer and ExecutableAllocator shouldn't have anything to do with VM
        https://bugs.webkit.org/show_bug.cgi?id=170210

        Reviewed by Mark Lam.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::compileSelector):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):

2017-03-29  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] Adapt self-alignment properties to the new baseline syntax
        https://bugs.webkit.org/show_bug.cgi?id=170235

        Reviewed by David Hyatt.

        The baseline-position syntax has changed recently, so we need to update
        the CSS properties using the old syntax. This patch address only the
        self-alignment (align-self and justify-self) and default-alignment
        (align-items and justify-items).

        The content-distribution properties (align-content and justify-content)
        will be updated in a follow up patch.

        The new baseline syntax is "[first | last ]? baseline" which implies
        modifying the parsing and computed value logic.

        There are several layout tests affected by this change, so I'll update
        them accordingly.

        No new tests, just added/modified some cases to the tests we already have using the new baseline values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForItemPositionWithOverflowAlignment):
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBaselineKeyword):
        (WebCore::consumeSelfPositionOverflowPosition):

2017-03-29  Chris Dumez  <cdumez@apple.com>

        Animated SVG images are not paused in pages loaded in the background
        https://bugs.webkit.org/show_bug.cgi?id=170043
        <rdar://problem/31234412>

        Reviewed by Simon Fraser.

        Animated SVG images are not paused in pages loaded in the background. We rely
        on FrameView::isOffscreen() to stop images animations in background tab (See
        logic in RenderElement's shouldRepaintForImageAnimation()). This works fine
        if a tab is visble and then becomes hidden (i.e. by switching to another
        tab). However, in the case where the tab gets loaded while in the background
        (e.g. opening link in new background tab, or session restore), then the
        animations would not be paused, due to FrameView::isOffscreen() erroneously
        returning false in this case.

        Normally, the following chain of events happens:
        - Page is visible, we construct a main frame and its FrameView for loading
          the page. When a FrameView is constructed, we call FrameView::show() to
          make it visible. Then, if the page becomes non-visible, we call
          Page::setIsVisibleInternal(false) which calls FrameView::hide(). After
          that, FrameView::isOffscreen() correctly returns true because we properly
          called FrameView::hide().

        However, when doing a load while the Page is hidden, the following was
        happening:
        - Page is not visible, we call Page::setIsVisibleInternal(false) which tries
          to call FrameView::hide() for the main frame but it does not have a FrameView
          yet (because the load has not started). We start the load and end up creating
          a FrameView. The FrameView constructor was calling FrameView::show()
          unconditionally, thus making the FrameView think is visible, even though its
          page isn't. At this point, FrameView::isOffscreen() was returning false
          and animations would keep running, even though the page is not visible.

        To address the issue, we now call FrameView::show() in FrameView::create() only
        if the Page is actually visible, instead of calling it unconditionally. If the
        page ever becomes visible, Page::setIsVisibleInternal(true) will be called and
        it will take care of calling FrameView::show() then.

        Tests: svg/animations/animations-paused-in-background-page-iframe.html
               svg/animations/animations-paused-in-background-page.html

        * page/FrameView.cpp:
        (WebCore::FrameView::create):

2017-03-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Links with empty hrefs should not be drag sources
        https://bugs.webkit.org/show_bug.cgi?id=170241
        <rdar://problem/31305505>

        Reviewed by Tim Horton.

        The m_dragSouceAction member of DragController represents the drag source actions that are available to the
        document, rather than the available actions given the dragging element. Thus, it is not correct to only check
        that (m_dragSourceAction & DragSourceActionAttachment) before proceeding down the attachment dragging codepath.
        This should be additionally guarded with a check that the element being dragged is, in fact, an attachment
        element.

        New API test (see Tools/ChangeLog).

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

2017-03-29  Jeremy Jones  <jeremyj@apple.com>

        WebVideoFullscreenInterfaceAVKit needs a strong self ref before dispatching to the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=170129

        Reviewed by David Kilzer.

        No new tests becuase no new behavior.

        Hold a strong reference to WebVideoFullscreenInterfaceAVKit when dispatching to the main thread.
        Make WebVideoFullscreenInterfaceAVKit safe to retain from non-main thread.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):

2017-03-29  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Add a Handle<> class to help with GCrypt object lifetime control
        https://bugs.webkit.org/show_bug.cgi?id=170238

        Reviewed by Michael Catanzaro.

        The platform-specific CryptoAlgorithmHMAC implementation is modified
        to showcase the GCrypt::Handle<> use. HandleDeleter<gcry_mac_hd_t>
        is added accordingly.

        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::calculateSignature):

2017-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Variation fonts: Make sure that feature detection and preprocessor macros are right
        https://bugs.webkit.org/show_bug.cgi?id=169518

        Reviewed by Simon Fraser.

        When I added variable fonts support, I made all OSes parse the newly accepted values,
        instead of just the OSes which support variable fonts.

        Test: fast/text/font-variations-feature-detection.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontStretch):
        (WebCore::consumeFontStyle):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::divisibleBy100):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):

2017-03-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Controls bar may disappear while captions menu is visible (redux)
        https://bugs.webkit.org/show_bug.cgi?id=170239
        <rdar://problem/31320685>

        Reviewed by Dean Jackson.

        We did some work in webkit.org/b/168751 to prevent the controls bar from disappearing while the
        captions menu is visible. But there were two cases where the behavior was not as intended:

            1. the controls bar would hide upon exiting the video.
            2. clicking on the controls bar while the caption panel is up would hide the controls bar
               as well as the captions panel.

        Instead of determining that the "userInteractionEnabled" property being set to "false" is indicative
        of secondary UI, such as the tracks panel, being attached to the controls bar, we now have an
        explicit property to specify this. Now, when "hasSecondaryUIAttached" is "true", we prevent the
        controls bar from fading when exiting the media.

        Additionally, when dismissing the tracks panel, we check whether a mouse event lead to this and check
        if the mouse was positioned over the controls bar. If that is the case, we no longer hide the controls
        bar and only dismiss the tracks panel.

        Test: media/modern-media-controls/tracks-panel/tracks-panel-controls-bar-remains-visible-after-clicking-over-it.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.set userInteractionEnabled):
        (ControlsBar.prototype.handleEvent):
        (ControlsBar.prototype._autoHideTimerFired):
        * Modules/modern-media-controls/controls/macos-media-controls.js:
        (MacOSMediaControls.prototype.showTracksPanel):
        (MacOSMediaControls.prototype.hideTracksPanel):

2017-03-29  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Volume slider is initially empty
        https://bugs.webkit.org/show_bug.cgi?id=170237
        <rdar://problem/31319077>

        Reviewed by Dean Jackson.

        Fixing fallout from https://bugs.webkit.org/show_bug.cgi?id=167935 where we changed the behavior
        of layout() to happen prior to a commit. In this one instance, we were overriding layout() to run
        after a commit, so we now override commit(). Otherwise, the <canvas> that we draw the volume slider
        into would have its "width" and "height" properties set after we drew, which would clear the <canvas>.

        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.commit):
        (Slider.prototype.layout): Deleted.

2017-03-29  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Move over empty GnuTLS-based SUBTLE_CRYPTO implementation files
        https://bugs.webkit.org/show_bug.cgi?id=170232

        Reviewed by Michael Catanzaro.

        Migrate the GnuTLS SUBTLE_CRYPTO implementation files to the gcrypt/
        directory. The implementation files themselves are no-op, so this is
        a simple move-and-rename operation that will enable proceeding with
        the libgcrypt-based implementation of SUBTLE_CRYPTO functionality.

        No change in behavior. The SUBTLE_CRYPTO feature should build as it
        did before, and the implementations are empty anyway.

        * PlatformGTK.cmake:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmAES_CBCGnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmAES_CFBGnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmAES_GCMGnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmAES_KWGnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmECDHGnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmPBKDF2GnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmRSAES_PKCS1_v1_5GnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp: This one already exists.
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmRSA_OAEPGnuTLS.cpp.
        * crypto/gcrypt/CryptoAlgorithmRegistryGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoAlgorithmRegistryGnuTLS.cpp.
        * crypto/gcrypt/CryptoKeyECGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoKeyECGnuTLS.cpp.
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/CryptoKeyRSAGnuTLS.cpp.
        * crypto/gcrypt/SerializedCryptoKeyWrapGCrypt.cpp: Renamed from Source/WebCore/crypto/gnutls/SerializedCryptoKeyWrapGnuTLS.cpp.
        * crypto/gnutls/CryptoAlgorithmRSASSA_PKCS1_v1_5GnuTLS.cpp: Removed.

2017-03-29  Zan Dobersek  <zdobersek@igalia.com>

        [GnuTLS] Remove unused CryptoDigestGnuTLS, CryptoAlgorithmHMACGnuTLS implementation files
        https://bugs.webkit.org/show_bug.cgi?id=170231

        Reviewed by Michael Catanzaro.

        * crypto/gnutls/CryptoAlgorithmHMACGnuTLS.cpp: Removed. The GCrypt counterpart
        is already in use, and this file wasn't even being built.

2017-03-29  Youenn Fablet  <youenn@apple.com>

        Move DTMF WebRTC extension behind its own compile flag
        https://bugs.webkit.org/show_bug.cgi?id=170226

        Reviewed by Eric Carlson.

        Moving RTCDTMFSender and RTCDTMFToneChangeEvent behinf a WEB_RTC_DTMF compile flag.
        This compile flag is not set on any supported platform yet.
        Disabling related test and updated test expectations.

        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        * Modules/mediastream/RTCDTMFToneChangeEvent.h:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * platform/mediastream/RTCDTMFSenderHandler.h:
        * platform/mediastream/RTCDTMFSenderHandlerClient.h:

2017-03-29  Antoine Quint  <graouts@apple.com>

        [mac-wk1] LayoutTest media/modern-media-controls/airplay-button/airplay-button.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=168409
        <rdar://problem/30799198>

        Reviewed by Dean Jackson.

        Add a new internals setting to opt into ScriptedAnimationController logging through DOM events dispatched
        through the document. This should allow this flaky test to get information as to why the frame isn't
        firing when it times out.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::suspend):
        (WebCore::ScriptedAnimationController::resume):
        (WebCore::ScriptedAnimationController::addThrottlingReason):
        (WebCore::ScriptedAnimationController::removeThrottlingReason):
        (WebCore::ScriptedAnimationController::registerCallback):
        (WebCore::ScriptedAnimationController::cancelCallback):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::dispatchLoggingEventIfRequired):
        * dom/ScriptedAnimationController.h:
        * page/Settings.in:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::shouldDispatchRequestAnimationFrameEvents):
        (WebCore::InternalSettings::setShouldDispatchRequestAnimationFrameEvents):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-03-28  Youenn Fablet  <youenn@apple.com>

        [WebRTC] After r214441 addIceCandidate no longer accepts an RTCIceCandidateInit dictionary
        https://bugs.webkit.org/show_bug.cgi?id=170192

        Reviewed by Jon Lee.

        Covered by updated tests.

        * Modules/mediastream/RTCIceCandidate.idl: Candidate is no longer a required field in RTCIceCandidateInit.
        * Modules/mediastream/RTCPeerConnectionInternals.js: Reworking defaultsToNull to handle both undefined and null cases.

2017-03-28  Youenn Fablet  <youenn@apple.com>

        LibWebRTCProvider should allow setting encoder and decoder factories
        https://bugs.webkit.org/show_bug.cgi?id=170212

        Reviewed by Eric Carlson.

        No change of behavior.
        Adding the ability to set encoder/decoder libwebrtc factory getters.
        Setting default cocoa factory getters.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::staticFactoryAndThreads):
        (WebCore::initializePeerConnectionFactoryAndThreads):
        (WebCore::LibWebRTCProvider::setDecoderFactoryGetter):
        (WebCore::LibWebRTCProvider::setEncoderFactoryGetter):
        (WebCore::LibWebRTCProvider::setPeerConnectionFactory):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2017-03-27  Brent Fulgham  <bfulgham@apple.com>

        Only attach Attributes to a given element one time
        https://bugs.webkit.org/show_bug.cgi?id=170125
        <rdar://problem/31279676>

        Reviewed by Chris Dumez.

        Attach the attribute node to the Element before calling 'setAttributeInternal', since that method may cause
        arbitrary JavaScript events to fire. 

        Test: fast/dom/Attr/only-attach-attr-once.html

        * dom/Element.cpp:
        (WebCore::Element::attachAttributeNodeIfNeeded): Added.
        (WebCore::Element::setAttributeNode): Use new method. Revise to attach attribute before calling 'setAttributeInternal'. 
        (WebCore::Element::setAttributeNodeNS): Ditto.
        * dom/Element.h:

2017-03-28  Youenn Fablet  <youenn@apple.com>

        Stop RTCDataChannel when closing page
        https://bugs.webkit.org/show_bug.cgi?id=170166

        Reviewed by Eric Carlson.

        Test: webrtc/datachannel/datachannel-gc.html

        Making RTCDataChannel an ActiveDOMObject.
        Closing the data channel backend and freeing upon close and stop.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::close):
        (WebCore::RTCDataChannel::stop):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.h:

2017-03-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Ranges for variation font properties are not enforced
        https://bugs.webkit.org/show_bug.cgi?id=169979

        Reviewed by David Hyatt.

        The spec specifies that:
        - Font weights less than or equal to 0, or greater than or equal to 1000 are parse errors
        - Font stretch values less than or equal to 0% are parse errors
        - Font style values less than or equal to -90deg or greater than or equal to 90deg are parse errors

        Test: fast/text/variations/out-of-bounds-selection-properties.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontWeightRange):
        (WebCore::fontStretchIsWithinRange):
        (WebCore::consumeFontStretch):
        (WebCore::consumeFontStretchRange):
        (WebCore::fontStyleIsWithinRange):
        (WebCore::consumeFontStyle):
        (WebCore::consumeFontStyleRange):

2017-03-28  Andy Estes  <aestes@apple.com>

        [iOS] Crash in -[WebPreviewLoader failed] when running http/tests/multipart/policy-ignore-crash.php
        https://bugs.webkit.org/show_bug.cgi?id=170197
        <rdar://problem/30314067>

        Reviewed by Brady Eidson.

        If QuickLook conversion fails, we call ResourceLoader::didFail() with the NSError from
        QuickLook, which will call back into PreviewLoader::didFail(). We only care about network
        failures in PreviewLoader, not conversion failures, so check if
        m_finishedLoadingDataIntoConverter is set before continuing (like we do in
        PreviewLoader::didFinishLoading()).

        Fixes crash in http/tests/multipart/policy-ignore-crash.php.

        * loader/ios/PreviewLoader.mm:
        (WebCore::PreviewLoader::didFail):

2017-03-28  Chris Dumez  <cdumez@apple.com>

        Audio indicator is visible on uni-watch.com but there is no audible audio
        https://bugs.webkit.org/show_bug.cgi?id=170200
        <rdar://problem/31289132>

        Reviewed by Eric Carlson.

        Cherry-pick the following patch from Blink by <rtoy@chromium.org>:
        - https://chromium.googlesource.com/chromium/src.git/+/439de5bb2a31384666db1a0e2dadb2b97d2f3ce4

        When the gain of a GainNode is 0 or 1, the operation of the node can
        be optimized.  When gain = 1, just copy the input to the output.  When
        gain = 0; just zero out the output.  Currently, the input is
        multiplied by the gain to produce the output.  This just optimizes the
        multiplication away for the two special cases.

        Also, have the GainNode set the silence hint if the gain is 0.

        And fix a bug in processIfNecessary when unsilenceOutputs was causing the
        silence hint to be cleared after the node's process method was finished
        and may have set the silence hint.  The processing should come after
        unsilenceOutputs to preserve any hints from processing the node.

        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::processIfNecessary):
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::process):
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::copyWithGainFrom):

2017-03-28  Chris Dumez  <cdumez@apple.com>

        Animated SVG images are not paused when outside viewport
        https://bugs.webkit.org/show_bug.cgi?id=170155
        <rdar://problem/31288893>

        Reviewed by Antti Koivisto.

        Make sure animated SVG images get paused when outside the viewport,
        similarly to what was already done for animated GIF images. Also
        make sure they are paused when they no longer have any renderers
        using them.

        Tests: svg/animations/animated-svg-image-outside-viewport-paused.html
               svg/animations/animated-svg-image-removed-from-document-paused.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient):
        Restart the animation whenever a new CachedImage client is added. This
        will cause us the re-evaluate if the animation should run. The animation
        will pause again if the new renderer is not inside the viewport.

        (WebCore::CachedImage::animationAdvanced):
        Add a flag to newImageAnimationFrameAvailable() so that the renderers can
        let us know if we can pause the animation. Pause the animation if all no
        renderer requires it (i.e. they are all outside the viewport, or there
        are no renderers).

        * loader/cache/CachedImageClient.h:
        (WebCore::CachedImageClient::newImageAnimationFrameAvailable):
        By default, the CachedImageClients allow pausing. Only renderer will
        potentially prevent pausing if they are inside the viewport.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::isAnimating):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::isAnimating):
        Add isAnimating() flag on Image for layout testing purposes.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::newImageAnimationFrameAvailable):
        Set canPause flag to true if the renderer is not inside the viewport.

        (WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded):
        Call startAnimation() if the renderer is now visible to resume SVG
        animations. Repainting is enough for GIF animations but not for SVG
        animations, we have to explicitly resume them.

        * rendering/RenderElement.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::addRendererWithPausedImageAnimations):
        (WebCore::RenderView::removeRendererWithPausedImageAnimations):
        (WebCore::RenderView::resumePausedImageAnimationsIfNeeded):
        * rendering/RenderView.h:
        Store CachedImages with the renderers that have paused animations.
        This is required for SVG where we need to explicitly resume the
        animation on the CachedImage when the renderer becomes visible
        again. Having access to the Image will also allow us to do smarter
        visibility checks in RenderElement's shouldRepaintForImageAnimation(),
        in the future.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::hasActiveAnimation):
        * svg/SVGSVGElement.h:
        Add hasActiveAnimation() method.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::startAnimation):
        Check that animations are paused before starting them. This avoid
        jumping due to unnecessary calls to rootElement->setCurrentTime(0).

        (WebCore::SVGImage::isAnimating):
        Add isAnimating() method for layout tests purposes.

        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageClients.h:
        Call animationAdvanced() on the observer instead of the generic
        changedInRect() when the SVGImage is animating. This way, we go
        through the same code path as GIF animations and we end up calling
        CachedImage::animationAdvanced() which calls newImageAnimationFrameAvailable()
        on RenderElement, which determines if the animation should keep
        running or not.

        * testing/Internals.cpp:
        (WebCore::Internals::isImageAnimating):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add layout testing infrastructure.

2017-03-28  Antti Koivisto  <antti@apple.com>

        Missing render tree position invalidation when tearing down renderers for display:contents subtree
        https://bugs.webkit.org/show_bug.cgi?id=170199
        <rdar://problem/31260856>

        Reviewed by Zalan Bujtas.

        Test: fast/shadow-dom/slot-renderer-teardown.html

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

            Invalidate the render tree position in case we do a teardown for an element without renderer.

2017-03-28  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214485.

        This change caused LayoutTest crashes.

        Reverted changeset:

        "Stop RTCDataChannel when closing page"
        https://bugs.webkit.org/show_bug.cgi?id=170166
        http://trac.webkit.org/changeset/214485

2017-03-28  Anders Carlsson  <andersca@apple.com>

        ApplePayShippingContactUpdate.idl shouldn't have status field
        https://bugs.webkit.org/show_bug.cgi?id=170202
        rdar://problem/31307106

        Reviewed by Beth Dakin.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        If status isn't set, infer it based on whether there are errors present or not.

        * Modules/applepay/ApplePayShippingContactUpdate.h:
        Make status optional here; it's still used by the old code path.

        * Modules/applepay/ApplePayShippingContactUpdate.idl:
        Remove status here.

2017-03-28  Brian Burg  <bburg@apple.com>

        Web Inspector: Add "Disable Caches" option that only applies to the inspected page while Web Inspector is open
        https://bugs.webkit.org/show_bug.cgi?id=169865
        <rdar://problem/31250573>

        Reviewed by Joseph Pecoraro.

        Rewrite the network agent's command for disabling resource caching to use Page::setResourceCachingEnabled.
        The old implementation was doing weird stuff like setting no-cache headers and evicting the
        contents of the memory cache, neither of which is correct. The new approach has no side effects
        on the network, disk, or memory cache so it can be turned on temporarily without causing problems.

        New tests:
        - http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html
        - http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html

        * inspector/InspectorNetworkAgent.h:
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::setCacheDisabled): Deleted.
        (WebCore::InspectorNetworkAgent::setResourceCachingDisabled): Added.
        Implement new command.

        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::mainFrameNavigated):
        Remove crufty attempts to break caches. I believe these are intended to defeat caching
        proxies and similar middlemen, but this is just as likely to cause unusual loading behavior.

        * page/Page.h:
        (WebCore::Page::isResourceCachingDisabled):
        (WebCore::Page::setResourceCachingDisabledOverride):
        Add an override setting so that Web Inspector's override does not mess up the value
        of isResourceCachingDisabled that may have been set by a WebKit API client.

2017-03-28  Youenn Fablet  <youenn@apple.com>

        Fix addIceCandidate after r214441
        https://bugs.webkit.org/show_bug.cgi?id=170146

        Reviewed by Chris Dumez.

        Covered by rebased test.

        * Modules/mediastream/RTCPeerConnection.js:
        (addIceCandidate): Setting function length to 1 and throwing if no parameter is passed.

2017-03-28  Youenn Fablet  <youenn@apple.com>

        Stop RTCDataChannel when closing page
        https://bugs.webkit.org/show_bug.cgi?id=170166

        Reviewed by Eric Carlson.

        Test: webrtc/datachannel/datachannel-gc.html

        Making RTCDataChannel an ActiveDOMObject.
        Closing the data channel backend and freeing upon close and stop.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::close):
        (WebCore::RTCDataChannel::stop):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.h:

2017-03-27  Simon Fraser  <simon.fraser@apple.com>

        Enhance the touch region debug overlay to show regions for the different events
        https://bugs.webkit.org/show_bug.cgi?id=170162

        Reviewed by Tim Horton.

        Have NonFastScrollableRegionOverlay use a different color for each region in EventTrackingRegions,
        and to draw a legend showing what the colors mean.
        
        On Mac, this overlay displays the non-fast scrollable region (which we don't keep separate from the wheel event
        region).

        * page/DebugPageOverlays.cpp:
        (WebCore::NonFastScrollableRegionOverlay::updateRegion):
        (WebCore::touchEventRegionColors):
        (WebCore::drawRightAlignedText):
        (WebCore::NonFastScrollableRegionOverlay::drawRect):
        (WebCore::RegionOverlay::drawRect):
        (WebCore::RegionOverlay::drawRegion):

2017-03-27  Simon Fraser  <simon.fraser@apple.com>

        Make sure the non-fast scrolling debug overlay is correctly updated
        https://bugs.webkit.org/show_bug.cgi?id=170142

        Reviewed by Tim Horton.

        AsyncScrollingCoordinator::frameViewEventTrackingRegionsChanged() is called on a timer
        from Document code, so the existing DebugPageOverlays::didLayout() call at the end
        of FrameView::layout() wasn't sufficient to keep the non-fast scrollable region up-to-date
        on iOS.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewEventTrackingRegionsChanged):

2017-03-28  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] AirPlay placard text looks bad on 1x displays
        https://bugs.webkit.org/show_bug.cgi?id=170183
        <rdar://problem/30663416>

        Reviewed by Dean Jackson.

        Use subpixel antialiasing for all text in modern media controls.

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container,):

2017-03-28  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Improve appearance of tracks panel on macOS
        https://bugs.webkit.org/show_bug.cgi?id=168929
        <rdar://problem/30741589>

        Reviewed by Eric Carlson.

        We use a solid color for the focus state that matches the style used on macOS
        and blend the titles the same way we blend other non-solid labels in the controls bar.

        * Modules/modern-media-controls/controls/tracks-panel.css:
        (.tracks-panel section):
        (.tracks-panel section > h3):
        (.tracks-panel section > ul > li:focus):

2017-03-28  Yoav Weiss  <yoav@yoav.ws>

        Add a warning for unused link preloads.
        https://bugs.webkit.org/show_bug.cgi?id=165670

        Reviewed by Youenn Fablet.

        Tests: http/tests/preload/single_download_preload_headers_charset.php
               http/tests/preload/unused_preload_warning.html

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Stop the timer once the document is destructed.
        * loader/LinkPreloadResourceClients.h: Add shouldMarkAsReferenced overides for the LinkPreloadResourceClient classes.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet): Make sure LinkPreloadResourceClients don't set resource to be referenced.
        * loader/cache/CachedResourceClient.h:
        (WebCore::CachedResourceClient::shouldMarkAsReferenced): Make sure that ResourceClients mark preloads as referenced by default.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader): Initialize timer.
        (WebCore::CachedResourceLoader::~CachedResourceLoader): Stop timer.
        (WebCore::CachedResourceLoader::documentDidFinishLoadEvent): Trigger a timer if preloads weren't cleared at load time.
        (WebCore::CachedResourceLoader::stopUnusedPreloadsTimer): Stop the timer.
        (WebCore::CachedResourceLoader::warnUnusedPreloads): Iterate over m_preloads and issue a warning for non-referenced preloads.
        * loader/cache/CachedResourceLoader.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDetachDocumentFromFrame): Clear Resource Timing buffer when document detaches, to avoid test flakiness.

2017-03-28  Antoine Quint  <graouts@apple.com>

        REGRESSION: Double-clicking the captions button while the captions popover is open prevents the popover from being opened again
        https://bugs.webkit.org/show_bug.cgi?id=170171
        <rdar://problem/31095500>

        Reviewed by Dean Jackson.

        We used to consider that the tracks panel was presented as long as it had a parent, but since we were using for the animated
        transition to complete before actually removing the panel from the node hierarchy, consecutive calls to hide then present
        would fail to present the panel. We now use a private instance variable to track the presented state which is set immediately
        as presentInParent() and hide() are called.

        Test: media/modern-media-controls/tracks-support/tracks-support-show-panel-then-double-click-on-tracks-button.html

        * Modules/modern-media-controls/controls/tracks-panel.js:
        (TracksPanel.prototype.get presented):
        (TracksPanel.prototype.presentInParent):
        (TracksPanel.prototype.hide):

2017-03-28  Aaron Chu  <aaron_chu@apple.com>

        AX: Media controls should be able to be re-activated after faded away
        https://bugs.webkit.org/show_bug.cgi?id=170048
        <rdar://problem/30157179>

        Reviewed by Antoine Quint.

        Added a "foucsin" listener for the controls bar so that when an element
        within fires a "focusin" event, the controls bar reappears if it is faded.

        Test: media/modern-media-controls/media-controls/media-controls-appear-when-focus.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.handleEvent):

2017-03-28  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Improve media documents across macOS, iPhone and iPad
        https://bugs.webkit.org/show_bug.cgi?id=169145
        <rdar://problem/17048858>

        Reviewed by Dean Jackson.

        There were a variety of issues with media documents, some longstanding, and some specifically
        about modern media controls.

        One issue was that fullscreen and picture-in-picture buttons would show for audio media documents,
        due to using a <video> element to load the audio file. We now have additional logic in MediaController
        to identify if the loaded media is really an audio file, and using this information to hide the
        fullscreen and picture-in-picture buttons.

        Another issue was that we would inject style in MediaDocument.cpp that was specific to modern media
        controls when we could have the modern-media-controls module injected CSS handle this styling. We now
        use the injected style in the shadow root to size media documents based on the device characteristics
        and ensuring that page styles are overridden.

        We also simplify how MediaDocument.cpp sets the source of the media element to simply use the "src"
        attribute and not a <source> element.

        Finally, we introduce a MediaDocumentController class that is instantiated when we're dealing with
        a media document to hide the controls while we determine the type of media we're loading (audio vs.
        video) in order to apply the appropriate styling without flashes.

        As a result of the new styles applied by the modern-media-controls module, media documents have a
        similar behavior on macOS and iPad, where we only enforce a min-width for video allowing them
        to play at their natural size otherwise, and enforcing a fixed width for audio. On iPhone however,
        we want to always play the media at full width, with some padding in the case of audio.

        Tests: media/modern-media-controls/fullscreen-support/fullscreen-support-disabled-video-with-audio-tracks-only.html
               media/modern-media-controls/media-documents/ipad/media-document-audio-ios-sizing.html
               media/modern-media-controls/media-documents/ipad/media-document-video-ios-sizing.html
               media/modern-media-controls/media-documents/media-document-audio-ios-sizing.html
               media/modern-media-controls/media-documents/media-document-audio-mac-sizing.html
               media/modern-media-controls/media-documents/media-document-video-ios-sizing.html
               media/modern-media-controls/media-documents/media-document-video-mac-sizing.html
               media/modern-media-controls/pip-support/pip-support-disabled-video-with-audio-tracks-only.html

        * Modules/modern-media-controls/controls/ios-inline-media-controls.css:
        (:host(audio) .media-controls.ios.inline > .controls-bar:before,):
        (:host(audio) .media-controls.ios.inline > .controls-bar:before): Deleted.
        * Modules/modern-media-controls/controls/macos-media-controls.css:
        (:host(audio) .media-controls.mac.inline > .controls-bar,):
        (:host(audio) .media-controls.mac.inline > .controls-bar > .background-tint,):
        (:host(audio) .media-controls.mac.inline > .controls-bar): Deleted.
        (:host(audio) .media-controls.mac.inline > .controls-bar > .background-tint): Deleted.
        * Modules/modern-media-controls/controls/media-document.css: Copied from Source/WebCore/Modules/modern-media-controls/controls/macos-media-controls.css.
        (:host(.media-document)):
        (:host(.media-document.ready)):
        (:host(.media-document.audio.mac)):
        (:host(.media-document.audio.ipad)):
        (:host(.media-document.audio.iphone)):
        (:host(.media-document.video.mac)):
        (:host(.media-document.video.ipad)):
        (:host(.media-document.video.iphone)):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.syncControl):
        (FullscreenSupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.get isAudio):
        * Modules/modern-media-controls/media/media-document-controller.js: Copied from Source/WebCore/Modules/modern-media-controls/media/fullscreen-support.js.
        (MediaDocumentController):
        (MediaDocumentController.prototype.handleEvent):
        (MediaDocumentController.prototype._mediaDocumentHasMetadata):
        (MediaDocumentController.prototype._mediaDocumentHasSize):
        * Modules/modern-media-controls/media/pip-support.js:
        (PiPSupport.prototype.syncControl):
        (PiPSupport):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2017-03-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Follow-up patch after r214364.
        https://bugs.webkit.org/show_bug.cgi?id=168895

        Unreviewed.

        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):

2017-03-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(213764): Large images should not be decoded asynchronously when they are drawn on a canvas
        https://bugs.webkit.org/show_bug.cgi?id=169771

        Reviewed by Simon Fraser.

        Sometimes we have to draw the image immediately like when a canvas calls  
        drawImage. In this case we have to decode the image synchronously to guarantee
        the drawing. Other times we need to decode with the native size of the image.
        The animated images have to be decoded with native size always. Otherwise
        the frame cache will be messed up if the same image is animated with different
        sizes. Currently we always decode asynchronously with sizeForDrawing. We need
        to decouple the decoding mode from the sizeForDrawing.

        This patch introduce the DecodingOptions class which can store and compare the
        following four cases:
            -- Synchronous: The frame has be decoded with native size only.
            -- Asynchronous + anySize: This is passed from the Image::draw() callers.
            -- Asynchronous + fullSize: The image has to be decoded with its full size.
            -- Asynchronous + sizeForDrawing: The image can be decoded with sizeForDrawing unless
            it was decoded with either a full size or sizeForDrawing which is larger than the
            requested sizeForDrawing.
            
        A new argument of type DecodingMode will be added to Image::draw() function.
        Only when the drawing comes from the render tree, it will be Asynchronous.
        Otherwise it will be Synchronous.

        Tests: fast/images/animated-image-different-dest-size.html
               fast/images/async-image-background-image.html
               fast/images/async-image-canvas-draw-image.html

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::frameImageAtIndexCacheIfNeeded): Gets the frame image, cache it synchronously if
        the current one is invalid. frameImageAtIndex() returns whatever stored in the cache.
        (WebCore::BitmapImage::nativeImage): Call frameImageAtIndexCacheIfNeeded() instead of frameImageAtIndex().
        (WebCore::BitmapImage::nativeImageForCurrentFrame): Ditto.
        (WebCore::BitmapImage::nativeImageOfSize): Ditto.
        (WebCore::BitmapImage::framesNativeImages): Ditto.
        (WebCore::BitmapImage::draw): Change the logic to do the following:
        -- The animated image has to be decoded with its full size.
        -- The animated image expects the current frame to be ready for drawing.
        -- The large image decoding does not need to call internalStartAnimation().
        -- The large image has to request async image decoding but draw the current one if it exists.
        (WebCore::BitmapImage::drawPattern): Draw the pattern synchronously.
        (WebCore::BitmapImage::shouldUseAsyncDecodingForLargeImages): Delete the call to shouldUseAsyncDecodingForTesting()
        since it is only applied for animated images.
        (WebCore::BitmapImage::shouldUseAsyncDecodingForAnimatedImages): Call shouldUseAsyncDecodingForAnimatedImageForTesting().
        (WebCore::BitmapImage::internalStartAnimation): Request decoding with the full size.
        (WebCore::BitmapImage::advanceAnimation): Call shouldUseAsyncDecodingForAnimatedImageForTesting().
        (WebCore::BitmapImage::internalAdvanceAnimation): Assert the current frame is not being decoding asynchronously for any size.
        (WebCore::BitmapImage::frameImageAtIndex): Deleted. Moved to the header file but with a new purpose: return
        the current frame from the frame cache as is; do not cache a new one.
        (WebCore::BitmapImage::shouldUseAsyncDecodingForLargeImage): Deleted. Function was renamed to shouldUseAsyncDecodingForLargeImages.
        (WebCore::BitmapImage::shouldUseAsyncDecodingForAnimatedImage): Deleted. Function was renamed to shouldUseAsyncDecodingForAnimatedImages.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw): Add a new argument of type DecodingMode.
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/DecodingOptions.h: Added.
        (WebCore::DecodingOptions::DecodingOptions): Default constructor: Synchronous mode.
        (WebCore::DecodingOptions::operator==): Compares two DecodingOptions for equality.
        (WebCore::DecodingOptions::isSynchronous): Is the frame decoded synchronously?
        (WebCore::DecodingOptions::isAsynchronous): Is the frame decoded asynchronously?
        (WebCore::DecodingOptions::isAsynchronousCompatibleWith): Is this DecodingOptions compatible with another one?
        (WebCore::DecodingOptions::hasFullSize): Is the decoding mode asynchronous but for the image full size?
        (WebCore::DecodingOptions::hasSizeForDrawing): Is this decoding mode asynchronous but for a sizeForDrawing?
        (WebCore::DecodingOptions::sizeForDrawing): Returns the sizeForDrawing. m_decodingModeOrSize has to hold an IntSize.
        (WebCore::DecodingOptions::maxDimension): Moved form ImageFrame.cpp.
        (WebCore::DecodingOptions::has): A helper function.
        (WebCore::DecodingOptions::hasDecodingMode): Does m_decodingModeOrSize a DecodingMode?
        (WebCore::DecodingOptions::hasSize): Does m_decodingModeOrSize an IntSize?
        * platform/graphics/GeneratedImage.h: Add a new argument of type DecodingMode.
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw): Ditto.
        * platform/graphics/GradientImage.h: Ditto.
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage): Pass the ImagePaintingOptions::m_DecodingMode to Image::draw().
        * platform/graphics/GraphicsContext.h:
        (WebCore::ImagePaintingOptions::ImagePaintingOptions): Add a new member of type DecodingMode to ImagePaintingOptions.
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Pass DecodingMode::Synchronous to Image::draw().
        * platform/graphics/Image.h: Add a new argument of type DecodingMode to Image::draw().
        * platform/graphics/ImageFrame.cpp:
        (WebCore::ImageFrame::operator=): Replace m_sizeForDrawing by m_decodingOptions.
        (WebCore::ImageFrame::hasNativeImage): Check if m_nativeImage is valid and the subsamplingLevels match.
        (WebCore::ImageFrame::hasFullSizeNativeImage): Checks hasNativeImage() and whether the image frame was
        decoded for the image full size.
        (WebCore::ImageFrame::hasDecodedNativeImageCompatibleWithOptions): Checks hasNativeImage() and the DecodingOptions match.
        (WebCore::maxDimension): Deleted. Moved to DecodingOptions.h.
        (WebCore::ImageFrame::isBeingDecoded): Deleted. The check for having an ImageFrame being decoded is
        moved to ImageFrameCache.
        (WebCore::ImageFrame::hasValidNativeImage): Deleted. No need to this function.
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::hasNativeImage): Add an std::optional<SubsamplingLevel> argument.
        (WebCore::ImageFrame::hasFullSizeNativeImage): Checks whether the ImageFrame was decoded for the image full size.
        (WebCore::ImageFrame::enqueueSizeForDecoding): Deleted.
        (WebCore::ImageFrame::dequeueSizeForDecoding): Deleted.
        (WebCore::ImageFrame::clearSizeForDecoding): Deleted.
        (WebCore::ImageFrame::isBeingDecoded): Deleted.
        (WebCore::ImageFrame::sizeForDrawing): Deleted.
        (WebCore::ImageFrame::hasDecodedNativeImage): Deleted.
        The logic of knowing whether an ImageFrame is being decoded is moved to ImageFrameCache.
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::cacheFrameMetadataAtIndex): Caches the metadata of an ImageFrame. If the NativeImage
        was decoded for a sizeForDrawing, the size of the ImageFrame will be the nativeImageSize(). Otherwise, the
        frameSizeAtIndex() will be called.
        (WebCore::ImageFrameCache::cacheFrameNativeImageAtIndex): Cache a new NativeImage which involves caching new
        metadata and updating the memory cache. No need to check if the existing native image is valid or not for the
        DecodingOptions. Actually it would be a bug if it happens. This is why cacheNativeImageForFrameRequest() asserts
        !frame.hasAsyncNativeImage() before calling cacheFrameNativeImageAtIndex().
        (WebCore::ImageFrameCache::cacheAsyncFrameNativeImageAtIndex): Cache new NativeImage which was decoded asynchronously.
        (WebCore::ImageFrameCache::startAsyncDecodingQueue): Call cacheAsyncFrameNativeImageAtIndex() instead of
        cacheNativeImageForFrameRequest() for clarity.
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex): Call hasAsyncNativeImage() instead of hasValidNativeImage()
        Call frameIsDecodingCompatibleWithOptionsAtIndex() instead of frame.isBeingDecoded(). Replace the call to enqueueSizeForDecoding()
        by appending the same ImageFrameRequest to m_frameCommitQueue.
        (WebCore::ImageFrameCache::isAsyncDecodingQueueIdle): Use m_frameCommitQueue to answer the question whether the decodingQueue is idle.
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue): Use m_frameCommitQueue to loop through all the ImageFrames which are currently being decoded.
        (WebCore::ImageFrameCache::frameAtIndexCacheIfNeeded): For getting the metadata, this function needs a valid frame. If it is requested
        to decode the nativeImage, it has to do it synchronously.
        (WebCore::ImageFrameCache::singlePixelSolidColor): Don't cache the frame if it is an animated image or the size is not a single pixel.
        (WebCore::ImageFrameCache::frameIsBeingDecodedAndIsCompatibleWithOptionsAtIndex): Use m_frameCommitQueue to answer the question whether an ImageFrame
        is being decoded and is compatible with DecodingOptions.
        (WebCore::ImageFrameCache::frameHasFullSizeNativeImageAtIndex): Calls ImageFrame::hasFullNativeImage() for a frame. 
        (WebCore::ImageFrameCache::frameHasDecodedNativeImageCompatibleWithOptionsAtIndex): Calls ImageFrame::hasDecodedNativeImageCompatibleWithOptions() for a frame.
        (WebCore::ImageFrameCache::frameImageAtIndex): Returns the current NativeImage without caching.
        (WebCore::ImageFrameCache::frameImageAtIndexCacheIfNeeded): Returns the current NativeImage but cache it synchronously if needed.
        (WebCore::ImageFrameCache::setFrameNativeImageAtIndex): Deleted.
        (WebCore::ImageFrameCache::setFrameMetadataAtIndex): Deleted.
        (WebCore::ImageFrameCache::replaceFrameNativeImageAtIndex): Deleted.
        (WebCore::ImageFrameCache::frameIsBeingDecodedAtIndex): Deleted.
        (WebCore::ImageFrameCache::frameHasImageAtIndex): Deleted.
        (WebCore::ImageFrameCache::frameHasValidNativeImageAtIndex): Deleted.
        (WebCore::ImageFrameCache::frameHasDecodedNativeImage): Deleted.
        * platform/graphics/ImageFrameCache.h: Two ImageFrameRequest queues will be used.
        -- The existing one m_frameRequestQueue which is shared between the main thread and decoding thread. The requests will be
        dequeued from it before starting the decoding. The decoded NativeImage will be cached only on the main thread. The decoding
        thread is not blocked by the callOnMainThread(). This means there might be multiple ImageFrameRequests which were dequeued
        while their NativeImages have not been cached yet.
        -- A new one m_frameCommitQueue which is track all the ImageFrameRequests whose NativeImages have not been cached yet.
        (WebCore::ImageFrameCache::frameAtIndexCacheIfNeeded): Be explicit about caching the image frame. frameImageAtIndex()
        returns the current image frame without caching. frameAtIndexCacheIfNeeded(). returns the current image frame but cache
        it if needed.
        (WebCore::ImageFrameCache::ImageFrameRequest::operator==): Compares two ImageFrameRequests for equality.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameImageAtIndexCacheIfNeeded): 
        (WebCore::ImageSource::frameImageAtIndex): Deleted.
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::requestFrameAsyncDecodingAtIndex): Change the type of the argument from IntSize to be const std::optional<IntSize>.
        (WebCore::ImageSource::frameIsBeingDecodedAndIsCompatibleWithOptionsAtIndex): Rename of frameIsBeingDecodedAtIndex(). Replace the argument of type
        std::optional<IntSize> by an argument of type DecodingOptions.
        (WebCore::ImageSource::frameHasFullSizeNativeImageAtIndex): A wrapper around the ImageFrameCache function.
        (WebCore::ImageSource::frameHasDecodedNativeImageCompatibleWithOptionsAtIndex): Ditto.
        (WebCore::ImageSource::frameImageAtIndex): Ditto.
        (WebCore::ImageSource::frameIsBeingDecodedAtIndex): Deleted.
        (WebCore::ImageSource::frameHasValidNativeImageAtIndex): Deleted.
        (WebCore::ImageSource::frameHasDecodedNativeImage): Deleted.
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw): Add a new argument of type DecodingMode.
        * platform/graphics/NamedImageGeneratedImage.h: Ditto.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw): Add a new argument of type DecodingMode.
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::createFrameImageAtIndex): Replace the sizeForDrawing argument by a DecodingMode argument. Add a new handling
        for decoding asynchronously for the image full size.
        * platform/graphics/cg/ImageDecoderCG.h: Change the prototype of the function.
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw): Add a new argument of type DecodingMode.
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize): Pass DecodingMode::Synchronous to Image::draw().
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): Ditto.
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoder::createFrameImageAtIndex): Replace the sizeForDrawing argument by a DecodingMode argument.
        * platform/graphics/win/ImageDecoderDirect2D.h: Change the prototype of the function.
        * platform/image-decoders/ImageDecoder.cpp: 
        (WebCore::ImageDecoder::createFrameImageAtIndex): Replace the sizeForDrawing argument by a DecodingMode argument.
        * platform/image-decoders/ImageDecoder.h: Change the prototype of the function.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Draw the background image asynchronously if the image size is large.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect): Draw the background image element asynchronously if the image size is large.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer): Pass DecodingMode::Synchronous to draw().
        (WebCore::SVGImage::nativeImageForCurrentFrame): Ditto.
        (WebCore::SVGImage::nativeImage): Ditto.
        (WebCore::SVGImage::draw): Add a new argument of type DecodingMode.
        * svg/graphics/SVGImage.h: Change the prototype of the function.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw): Add a new argument of type DecodingMode.
        * svg/graphics/SVGImageForContainer.h: Change the prototype of the function.

2017-03-27  Youenn Fablet  <youenn@apple.com>

        Activate release libwebrtc logging when WebRTC log channel is on
        https://bugs.webkit.org/show_bug.cgi?id=169659

        Reviewed by Alex Christensen.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::initializePeerConnectionFactoryAndThreads):

2017-03-27  Antti Koivisto  <antti@apple.com>

        Move visibleInViewportStateChanged callback from Element to render tree
        https://bugs.webkit.org/show_bug.cgi?id=170039

        Reviewed by Zalan Bujtas.

        Make it easier to use from the render tree.

        Also for simplicity move the bits from RenderObject rare data to RenderElement.
        There is plenty of space there.

        * dom/Element.h:
        (WebCore::Element::isVisibleInViewportChanged): Deleted.
        * html/HTMLMediaElement.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::willBeDestroyed):
        (WebCore::RenderElement::registerForVisibleInViewportCallback):
        (WebCore::RenderElement::unregisterForVisibleInViewportCallback):
        (WebCore::RenderElement::setVisibleInViewportState):
        (WebCore::RenderElement::visibleInViewportStateChanged):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::visibleInViewportState):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setIsRegisteredForVisibleInViewportCallback): Deleted.
        (WebCore::RenderObject::setVisibleInViewportState): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasOutlineAutoAncestor):
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData):
        (WebCore::RenderObject::isRegisteredForVisibleInViewportCallback): Deleted.
        (WebCore::RenderObject::visibleInViewportState): Deleted.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::visibleInViewportStateChanged):
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateVisibleViewportRect):

2017-03-27  Youenn Fablet  <youenn@apple.com>

        addIceCandidate should not throw if passed null or undefined
        https://bugs.webkit.org/show_bug.cgi?id=170118

        Reviewed by Eric Carlson.

        Covered by updated test.

        A null/undefined candidate passed to addIceCandidate means end of Ice candidate..

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::endOfIceCandidates):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnection.js:
        (addIceCandidate):

2017-03-27  Antti Koivisto  <antti@apple.com>

        Allow the page to render before <link> stylesheet tags in body
        https://bugs.webkit.org/show_bug.cgi?id=149157
        <rdar://problem/24658830>

        Reviewed by Simon Fraser.

        Currently we block style and renderer building completely if document has any loading
        stylesheets. In case a script queries something layout dependent we construct the render
        tree with whatever style we have but block painting in it.

        This patch changes behavior so that a loading stylesheet in body only blocks rendering for elements
        that are after it. The expectation is that such stylesheets rarely affect elements before them
        and the elements can be rendered without causing ugly visible styling changes.

        The patch replaces the old flash-of-unstyled-content (FOUC) preventation mechanism with a more
        fine-grained one. Paint blocking is now done on per-renderer basis with based on isNonFinal flag in
        RenderStyle.

        For stylesheets in head the behavior should be largely unchanged.

        Test: http/tests/incremental/stylesheet-body-incremental-rendering.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):

            Remove the old FOUC preventation state tracking.

        (WebCore::Document::shouldScheduleLayout):
        (WebCore::Document::didRemoveAllPendingStylesheet):

            Repaints will now get triggered by the normal style mechanism.

        * dom/Document.h:
        (WebCore::Document::hasNodesWithNonFinalStyle):
        (WebCore::Document::setHasNodesWithNonFinalStyle):

            Track if we need to recompute the style later because non-final or unstyled elements.

        (WebCore::Document::didLayoutWithPendingStylesheets): Deleted.
        (WebCore::Document::hasNodesWithPlaceholderStyle): Deleted.
        (WebCore::Document::setHasNodesWithPlaceholderStyle): Deleted.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::rendererIsNeeded):
        * page/FrameView.cpp:
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty):

            Don't qualify as visually non-empty if we have loading stylesheets in head (even if there is
            a fouc-prevented render tree).

        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents):

            Instead of a global test, block painting if isNonFinal is set in the renderer's style.

        * rendering/RenderLayer.cpp:
        (WebCore::shouldSuppressPaintingLayer):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaint):

            The isNonFinal flag prevents painting so we need to trigger repaint when it gets cleared.

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isNotFinal):
        (WebCore::RenderStyle::setIsNotFinal):
        (WebCore::RenderStyle::isPlaceholderStyle): Deleted.
        (WebCore::RenderStyle::setIsPlaceholderStyle): Deleted.

            There is no need for placeholder styles anymore. Reuse the bit for isNotFinal.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::analyzeStyleSheetChange):
        (WebCore::Style::Scope::updateActiveStyleSheets):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::styleForElement):
        (WebCore::Style::TreeResolver::resolveElement):

            If we have seens a loading stylesheet and don't have a renderer yet don't style the element.
            In case there is a renderer or we are ignoring pending sheets, resolve the style normally
            but mark it as non-final.

        (WebCore::Style::makePlaceholderStyle): Deleted.

2017-03-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Test variation font ranges in the CSS Font Loading API
        https://bugs.webkit.org/show_bug.cgi?id=170022

        Reviewed by Dean Jackson.

        Test: fast/text/variations/font-loading-api-parse-ranges.html

        Don't use keywords when reporting font variation range values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::fontNonKeywordWeightFromStyleValue):
        (WebCore::ComputedStyleExtractor::fontWeightFromStyleValue):
        (WebCore::ComputedStyleExtractor::fontNonKeywordStretchFromStyleValue):
        (WebCore::ComputedStyleExtractor::fontStretchFromStyleValue):
        (WebCore::ComputedStyleExtractor::fontNonKeywordStyleFromStyleValue):
        (WebCore::ComputedStyleExtractor::fontStyleFromStyleValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::style):
        (WebCore::FontFace::weight):
        (WebCore::FontFace::stretch):

2017-03-27  Anders Carlsson  <andersca@apple.com>

        Propagate shipping contact update errors
        https://bugs.webkit.org/show_bug.cgi?id=170141
        rdar://problem/31276576

        Reviewed by Tim Horton.

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

2017-03-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214411.

        Two of the LayoutTests for this change time out on ios-
        simulator.

        Reverted changeset:

        "[Modern Media Controls] Improve media documents across macOS,
        iPhone and iPad"
        https://bugs.webkit.org/show_bug.cgi?id=169145
        http://trac.webkit.org/changeset/214411

2017-03-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Clicking on the tracks button when the tracks panel is up in a media document pauses the video
        https://bugs.webkit.org/show_bug.cgi?id=168517
        <rdar://problem/30577636>

        Reviewed by Dean Jackson.

        We completely turn off default event handling in MediaDocument.cpp since we're implementing the
        behavior we expect to pause and resume the video in the modern-media-controls module already. This
        gets rid of this odd case where the content would not see the "click" event while the C++ side would
        handle it and pause the video.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._containerWasClicked): Deleted.
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):

2017-03-27  Youenn Fablet  <youenn@apple.com>

        Tighten RTCDatachannel creation and parameter getters
        https://bugs.webkit.org/show_bug.cgi?id=170081

        Reviewed by Eric Carlson.

        Covered by updated tests.

        Adding some parameter checks when creating data channels.
        Making some getters nullable as per the spec.

        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createDataChannel):
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createDataChannel):
        (WebCore::LibWebRTCMediaEndpoint::addDataChannel):
        * platform/mediastream/RTCDataChannelHandler.h:
        (): Deleted.

2017-03-27  Youenn Fablet  <youenn@apple.com>

        Add support for RTCRtpReceiver/RTCRtpSender getParameters
        https://bugs.webkit.org/show_bug.cgi?id=170057

        Reviewed by Alex Christensen.

        Test: webrtc/video-getParameters.html

        getParameters returns a dictionary of values taken from libwebrtc RtpReceiverInterface/RtpSenderInrterface objects.
        Added a direct link between WebCore RTCRtpReceiver and libwebrtc RtpReceiverInterface object.
        Making the link between WebCore RTCRtpSender and libwebrtc RtpSenderInrterface object through
        PeerConnectionBackend to keep the current architecture shared with OpenWebRTC.
        In the future, we should try to make the link more direct.

        Added routines to support the conversion from libwebrtc to WebCore.
        Ensured that RTCRtpReceiver is cleaning its backend when being stopped.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::setRemoteDescriptionTask):
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::getParameters):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::doClose):
        (WebCore::RTCPeerConnection::getParameters):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpParameters.h: Added.
        * Modules/mediastream/RTCRtpParameters.idl: Added.
        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::RTCRtpReceiver):
        * Modules/mediastream/RTCRtpReceiver.h:
        (WebCore::RTCRtpReceiver::Backend::~Backend):
        (WebCore::RTCRtpReceiver::Backend::getParameters):
        (WebCore::RTCRtpReceiver::create):
        (WebCore::RTCRtpReceiver::stop):
        (WebCore::RTCRtpReceiver::setBackend):
        (WebCore::RTCRtpReceiver::getParameters):
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::create):
        (WebCore::RTCRtpSender::RTCRtpSender):
        (WebCore::RTCRtpSender::replaceTrack):
        (WebCore::RTCRtpSender::getParameters):
        * Modules/mediastream/RTCRtpSender.h:
        (WebCore::RTCRtpSender::Backend::~Backend):
        (WebCore::RTCRtpSender::isStopped):
        (WebCore::RTCRtpSender::stop):
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::OnAddTrack):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        (WebCore::fillEncodingParameters):
        (WebCore::fillHeaderExtensionParameters):
        (WebCore::fillCodecParameters):
        (WebCore::fillRtpParameters):
        (WebCore::RTCRtpReceiverBackend::getParameters):
        (WebCore::LibWebRTCMediaEndpoint::getRTCRtpSenderParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::notifyAddedTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::getParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:

2017-03-27  Myles C. Maxfield  <mmaxfield@apple.com>

        font variation properties don't need to accept numbers
        https://bugs.webkit.org/show_bug.cgi?id=169357

        Reviewed by Antti Koivisto.

        The CSS Fonts level 4 spec stabilized the grammar accepted by font-weight,
        font-style, and font-stretch. The changes are that font-style and
        font-stretch no longer accept raw numbers, and the @font-face descriptor
        ranges are now separated by spaces instead of slashes.

        Tests: fast/text/font-selection-font-face-parse.html
               fast/text/font-selection-font-loading-api-parse.html
               fast/text/font-stretch-parse.html
               fast/text/font-style-parse.html
               fast/text/variations/font-selection-properties.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::fontWeightFromStyleValue):
        (WebCore::fontWeightFromStyle):
        (WebCore::ComputedStyleExtractor::fontStretchFromStyleValue):
        (WebCore::fontStretchFromStyle):
        (WebCore::ComputedStyleExtractor::fontStyleFromStyleValue):
        (WebCore::fontStyleFromStyle):
        * css/CSSComputedStyleDeclaration.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::style):
        (WebCore::FontFace::weight):
        (WebCore::FontFace::stretch):
        (WebCore::rangeIsSingleValue): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontStretchFromValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontWeightRange):
        (WebCore::consumeFontStretch):
        (WebCore::consumeFontStretchRange):
        (WebCore::consumeFontStyle):
        (WebCore::consumeFontStyleRange):

2017-03-27  Youenn Fablet  <youenn@apple.com>

        Further optimize checkWebRTCAvailability
        https://bugs.webkit.org/show_bug.cgi?id=169147

        Reviewed by Alex Christensen.

        Tested locally by removing libwebrtc.dylib.
        Replacing dlopen check by checking an exported symbol, rtc::LogMessage::LogToDebug.
        This check is more efficient and accurate. It should work in more configurations than the previous one.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::isNullFunctionPointer):
        (WebCore::LibWebRTCProvider::webRTCAvailable):

2017-03-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement format specifier for variation fonts
        https://bugs.webkit.org/show_bug.cgi?id=169327

        Reviewed by Simon Fraser.

        Variation fonts require the format("woff-variations"), format("truetype-variations"),
        and format("opentype-variations") format specifies in @font-face rules.

        Test: fast/text/variations/font-face-format.html

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat):

2017-03-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Make sure animation works for font-weight, font-stretch, and font-style
        https://bugs.webkit.org/show_bug.cgi?id=169683

        Reviewed by Simon Fraser.

        Hook up animation code for FontSelectionValues.

        Tests: animations/font-variations/font-stretch.html
               animations/font-variations/font-style.html
               animations/font-variations/font-weight.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontWeight):
        (WebCore::RenderStyle::setFontStretch):
        (WebCore::RenderStyle::setFontItalic):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fontWeight):
        (WebCore::RenderStyle::fontStretch):
        (WebCore::RenderStyle::fontItalic):

2017-03-27  Alex Christensen  <achristensen@webkit.org>

        Make WebSockets work in network process
        https://bugs.webkit.org/show_bug.cgi?id=169930

        Reviewed by Youenn Fablet.

        Covered by 136 existing tests in http/tests/websocket/tests/hybi
        This also does fine with the 544 websocket tests in the web-platform-tests which we have not yet imported.
        Also added http/tests/websocket/tests/hybi/network-process-crash-error.html
        to test a new condition that couldn't happen before this move: the NetworkProcess crashing.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        We were asserting that didCloseSocketStream was called.  It is still called,
        but not synchronously like it used to.  This assertion is now invalid, but tests
        that would hit it still pass.
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        CFWriteStreamCanAcceptBytes crashes if you give it a null parameter, and that can happen now.
        If we have no write stream, then we cannot write.  Tests that hit this pass still.

2017-03-27  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Improve media documents across macOS, iPhone and iPad
        https://bugs.webkit.org/show_bug.cgi?id=169145
        <rdar://problem/17048858>

        Reviewed by Dean Jackson.

        There were a variety of issues with media documents, some longstanding, and some specifically
        about modern media controls.

        One issue was that fullscreen and picture-in-picture buttons would show for audio media documents,
        due to using a <video> element to load the audio file. We now have additional logic in MediaController
        to identify if the loaded media is really an audio file, and using this information to hide the
        fullscreen and picture-in-picture buttons.

        Another issue was that we would inject style in MediaDocument.cpp that was specific to modern media
        controls when we could have the modern-media-controls module injected CSS handle this styling. We now
        use the injected style in the shadow root to size media documents based on the device characteristics
        and ensuring that page styles are overridden.

        We also simplify how MediaDocument.cpp sets the source of the media element to simply use the "src"
        attribute and not a <source> element.

        Finally, we introduce a MediaDocumentController class that is instantiated when we're dealing with
        a media document to hide the controls while we determine the type of media we're loading (audio vs.
        video) in order to apply the appropriate styling without flashes.

        As a result of the new styles applied by the modern-media-controls module, media documents have a
        similar behavior on macOS and iPad, where we only enforce a min-width for video allowing them
        to play at their natural size otherwise, and enforcing a fixed width for audio. On iPhone however,
        we want to always play the media at full width, with some padding in the case of audio.

        Tests: media/modern-media-controls/fullscreen-support/fullscreen-support-disabled-video-with-audio-tracks-only.html
               media/modern-media-controls/media-documents/ipad/media-document-audio-ios-sizing.html
               media/modern-media-controls/media-documents/ipad/media-document-video-ios-sizing.html
               media/modern-media-controls/media-documents/media-document-audio-ios-sizing.html
               media/modern-media-controls/media-documents/media-document-audio-mac-sizing.html
               media/modern-media-controls/media-documents/media-document-video-ios-sizing.html
               media/modern-media-controls/media-documents/media-document-video-mac-sizing.html
               media/modern-media-controls/pip-support/pip-support-disabled-video-with-audio-tracks-only.html

        * Modules/modern-media-controls/controls/ios-inline-media-controls.css:
        (:host(audio) .media-controls.ios.inline > .controls-bar:before,):
        (:host(audio) .media-controls.ios.inline > .controls-bar:before): Deleted.
        * Modules/modern-media-controls/controls/macos-media-controls.css:
        (:host(audio) .media-controls.mac.inline > .controls-bar,):
        (:host(audio) .media-controls.mac.inline > .controls-bar > .background-tint,):
        (:host(audio) .media-controls.mac.inline > .controls-bar): Deleted.
        (:host(audio) .media-controls.mac.inline > .controls-bar > .background-tint): Deleted.
        * Modules/modern-media-controls/controls/media-document.css: Added.
        (:host(.media-document)):
        (:host(.media-document.ready)):
        (:host(.media-document.audio.mac)):
        (:host(.media-document.audio.ipad)):
        (:host(.media-document.audio.iphone)):
        (:host(.media-document.video.mac)):
        (:host(.media-document.video.ipad)):
        (:host(.media-document.video.iphone)):
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/fullscreen-support.js:
        (FullscreenSupport.prototype.syncControl):
        (FullscreenSupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.get isAudio):
        * Modules/modern-media-controls/media/media-document-controller.js: Added.
        (MediaDocumentController):
        (MediaDocumentController.prototype.handleEvent):
        (MediaDocumentController.prototype._mediaDocumentHasMetadata):
        (MediaDocumentController.prototype._mediaDocumentHasSize):
        * Modules/modern-media-controls/media/pip-support.js:
        (PiPSupport.prototype.syncControl):
        (PiPSupport):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2017-03-25  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r214195): zillow.com header video doesn't resume when switching to another tab and back
        https://bugs.webkit.org/show_bug.cgi?id=170080
        <rdar://problem/31252522>

        Reviewed by Eric Carlson.

        The video header on zillow.com would pause when switching to another tab after r214195. On
        switching back to the zillow.com tab, we would resume the video but fail to take the poster
        away, making it look like the video is still paused.

        We normally take the poster away when HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable()
        is called. However, mediaPlayerFirstVideoFrameAvailable() was only ever called once because of
        the m_haveReportedFirstVideoFrame flag in MediaPlayerPrivateAVFoundation::updateStates().
        We now reset m_haveReportedFirstVideoFrame to false in updateStates() if hasAvailableVideoFrame()
        return false, so that we call mediaPlayerFirstVideoFrameAvailable() again when the return
        value of asAvailableVideoFrame() becomes true again (e.g. after the media session interruption
        has ended).

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):

2017-03-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] Add a UI delegate SPI hook to enable or disable navigation on drop
        https://bugs.webkit.org/show_bug.cgi?id=169168
        <rdar://problem/30688374>

        Reviewed by Tim Horton.

        Refactor client hooks for the drag destination action in WebCore to ask for the drag destination action mask
        upon initializing the DragData. In DragController, rather than setting m_dragDestinationAction to the result of
        m_client.actionMaskForDrag, we instead set it to the DragData's destination action.

        Tests to come in a future patch.

        * loader/EmptyClients.cpp:
        * page/DragClient.h:

        Rather than pass in a DragData, pass in only the platform data that we need to hand to the delegate. This is
        because we now ask for drag destination actions prior to creating the DragData.

        * page/DragController.cpp:
        (WebCore::DragController::dragEnteredOrUpdated):

        Update the available drag destination actions in WebCore using the destination actions stored in DragData rather
        than calling out to the client delegate.

        * loader/EmptyClients.cpp:
        * platform/DragData.cpp:
        (WebCore::DragData::DragData):
        * platform/DragData.h:
        (WebCore::DragData::dragDestinationAction):
        (WebCore::DragData::operator =):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::DragData):

2017-03-25  Aaron Chu  <aaron_chu@apple.com>

        AX: Media controls are unlabeled
        https://bugs.webkit.org/show_bug.cgi?id=169947
        <rdar://problem/30153323>

        Reviewed by Antoine Quint.

        Added a "label" property for Icons, which are used to set
        the aria-label for the controls in modern media controls.

        Test: Addition to all existing modern media controls tests.

        * English.lproj/modern-media-controls-localized-strings.js:
        * Modules/modern-media-controls/controls/icon-button.js:
        (IconButton.prototype.set iconName):
        (IconButton.prototype.handleEvent):
        (IconButton.prototype._loadImage):
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/controls/start-button.js:
        (StartButton):
        * Modules/modern-media-controls/js-files:

2017-03-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [XDG] MIMETypeRegistry::getMIMETypeForExtension should return a null/empty string when mime type is unknown
        https://bugs.webkit.org/show_bug.cgi?id=170050

        Reviewed by Michael Catanzaro.

        That's what the callers expect, but we alre always returning XDG_MIME_TYPE_UNKNOWN which is
        application/octet-stream.

        Fixes: plugins/no-mime-with-valid-extension.html

        * platform/xdg/MIMETypeRegistryXdg.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2017-03-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Add font-optical-sizing to CSSComputedStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=170083

        Reviewed by Joseph Pecoraro.

        Covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:

2017-03-24  Daniel Bates  <dabates@apple.com>

        media/restore-from-page-cache.html causes NoEventDispatchAssertion::isEventAllowedInMainThread() assertion failure
        https://bugs.webkit.org/show_bug.cgi?id=170087
        <rdar://problem/31254822>

        Reviewed by Simon Fraser.

        Reduce the scope of code that should never dispatch DOM events so as to allow updating contents size
        after restoring a page from the page cache.

        In r214014 we instantiate a NoEventDispatchAssertion in FrameLoader::commitProvisionalLoad()
        around the call to CachedPage::restore() to assert when a DOM event is dispatched during
        page restoration as such events can cause re-entrancy into the page cache. As it turns out
        it is sufficient to ensure that no DOM events are dispatched after restoring all cached frames
        as opposed to after CachedPage::restore() returns.

        Also rename Document::enqueue{Pageshow, Popstate}Event() to dispatch{Pageshow, Popstate}Event(),
        respectively, since they synchronously dispatch events :(. We hope in the future to make them
        asynchronously dispatch events.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Update for renaming.
        (WebCore::Document::statePopped): Ditto.
        (WebCore::Document::dispatchPageshowEvent): Renamed; formerly named enqueuePageshowEvent().
        (WebCore::Document::dispatchPopstateEvent): Renamed; formerly named enqueuePopstateEvent().
        (WebCore::Document::enqueuePageshowEvent): Deleted.
        (WebCore::Document::enqueuePopstateEvent): Deleted.
        * dom/Document.h:
        * history/CachedPage.cpp:
        (WebCore::firePageShowAndPopStateEvents): Moved logic from FrameLoader::didRestoreFromCachedPage() to here.
        (WebCore::CachedPage::restore): Modified to call firePageShowAndPopStateEvents().
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Removed use of NoEventDispatchAssertion RAII object. We
        will instantiate it in CachedPage::restore() with a smaller scope.
        (WebCore::FrameLoader::didRestoreFromCachedPage): Deleted; moved logic from here to WebCore::firePageShowAndPopStateEvents().
        * loader/FrameLoader.h:

2017-03-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214361.

        This change caused flakiness in http/tests/preload tests.

        Reverted changeset:

        "Add a warning for unused link preloads."
        https://bugs.webkit.org/show_bug.cgi?id=165670
        http://trac.webkit.org/changeset/214361

2017-03-24  Antoine Quint  <graouts@webkit.org>

        [Modern Media Controls] Remove placard icon if height is compressed
        https://bugs.webkit.org/show_bug.cgi?id=167935
        <rdar://problem/30397128>

        Reviewed by Dean Jackson.

        We make the addition of certain Placard children conditional on the placard's metrics. Whenever the
        media controls metrics changes, the placard, if any, is set to have the same metrics and layout() is
        called where we ensure that there is enough space, per designs, to have the icon, description and even
        the title visible. We also make some CSS improvements to guarantee that the description is laid out on
        two lines at most and that both text labels are trimmed elegantly with an ellipsis shold the width be
        insufficient to display the whole text.

        Since we would have needed to have more width/height setter overrides to trigger layout, we now make
        LayoutNode trigger layout() directly and remove the need for subclasses to do this on a per-class basis.
        We also make layout() a method that can be called safely anytime as it's now no longer part of the DOM
        commit step, a new commit() method is used instead of that.

        Tests: media/modern-media-controls/layout-node/node-made-dirty-during-commit.html
               media/modern-media-controls/media-controls/media-controls-placard-compressed-metrics.html

        * Modules/modern-media-controls/controls/layout-node.js:
        (LayoutNode.prototype.set width):
        (LayoutNode.prototype.set height):
        Trigger a call to layout() anytime "width" or "height" is set on any LayoutNode.

        (LayoutNode.prototype.layout):
        (LayoutNode.prototype.commit):
        (performScheduledLayout):
        Make layout() an empty method that subclasses can override easily outside of the DOM commit cycle,
        its previous implementation is now called "commit()" which is a more accurate name.

        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.get placard):
        (MediaControls.prototype.get showsPlacard):
        (MediaControls.prototype.showPlacard):
        (MediaControls.prototype.hidePlacard):
        (MediaControls.prototype.layout):
        (MediaControls.prototype.get width): Deleted.
        (MediaControls.prototype.set width): Deleted.
        Add a "placard" property to make it simpler to reference the placard instead of making assumptions in
        several places in that class on the children order. Anytime we run a layout or show the placard, ensure
        that the placard metrics are synced with the media controls metrics.

        * Modules/modern-media-controls/controls/placard.css:
        (.placard .container):
        (.placard .title,):
        (.placard .description):
        We now ensure that both the title and description are trimmed with an ellipsis when we run out of space
        to display them fully.

        * Modules/modern-media-controls/controls/placard.js:
        (Placard.):
        (Placard.prototype.layout):
        We add new constraints to only show the icon, title and description if the placard is tall and wide enough.

        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.get width): Deleted.
        (Slider.prototype.set width): Deleted.
        Removed custom "width" getters and setters now we can just override layout() in case node metrics change.

        * Modules/modern-media-controls/controls/time-control.js:
        (TimeControl.prototype.set useSixDigitsForTimeLabels):
        (TimeControl.prototype.layout):
        (TimeControl.prototype.get width): Deleted.
        (TimeControl.prototype.set width): Deleted.
        (TimeControl.prototype._availableWidthHasChanged): Deleted.
        Removed custom "width" getters and setters now we can just override layout() in case node metrics change.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        Ensure we flush pending updates at construction time so that we match the size of the media controls right
        at the first media layout.

2017-03-24  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] "ideal" constraints passed to getUserMedia should affect fitness score
        https://bugs.webkit.org/show_bug.cgi?id=170056

        Reviewed by Youenn Fablet.

        Include the fitness score calculated for ideal constraints in the calculation of a capture
        overall device fitness score. 

        No new tests, existing tests updated.

        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::StringConstraint::fitnessDistance): Drive-by fix: return early if ideal is empty,
        not exact.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate): Return fitness distance.
        (WebCore::RealtimeMediaSource::selectSettings): Include the fitness distance of supported
        ideal constraints.
        (WebCore::RealtimeMediaSource::supportsConstraint): New.
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): Sort candidate sources
        by their fitness score.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::initializeCapabilities): Each video source should support
        one facing mode, not both.

2017-03-24  Dean Jackson  <dino@apple.com>

        Serialization of custom props in longhand should be "" not value of shorthand
        https://bugs.webkit.org/show_bug.cgi?id=167699
        <rdar://problem/30324200>

        Reviewed by Sam Weinig.

        https://www.w3.org/TR/css-variables/#variables-in-shorthands says
        "Pending-substitution values must be serialized as the empty string, if
        an API allows them to be observed."

        We were returning the cssText instead.

        Test: fast/css/variables/rule-property-get.html has been updated.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue): Return the empty string
        if we're a pending substitution value.

2017-03-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the ToT build on the latest SDK.

        Add deprecated declaration guards around two synchronous UIItemProvider methods in WebItemProviderPasteboard.
        <rdar://problem/30451096> tracks adoption of the asynchronous versions of these methods.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard dataForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard _tryToCreateAndAppendObjectOfClass:toArray:usingProvider:]):

2017-03-24  Antoine Quint  <graouts@webkit.org>

        [Modern Media Controls] Captions don't move with the appearance of the inline controls
        https://bugs.webkit.org/show_bug.cgi?id=170051
        <rdar://problem/30754428>

        Reviewed by Dean Jackson.

        We now size the captions container to account for the controls bar height when visible. To do this,
        we use CSS variables to specify the height of the controls bar in default inline mode, compact inline
        mode and fullscreen mode.

        Test: media/modern-media-controls/tracks-support/tracks-support-captions-offset-with-controls-bar.html

        * Modules/modern-media-controls/controls/controls-bar.js:
        (ControlsBar.prototype.set faded):
        Notify the hosting MediaControls that the "faded" property changed.

        * Modules/modern-media-controls/controls/ios-inline-media-controls.css:
        (.media-controls.ios.inline > .controls-bar):
        Use the new --inline-controls-bar-height CSS variable to specify the inline bar height.

        * Modules/modern-media-controls/controls/macos-compact-inline-media-controls.css:
        (.media-controls.mac.inline.compact > .controls-bar):
        Use the new --inline-compact-controls-bar-height CSS variable to specify the inline bar height.

        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.css:
        (.media-controls.mac.fullscreen > .controls-bar):
        Use the new --fullscreen-controls-bar-height CSS variable to specify the inline bar height.

        * Modules/modern-media-controls/controls/macos-inline-media-controls.css:
        (.media-controls.mac.inline > .controls-bar):
        Use the new --inline-controls-bar-height CSS variable to specify the inline bar height.

        * Modules/modern-media-controls/controls/media-controls.css:
        (*):
        Specify new CSS variables for the various controls bar heights.

        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.controlsBarFadedStateDidChange):
        Notify the delegate of a controls bar "faded" property change. 

        * Modules/modern-media-controls/controls/text-tracks.css:
        (video::-webkit-media-text-track-container):
        (video::-webkit-media-text-track-container.visible-controls-bar):
        (video::-webkit-media-text-track-container.visible-controls-bar.compact-controls-bar):
        (video::-webkit-media-text-track-display):
        Shorten the height of the captions container when the controls bar is visible. We also
        fix a couple of prefixed properties that didn't need to be.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.controlsBarFadedStateDidChange):
        (MediaController.prototype._updateControlsIfNeeded):
        (MediaController.prototype._updateTextTracksClassList):
        (MediaController):
        Ensure we reflect the "faded" state of the controls bar on the captions container using
        a CSS class, as well as whether the controls bar mode is compact.

2017-03-24  Brent Fulgham  <bfulgham@apple.com>

        Handle recursive calls to ProcessingInstruction::checkStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=169982
        <rdar://problem/31083051>

        Reviewed by Antti Koivisto.

       See if we triggered a recursive load of the stylesheet during the 'beforeload'
       event handler. If so, reset to a valid state before completing the load.

       We should also check after 'beforeload' that we were not disconnected from (or
       moved to a new) document.

       I also looked for other cases of this pattern and fixed them, too.

       Tests: fast/dom/beforeload/image-removed-during-before-load.html
               fast/dom/beforeload/recursive-css-pi-before-load.html
               fast/dom/beforeload/recursive-link-before-load.html
               fast/dom/beforeload/recursive-xsl-pi-before-load.html

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::clearExistingCachedSheet): Added.
        (WebCore::ProcessingInstruction::checkStyleSheet): Prevent recursive calls into
        this function during 'beforeload' handling. Also, safely handle the case where
        the element was disconnected in the 'beforeload' handler (similar to what
        we do in HTMLLinkElement).
        (WebCore::ProcessingInstruction::setCSSStyleSheet): Drive-by Fix: Protect the
        current document to match what we do in setXSLStyleSheet.
        * dom/ProcessingInstruction.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Prevent recursive calls into
        this function during 'beforeload' handling.
        * html/HTMLLinkElement.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent): safely handle the case where
        the element was disconnected in the 'beforeload' handler (similar to what
        we do in HTMLLinkElement).
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::hasPendingSheet): Added.
        * style/StyleScope.h:

2017-03-24  Brady Eidson  <beidson@apple.com>

        A null compound index value crashes the Databases process.
        <rdar://problem/30499831> and https://bugs.webkit.org/show_bug.cgi?id=170000

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/single-entry-index-invalid-key-crash.html

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createKeyPathArray): Fix the bug by rejecting arrays with any invalid keys in them.
        
        Add some logging:
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::loggingString):
        * Modules/indexeddb/IDBKeyPath.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::loggingString):

2017-03-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r214360.

        This change caused 20+ LayoutTest failures.

        Reverted changeset:

        "Handle recursive calls to
        ProcessingInstruction::checkStyleSheet"
        https://bugs.webkit.org/show_bug.cgi?id=169982
        http://trac.webkit.org/changeset/214360

2017-03-24  Youenn Fablet  <youenn@apple.com>

        Add support for qpSum in WebRTC stats
        https://bugs.webkit.org/show_bug.cgi?id=170060

        Reviewed by Eric Carlson.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fillRTCRTPStreamStats): exposing libwebrtc qpSum value.

2017-03-24  Daniel Bates  <dabates@apple.com>

        Prevent new navigations during document unload
        https://bugs.webkit.org/show_bug.cgi?id=169934
        <rdar://problem/31247584>

        Reviewed by Chris Dumez.

        Similar to our policy of preventing new navigations from onbeforeunload handlers
        we should prevent new navigations that are initiated during the document unload
        process.

        The significant part of this change is the instantiation of the RAII object NavigationDisabler
        in Document::prepareForDestruction(). The rest of this change just renames class
        NavigationDisablerForBeforeUnload to NavigationDisabler now that this RAII class is
        used to prevent navigation from both onbeforeunload event handlers and when unloading
        a document.

        Test: fast/frames/frame-unload-navigate-and-setTimeout-assert-fail.html

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Disable new navigations when disconnecting
        subframes. Also assert that the document is not in the page cache before we fall off
        the end of the function.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isNavigationAllowed): Update for renaming below.
        (WebCore::FrameLoader::shouldClose): Ditto.
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::shouldScheduleNavigation): Ditto.
        * loader/NavigationScheduler.h:
        (WebCore::NavigationDisabler::NavigationDisabler): Renamed class; formerly named NavigationDisablerForBeforeUnload.
        (WebCore::NavigationDisabler::~NavigationDisabler): Ditto.
        (WebCore::NavigationDisabler::isNavigationAllowed): Ditto.
        (WebCore::NavigationDisablerForBeforeUnload::NavigationDisablerForBeforeUnload): Deleted.
        (WebCore::NavigationDisablerForBeforeUnload::~NavigationDisablerForBeforeUnload): Deleted.
        (WebCore::NavigationDisablerForBeforeUnload::isNavigationAllowed): Deleted.

2017-03-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement font-optical-sizing
        https://bugs.webkit.org/show_bug.cgi?id=168895

        Reviewed by Dean Jackson.

        Upon advice from Microsoft, the only input to optical sizing is just the
        font-size computed value. It is implemented by setting the 'opsz' font
        variation axis. Because the propery has such a simple grammar, the
        implementation is quite straightforward.

        Test: fast/text/variations/optical-sizing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator FontOpticalSizing):
        * css/CSSProperties.json:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagsKey):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::opticalSizing):
        (WebCore::FontDescription::setOpticalSizing):
        (WebCore::FontDescription::operator==):
        (WebCore::FontCascadeDescription::initialOpticalSizing):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/text/TextFlags.h:

2017-03-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r214329.

        Significantly regressed Speedometer

        Reverted changeset:

        "window.crypto.getRandomValues() uses the insecure RC4 RNG"
        https://bugs.webkit.org/show_bug.cgi?id=169623
        http://trac.webkit.org/changeset/214329

2017-03-24  Yoav Weiss  <yoav@yoav.ws>

        Add a warning for unused link preloads.
        https://bugs.webkit.org/show_bug.cgi?id=165670

        Reviewed by Youenn Fablet.

        This patch adds a warning message, to warn developers that are using
        link preloads in cases where the downloaded resource is likely to
        remain unused.

        Test: http/tests/preload/unused_preload_warning.html

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Stop the timer once the document is destructed.
        * loader/LinkPreloadResourceClients.h: Add shouldMarkAsReferenced overides for the LinkPreloadResourceClient classes.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet): Make sure LinkPreloadResourceClients don't set resource to be referenced.
        * loader/cache/CachedResourceClient.h:
        (WebCore::CachedResourceClient::shouldMarkAsReferenced): Make sure that ResourceClients mark preloads as referenced by default.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader): Initialize timer.
        (WebCore::CachedResourceLoader::~CachedResourceLoader): Stop timer.
        (WebCore::CachedResourceLoader::warnUnusedPreloads): Iterate over m_preloads and issue a warning for non-referenced preloads.
        (WebCore::CachedResourceLoader::documentDidFinishLoadEvent): Trigger a timer if preloads weren't cleared at load time.
        (WebCore::CachedResourceLoader::warnUnusedPreloads): Triggered by the timer, and called CachedResourceLoader::warnUnusedPreloads.
        (WebCore::CachedResourceLoader::stopUnusedPreloadsTimer): Stop the timer.

2017-03-24  Brent Fulgham  <bfulgham@apple.com>

        Handle recursive calls to ProcessingInstruction::checkStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=169982
        <rdar://problem/31083051>

        Reviewed by Antti Koivisto.

        See if we triggered a recursive load of the stylesheet during the 'beforeload'
        event handler. If so, reset to a valid state before completing the load.

        We should also check after 'beforeload' that we were not disconnected from (or
        moved to a new) document.

        I also looked for other cases of this pattern and fixed them.

        Tests: fast/dom/beforeload/image-removed-during-before-load.html
               fast/dom/beforeload/recursive-css-pi-before-load.html
               fast/dom/beforeload/recursive-link-before-load.html
               fast/dom/beforeload/recursive-xsl-pi-before-load.html

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::clearExistingCachedSheet): Added.
        (WebCore::ProcessingInstruction::checkStyleSheet): Reset to valid state
        if necessary after the 'beforeload' handler. Also, safely handle the case where
        the element was disconnected in the 'beforeload' handler (similar to what
        we do in HTMLLinkElement).
        (WebCore::ProcessingInstruction::setCSSStyleSheet): Drive-by Fix: Protect the
        current document to match what we do in setXSLStyleSheet.
        * dom/ProcessingInstruction.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectMediaResource): Safely handle the case where
        the element was disconnected in the 'beforeload' handler.
        (WebCore::HTMLMediaElement::selectNextSourceChild): Ditto.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent): Ditto.

2017-03-24  Myles C. Maxfield  <mmaxfield@apple.com>

        font-style needs a new CSSValue to make CSSRule.cssText work correctly
        https://bugs.webkit.org/show_bug.cgi?id=169258

        Reviewed by David Hyatt.

        With variation fonts, font-style's value can't be captured in a CSSPrimitiveValue (nor any other subclass
        off CSSValue) any more. Instead, we need to create two new CSSValues which represent the grammar that font-
        style and it's associated @font-face descriptor accept.

        The grammar of the font-style property is "normal | italic | oblique [ <<angle>> ]?"
        The grammar of the font-style descriptor is "normal | italic | oblique [ <<angle>> | <<angle>> <<angle>> ]?"

        We currently still support numbers in place of the <<angle>> value (contrary to the spec). We will remove
        this support in https://bugs.webkit.org/show_bug.cgi?id=169357.

        Tests: fast/text/font-selection-font-face-parse.html:
               fast/text/font-style-parse.html:

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontStyleFromStyle):
        (WebCore::fontShorthandValueForSelectionProperties):
        * css/CSSFontFace.cpp:
        (WebCore::calculateWeightRange):
        (WebCore::calculateStretchRange):
        (WebCore::calculateItalicRange):
        * css/CSSFontFaceSet.cpp:
        (WebCore::computeFontSelectionRequest):
        (WebCore::CSSFontFaceSet::matchingFaces):
        (WebCore::calculateWeightValue): Deleted.
        (WebCore::calculateStretchValue): Deleted.
        (WebCore::calculateStyleValue): Deleted.
        * css/CSSFontFaceSet.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSFontStyleRangeValue.cpp: Added.
        (WebCore::CSSFontStyleRangeValue::customCSSText):
        (WebCore::CSSFontStyleRangeValue::equals):
        * css/CSSFontStyleRangeValue.h: Added.
        * css/CSSFontStyleValue.cpp: Added.
        (WebCore::CSSFontStyleValue::customCSSText):
        (WebCore::CSSFontStyleValue::equals):
        * css/CSSFontStyleValue.h: Added.
        * css/CSSFontValue.cpp:
        (WebCore::CSSFontValue::customCSSText):
        * css/CSSFontValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isFontStyleValue):
        (WebCore::CSSValue::isFontStyleRangeValue):
        * css/FontFace.cpp:
        (WebCore::FontFace::style):
        (WebCore::FontFace::weight):
        (WebCore::FontFace::stretch):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontWeightFromValue):
        (WebCore::StyleBuilderConverter::convertFontStretchFromValue):
        (WebCore::StyleBuilderConverter::convertFontStyleFromValue):
        (WebCore::StyleBuilderConverter::convertFontWeight):
        (WebCore::StyleBuilderConverter::convertFontStretch):
        (WebCore::StyleBuilderConverter::convertFontStyle):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontStyle):
        (WebCore::consumeFontStyleRange):
        (WebCore::CSSPropertyParser::consumeSystemFont):
        (WebCore::CSSPropertyParser::consumeFont):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::parseAttribute):

2017-03-24  Alex Christensen  <achristensen@webkit.org>

        REGRESSION: Content Blocker: Blocking "a[href*=randomString]" doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=169167

        Reviewed by Simon Fraser.

        When testing content extensions, we have always called an API function that internally
        has called AtomicString::init somewhere before we start compiling the content extension.
        On iOS, though, we call [_WKUserContentExtensionStore compileContentExtensionForIdentifier:...]
        without having already called anything that calls AtomicString::init.  The new CSS parser is now
        failing to parse some selectors because CSSSelectorParser::defaultNamespace is returning starAtom,
        which is a null atomic string before AtomicString::init is called.

        Covered by a new API test.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::isValidCSSSelector):
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::isValidSelector): Deleted.
        * contentextensions/ContentExtensionParser.h:
        Call AtomicString::init before checking if a css selector is valid.

2017-03-24  Youenn Fablet  <youenn@apple.com>

        Add libwebrtc backend support for RTCRtpSender::replaceTrack
        https://bugs.webkit.org/show_bug.cgi?id=169841

        Reviewed by Alex Christensen.

        Tests: webrtc/audio-replace-track.html
               webrtc/video-replace-track.html

        Adding support for replaceTrack for audio and video sources.
        Replacing tracks will always succeed for audio sources.
        For video tracks, it will only succeed if the video resolution is not greater.
        LibWebRTCPeerConnectionBackend will delegate the track replacing by replacing the source of the outgoing sources with the source wrapped in the replacing track.

        Video test is not fully passing as size constraints for mock video sources are not providing the right video stream resolution.

        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::replaceTrack):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::setSource):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::setSource):
        * platform/mediastream/mac/RealtimeOutgoingVideoSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText):
        (WebCore::MockRealtimeVideoSource::generateFrame):

2017-03-24  Jon Lee  <jonlee@apple.com>

        Remove comment from RTCStatsReport.idl to convert ssrc to DOMString.
        Unreviewed.

        Latest available Editor's Draft of WebRTC Statistics API is from 14 December 2016,
        but since then, in https://github.com/w3c/webrtc-stats/pull/157, it was changed to become
        unsigned long.

        * Modules/mediastream/RTCStatsReport.idl:

2017-03-24  Youenn Fablet  <youenn@apple.com>

        Add support for DataChannel and MediaStreamTrack stats
        https://bugs.webkit.org/show_bug.cgi?id=170031

        Reviewed by Eric Carlson.

        Tests: webrtc/datachannel/datachannel-stats.html
               webrtc/video-mediastreamtrack-stats.html

        Exposing libwebrtc stats through WebRTC stats API, gathered for data channel and media stream tracks.

        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::MediaStreamTrackStats::MediaStreamTrackStats):
        (WebCore::RTCStatsReport::DataChannelStats::DataChannelStats):
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fillRTCMediaStreamTrackStats):
        (WebCore::fillRTCDataChannelStats):
        (WebCore::LibWebRTCMediaEndpoint::StatsCollector::OnStatsDelivered):

2017-03-24  Youenn Fablet  <youenn@apple.com>

        Fix framesEncoded/framesDecoded RTC stats
        https://bugs.webkit.org/show_bug.cgi?id=170024

        Reviewed by Eric Carlson.

        Test: webrtc/video-stats.html

        Adding access to these fields now that they are available.

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

2017-03-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ test /webkit2/WebKitWebView/default-menu after r214244.

        Fix mnemonic string of contextMenuItemTagOpenAudioInNewWindow() that I copy pasted from
        contextMenuItemTagOpenVideoInNewWindow().

        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):

2017-03-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] MediaPlayerPrivateGStreamerOwr shouldn't be the default engine
        https://bugs.webkit.org/show_bug.cgi?id=170049

        Reviewed by Žan Doberšek.

        This is causing several media tests to fail after r214338. When trying to load something like this:

        http://127.0.0.1:8000/media/resources/serve-video.php?name=../../../../media/content/silence.wav&type=audio/wav&content-length=no&icy-data=yes

        since r214338, the content type is known and inferred from the extension in this case, what ends up calling
        nextMediaEngine() in MediaPlayer::loadWithNextMediaEngine. That returns the first registered media engine, that
        is Owr that doesn't know how to load that and fails.

        Fixes: http/tests/media/media-play-stream-chunked-icy.html
               http/tests/media/media-seeking-no-ranges-server.html
               http/tests/media/video-auth.html
               http/tests/media/video-play-stall-before-meta-data.html
               http/tests/security/contentSecurityPolicy/audio-redirect-allowed.html
               http/tests/security/contentSecurityPolicy/audio-redirect-allowed2.html
               http/tests/security/contentSecurityPolicy/audio-redirect-blocked.html
               http/tests/security/contentSecurityPolicy/video-redirect-allowed.html
               http/tests/security/contentSecurityPolicy/video-redirect-allowed2.html
               http/tests/security/contentSecurityPolicy/video-redirect-blocked.html

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):

2017-03-24  Per Arne Vollan  <pvollan@apple.com>

        Text stroke is sometimes clipped on video captions.
        https://bugs.webkit.org/show_bug.cgi?id=170006

        Reviewed by Eric Carlson.

        Set 'overflow' property to 'visible' on cue element to avoid clipping of text stroke.

        Updated test media/track/track-css-stroke-cues.html.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):

2017-03-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add MIMETypeRegistry implementation using xdgmime and remove the GTK+ one
        https://bugs.webkit.org/show_bug.cgi?id=170001

        Reviewed by Michael Catanzaro.

        The XDG implementation could be used by any port where shared-mime-info is expected to be available. It also
        improves the current GTK+ implementation that is based on a very small map of mime types and extensions.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * platform/xdg/MIMETypeRegistryXdg.cpp: Renamed from Source/WebCore/platform/gtk/MIMETypeRegistryGtk.cpp.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):

2017-03-23  Jon Lee  <jonlee@apple.com>

        Update createDataChannel on RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=170044

        Reviewed by Youenn Fablet.

        * Modules/mediastream/RTCPeerConnection.idl: Change label to USVString.

2017-03-23  Antti Koivisto  <antti@apple.com>

        Revert r213712, caused iPad PLT regression
        https://bugs.webkit.org/show_bug.cgi?id=170040

        Unreviewed.

        A few subtests have big regressions.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::shouldScheduleLayout):
        (WebCore::Document::didRemoveAllPendingStylesheet):
        * dom/Document.h:
        (WebCore::Document::didLayoutWithPendingStylesheets):
        (WebCore::Document::hasNodesWithPlaceholderStyle):
        (WebCore::Document::setHasNodesWithPlaceholderStyle):
        (WebCore::Document::hasNodesWithNonFinalStyle): Deleted.
        (WebCore::Document::setHasNodesWithNonFinalStyle): Deleted.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::rendererIsNeeded):
        * page/FrameView.cpp:
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty):
        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents):
        * rendering/RenderLayer.cpp:
        (WebCore::shouldSuppressPaintingLayer):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaint):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isPlaceholderStyle):
        (WebCore::RenderStyle::setIsPlaceholderStyle):
        (WebCore::RenderStyle::isNotFinal): Deleted.
        (WebCore::RenderStyle::setIsNotFinal): Deleted.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::analyzeStyleSheetChange):
        (WebCore::Style::Scope::updateActiveStyleSheets):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::makePlaceholderStyle):
        (WebCore::Style::TreeResolver::styleForElement):
        (WebCore::Style::TreeResolver::resolveElement):

2017-03-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Dragging on a large image should not revert to a file icon if data interaction is enabled
        https://bugs.webkit.org/show_bug.cgi?id=170018
        <rdar://problem/31184508>

        Reviewed by Tim Horton.

        If data interaction is enabled, don't fall back to showing a file icon when initiating a drag on an image element.

        New API tests:  DataInteractionTests.LargeImageToTargetDiv
                        DataInteractionTests.AttachmentElementItemProviders

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::shouldUseCachedImageForDragImage):
        * page/DragController.h:

2017-03-23  Youenn Fablet  <youenn@apple.com>

        Rename RTCIceCandidateEvent to RTCPeerConnectionIceEvent
        https://bugs.webkit.org/show_bug.cgi?id=169981

        Reviewed by Eric Carlson.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::fireICECandidateEvent):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnectionIceEvent.cpp: Renamed from Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.cpp.
        (WebCore::RTCPeerConnectionIceEvent::create):
        (WebCore::RTCPeerConnectionIceEvent::RTCPeerConnectionIceEvent):
        (WebCore::RTCPeerConnectionIceEvent::~RTCPeerConnectionIceEvent):
        (WebCore::RTCPeerConnectionIceEvent::candidate):
        (WebCore::RTCPeerConnectionIceEvent::eventInterface):
        * Modules/mediastream/RTCPeerConnectionIceEvent.h: Renamed from Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.h.
        * Modules/mediastream/RTCPeerConnectionIceEvent.idl: Renamed from Source/WebCore/Modules/mediastream/RTCIceCandidateEvent.idl.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.in:

2017-03-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        window.crypto.getRandomValues() uses the insecure RC4 RNG
        https://bugs.webkit.org/show_bug.cgi?id=169623

        Reviewed by Alex Christensen.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::randomData): Use this on Mac now.
        * crypto/mac/CryptoKeyMac.cpp: Removed.
        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues): Rollout r214188.

2017-03-23  Chris Dumez  <cdumez@apple.com>

        SVG animations are not paused when their <svg> element is removed from the document
        https://bugs.webkit.org/show_bug.cgi?id=170030
        <rdar://problem/31230252>

        Reviewed by Dean Jackson.

        SVG animations were not paused when their <svg> element was removed from the document.
        This patch fixes the issue.

        Test: svg/animations/animations-paused-when-removed-from-document.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::insertedInto):
        (WebCore::SVGSVGElement::removedFrom):

2017-03-22  Myles C. Maxfield  <mmaxfield@apple.com>

        font shorthand should accept variation values
        https://bugs.webkit.org/show_bug.cgi?id=168998

        Reviewed by Simon Fraser.

        The CSS Fonts 4 spec has stabilized as to which variation values are allowed in
        the font shorthand property. Weights are allowed because a 0 weight is considered
        as a parse error, so there is no conflict with a unitless font-size of 0.
        font-style accepts angles, so there is no conflict there. However, font-stretch
        accepts percentages, which are also accepted by font-size, which means the newly
        extended grammar for font-stretch can't be accepted in the shorthand.

        Tests: fast/text/font-style-parse.html
               fast/text/font-weight-parse.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontWeight):
        (WebCore::consumeFontStyle):
        (WebCore::CSSPropertyParser::consumeFont):
        (WebCore::consumeFontWeightCSS21): Deleted.
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
        * css/parser/CSSPropertyParserHelpers.h:

2017-03-23  Chris Dumez  <cdumez@apple.com>

        SVG animations are not paused when inserted into a hidden page
        https://bugs.webkit.org/show_bug.cgi?id=170026
        <rdar://problem/31228704>

        Reviewed by Andreas Kling.

        SVG animations were not paused when inserted into a hidden page. We would pause
        animations in a page when the page becomes hidden. However, new animations
        inserted in the page after this point would start, despite the page being
        hidden.

        Tests:
        - svg/animations/animations-paused-when-inserted-in-hidden-document.html
        - svg/animations/animations-paused-when-inserted-in-hidden-document2.html

        * dom/Document.cpp:
        (WebCore::Document::accessSVGExtensions):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::addTimeContainer):
        (WebCore::reportMessage):
        * svg/SVGDocumentExtensions.h:
        * testing/Internals.cpp:
        (WebCore::Internals::areSVGAnimationsPaused):
        * testing/Internals.h:
        * testing/Internals.idl:

== Rolled over to ChangeLog-2017-03-23 ==
