2017-12-22  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2018
        https://bugs.webkit.org/show_bug.cgi?id=181141

        Reviewed by Dan Bernstein.

        * Info.plist:

2017-12-30  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r225122): fePointLights don't work
        https://bugs.webkit.org/show_bug.cgi?id=181142

        Reviewed by Dan Bates.

        r225122 refactored the initialLightingData code, but failed to set the lighting
        color in the return value of PointLightSource::computePixelLightingData, so fePointLights
        always used black.

        Also fix a spelling error in initialLightingData.

        Tests: svg/filters/fePointLight-color.svg

        * platform/graphics/filters/DistantLightSource.cpp:
        (WebCore::DistantLightSource::initPaintingData):
        (WebCore::DistantLightSource::computePixelLightingData const):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        (WebCore::PointLightSource::computePixelLightingData const):
        * platform/graphics/filters/SpotLightSource.cpp:
        (WebCore::SpotLightSource::computePixelLightingData const):

2017-12-31  Simon Fraser  <simon.fraser@apple.com>

        Bottom right pixel of feDiffuseLighting has the wrong color
        https://bugs.webkit.org/show_bug.cgi?id=181203

        Reviewed by Antti Koivisto.

        The lower right pixel of a feDiffuseLighting was the wrong color, because the kernel
        values didn't match the spec for the bottom right Y values.

        Test: svg/filters/feDiffuseLighting-bottomRightPixel.html

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::LightingData::bottomRightNormal const):

2017-12-30  Simon Fraser  <simon.fraser@apple.com>

        SVG lighting colors need to be converted into linearSRGB
        https://bugs.webkit.org/show_bug.cgi?id=181196

        Reviewed by Dan Bates.

        SVG filters, like feLighting, that poke values directly into buffers rather than going
        through CG like feFlood, need to convert colors into the operating color space. So add
        conversion functions to go between linear and sRGB colors, and use these in feLighting,
        and in ImageBuffer (which is only used for non-CG platforms).

        Tests: svg/filters/feSpotLight-color.svg

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::linearToSRGBColorComponent):
        (WebCore::sRGBToLinearColorComponent):
        (WebCore::linearToSRGBColor):
        (WebCore::sRGBToLinearColor):
        * platform/graphics/ColorUtilities.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::transformColorSpace):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):

2017-12-31  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Avoid promises being destroyed in secondary threads
        https://bugs.webkit.org/show_bug.cgi?id=180499
        <rdar://problem/35890680>

        Reviewed by Youenn Fablet.

        This patch adds pending promise queue to SubtleCrypto such that it no longer
        passes promises around different threads, which could cause crashes when
        promises are destroyed in secondary threads.

        Covered by existing tests.

        * crypto/SubtleCrypto.cpp:
        (WebCore::getPromise):
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::digest):
        (WebCore::SubtleCrypto::generateKey):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::exportKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/SubtleCrypto.h:

2017-12-30  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r225494): Mouse pointer reappears shortly after hiding when scrolling using arrow keys
        https://bugs.webkit.org/show_bug.cgi?id=181193

        Reviewed by Alexey Proskuryakov.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::cancelAutoHideCursorTimer): Removed a call to unhide the cursor
          here.

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

        [Attachment Support] Remove current macOS support for dragging file-backed attachments
        https://bugs.webkit.org/show_bug.cgi?id=181188

        Reviewed by Dan Bernstein.

        Support for dragging attachments out as files on the NSPasteboard was introduced in r181760. However, this is
        (1) a macOS-specific implementation, and (2) does not support attachments whose files are backed by inline data
        rather than a filepath. As part of adding further WebKit attachment element support, subsequent patches will
        reimplement support for dragging attachment elements in a cross-Cocoa-platform way that also allows for either
        data- or file-backed blobs to be written to the pasteboard.

        No new functionality; no new tests. All existing layout and API tests still pass.

        * page/DragClient.h:
        (WebCore::DragClient::declareAndWriteDragImage):
        (WebCore::DragClient::declareAndWriteAttachment): Deleted.
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        (WebCore::DragController::draggingImageURL const):
        (WebCore::DragController::draggingAttachmentURL const): Deleted.
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::declareAndWriteAttachment): Deleted.
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::declareAndWriteAttachment): Deleted.
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::declareAndWriteAttachment): Deleted.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteAttachmentURL const): Deleted.
        * rendering/HitTestResult.h:

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

        RenderTreeUpdater::GeneratedContent should hold a weak reference to RenderQuote.
        https://bugs.webkit.org/show_bug.cgi?id=181185
        <rdar://problem/36235307>

        Reviewed by David Kilzer.

        Test: fast/css/content/content-quotes-crash-with-details.html

        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updateQuotesUpTo):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.h:
        (): Deleted.

2017-12-28  Brady Eidson  <beidson@apple.com>

        Add a ProcessIdentifier, vended from the UI process, to each child process
        https://bugs.webkit.org/show_bug.cgi?id=181155

        Reviewed by Brent Fulgham.

        No new tests (Not yet testable)

        More than once we've needed to create an identifier for an object that is unique across
        all processes no matter which process it came from.
        
        Sometimes we have an object or proxy object to the UI, Storage, or Network process
        that allows us to augment a process-unique identifier to be globally unique. Due to multiple
        sessions even this isn't good enough. Other times we have to create more hair-brained solutions.
        
        In upcoming MessagePort work (Next step is https://bugs.webkit.org/show_bug.cgi?id=181172)
        there was no truly workable solution for this.
        
        By introducing a new ProcessIdentifier to each WK2 child processes that is guaranteed to be 
        unique over the run of a given UI process, we can easily create an object in any process and
        identify it uniquely across all processes.
        
        Obviously "process identifier" brings to mind a processes PID but that isn't good enough.
        The number of PIDs on the system is fairly low and they are global across all
        processes on the system. It is easy to see how a given UI process that runs for long enough
        (such as a web browser that the user rarely quits) will start to run in to recycled PIDs, 
        therefore breaking the uniqueness guarantee that is required.
        
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Process.cpp: Added.
        (WebCore::Process::setIdentifier): Sets the process-wise identifier (to be used during WK2
          child process initialization)
        (WebCore::Process::identifier): Get the process-wide identifier.
        * platform/Process.h: Added.

2017-12-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove std::chrono if it is not used for ArgumentCoder or PersistentCoder
        https://bugs.webkit.org/show_bug.cgi?id=181174

        Reviewed by Konstantin Tokarev.

        We would like to remove std::chrono as much as possible due to the danger of
        its overflow unawareness. This patch removes std::chrono if it is not used
        for ArgumentCoder or PersistentCoder.

        No behavior change.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::didReceiveData):
        * fileapi/FileReader.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::showPaintRect):
        (WebCore::InspectorOverlay::updatePaintRectsTimerFired):
        * inspector/InspectorOverlay.h:
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::threadBody):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::jettisonExpensiveObjectsOnTopLevelNavigation):
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::waitForAvailableData):
        (WebCore::SocketStreamHandleImpl::startThread):

2017-12-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][CMake] Use add_custom_command to copy each forwarding header files
        https://bugs.webkit.org/show_bug.cgi?id=180921

        Reviewed by Brent Fulgham.

        No new tests because there is no behavior change.

        * PlatformWin.cmake: Use WEBKIT_MAKE_FORWARDING_HEADERS.

2017-12-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Build fix after r226299
        https://bugs.webkit.org/show_bug.cgi?id=181160

        Unreviewed build fix.

        No new tests, its a build fix.

        * platform/graphics/FontSelectionAlgorithm.h: Add missing include.

2017-12-26  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r225769): Build error with constexpr std::max // std::min in libdstdc++4
        https://bugs.webkit.org/show_bug.cgi?id=181160

        Reviewed by Myles C. Maxfield.

        No new tests, its a build fix.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentMediaTime const): Disambiguate usage of max (Use the version from stdlib).
        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::FontSelectionValue::clampFloat): Use WTF::min and WTF::max for constexpr result.
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): Disambiguate usage of min and max (Use the version from stdlib).

2017-12-25  Dan Bernstein  <mitz@apple.com>

        [macOS] On Retina displays, icon used as drag image for large image is scaled down
        https://bugs.webkit.org/show_bug.cgi?id=181154

        Reviewed by Wenson Hsieh.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag): When using an icon for the drag image, also adjust
          its size for the device scale factor, like we do in the not-icon case.

2017-12-24  David Kilzer  <ddkilzer@apple.com>

        WebKit fixes to enable -Wstrict-prototypes for Safari
        <https://webkit.org/b/181146>

        Reviewed by Dan Bernstein.

        * platform/ios/wak/WebCoreThread.h:
        (WebThreadLockFromAnyThread):
        (WebThreadLockFromAnyThreadNoLog):
        (WebThreadUnlockFromAnyThread):
        (WebThreadUnlockGuardForMail):
        (WebThreadSetShouldYield):
        - Add 'void' to C function declarations.
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadLockFromAnyThread):
        (WebThreadLockFromAnyThreadNoLog):
        (WebThreadUnlockFromAnyThread):
        (WebThreadUnlockGuardForMail):
        - Add 'void' to C function implementations.
        * platform/ios/wak/WebCoreThreadRun.cpp:
        (class WebThreadBlock): Add 'void' to block declarations.
        Rename 'task' to 'block' for consistency.
        (_WebThreadRun): Add 'void' to block declaration.  Make
        argument name match declaration by changing 'task' to 'block'.
        (WebThreadRun): Ditto.
        * platform/ios/wak/WebCoreThreadRun.h:
        (WebThreadRun): Add 'void' to block declaration.

2017-12-22  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement Element.animate()
        https://bugs.webkit.org/show_bug.cgi?id=180402
        <rdar://problem/35851353>

        Reviewed by Dean Jackson.

        Now that we have added support for play() (webkit.org/b/178932) on Animation and parsing of multiple keyframes
        (webkit.org/b/179708), we can add support Element.animate(). To support this simple task, we must add a series
        of new IDL interfaces to support option parameters for Element.animate() (KeyframeAnimationOptions),
        AnimationEffect (AnimationEffectTimingProperties), KeyframeEffect (KeyframeEffectOptions) and supporting
        types CompositeOperation, FillMode, IterationCompositeOperation and PlaybackDirection. While we do not support
        most parameters of those types, we at least define them for future support.

        To support the most used form of the Element.animate() constructor across the WPT tests, we add support for
        specifying the duration of an animation when constructing both a KeyframeEffect and calling Element.animate(),
        either via a property on an options dictionary or as a double value.

        The implementation of Element.animate() itself is relatively straightforward, we just need to create a supporting
        KeyframeEffect based on the options provided, then an Animation with that effect set on it, and finally call play().

        We also fix one crash that came up in WPT tests where we would try to access the DOMWindow when none was available
        in http/wpt/web-animations/interfaces/Animatable/animate-no-browsing-context.html.

        * CMakeLists.txt: Add new IDL files.
        * DerivedSources.make: Add new IDL files.
        * Sources.txt: Add new generated JS bindings.
        * WebCore.xcodeproj/project.pbxproj: Add new IDL, header and C++ files.
        * animation/Animatable.idl: Expose the animate() method.
        * animation/AnimationEffectTiming.cpp:
        (WebCore::AnimationEffectTiming::setBindingsDuration): Make the duration property spec-compliant and expect the right
        kind of type (unrestricted double or DOMString).
        * animation/AnimationEffectTiming.h:
        * animation/AnimationEffectTiming.idl:
        * animation/AnimationEffectTimingProperties.h: Added.
        * animation/AnimationEffectTimingProperties.idl: Added.
        * animation/CompositeOperation.h: Added.
        * animation/CompositeOperation.idl: Added.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::currentTime): Check that there is DOMWindow before proceeding to querying the current time
        through it, fixes a newly-apparent crash.
        * animation/FillMode.h: Added.
        * animation/FillMode.idl: Added.
        * animation/IterationCompositeOperation.h: Added.
        * animation/IterationCompositeOperation.idl: Added.
        * animation/KeyframeAnimationOptions.h: Added.
        * animation/KeyframeAnimationOptions.idl: Added.
        * animation/KeyframeEffect.cpp: Update types that are no longer defined under KeyframeEffect.
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffect::create): Add support for duration provided either directly as a double or through KeyframeEffectOptions.
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * animation/KeyframeEffectOptions.h: Added.
        * animation/KeyframeEffectOptions.idl: Added.
        * animation/PlaybackDirection.h: Added.
        * animation/PlaybackDirection.idl: Added.
        * dom/Element.cpp:
        (WebCore::Element::animate): Implement Element.animate().
        * dom/Element.h:

2017-12-23  Minsheng Liu  <lambda@liu.ms>

        Add comments and improve code styles for RenderMathMLUnderOver::stretchHorizontalOperatorsAndLayoutChildren() and related functions
        https://bugs.webkit.org/show_bug.cgi?id=180923

        Reviewed by Frédéric Wang.

        The patch improves the code for RenderMathMLUnderOver::stretchHorizontalOperatorsAndLayoutChildren()
        and related function, incorporating the following suggestions from bug 179682:

        - Remove several lines of trailing spaces.
        - Change several pointers to references.
        - Rewrite horizontalStretchyOperator() (formerly toHorizontalStretchyOperator()) 
          to make it more conforming to WebKit's coding style.
        - Make unembellishedOperator() a const method.
        - Add comments for stretchHorizontalOperatorsAndLayoutChildren().
        - Eliminate an unnecessary call to fixLayoutAfterStretch() in stretchHorizontalOperatorsAndLayoutChildren().

        Add one more case for the test "mathml/opentype/munderover-stretch-width.html" 
        to handle the corner case where all components of <munderover>/<munder>/<mover> are stretchy.

        Since there is no behavior change, no new test is required.

        * rendering/mathml/RenderMathMLBlock.h:
        (WebCore::RenderMathMLBlock::unembellishedOperator const):
        (WebCore::RenderMathMLBlock::unembellishedOperator): Deleted.
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::unembellishedOperator const):
        (WebCore::RenderMathMLFraction::unembellishedOperator): Deleted.
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::resetStretchSize):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::unembellishedOperator const):
        (WebCore::RenderMathMLScripts::unembellishedOperator): Deleted.
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::horizontalStretchyOperator):
        (WebCore::fixLayoutAfterStretch):
        (WebCore::RenderMathMLUnderOver::stretchHorizontalOperatorsAndLayoutChildren):
        (WebCore::RenderMathMLUnderOver::layoutBlock):
        (WebCore::toHorizontalStretchyOperator): Deleted.

2017-12-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the build on recent SDKs after r226274.

        Unused variables captured in a lambda now cause warnings the latest SDKs. It seems that after r226274, the block
        in `SWContextManager::terminateWorker` no longer accesses `this->m_workerMap`, so `this` is now unused.

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::terminateWorker):

2017-12-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix build failures due to using deprecated AppKit symbols
        https://bugs.webkit.org/show_bug.cgi?id=181110
        <rdar://problem/36162865>

        Reviewed by Dan Bernstein and Tim Horton.

        Fixes the build for recent SDKs (post-AppKit-deprecation) via a combination of adopting modern AppKit versions
        of deprecated interfaces, or folding deprecated symbols behind helper functions (for deprecated pasteboard
        types). Introduces LegacyNSPasteboardTypes.h, which contains functions to wrap around deprecated NSPasteboard
        types. This allows us to replace all deprecated NS*PboardTypes with calls to the helper functions, and limit
        -Wdeprecated-declarations of legacy pasteboard types to this new header.

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (CreateCGColorIfDifferent):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::takeFindStringFromSelection):
        (WebCore::Editor::dataSelectionForPasteboard):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::bitmapPNGFileType):
        (WebCore::cocoaTypeToImageType):
        (WebCore::convertTIFFToPNG):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/ios/wak/WAKAppKitStubs.h:
        * platform/mac/DragDataMac.mm:
        (WebCore::rtfPasteboardType):
        (WebCore::rtfdPasteboardType):
        (WebCore::stringPasteboardType):
        (WebCore::urlPasteboardType):
        (WebCore::htmlPasteboardType):
        (WebCore::colorPasteboardType):
        (WebCore::pdfPasteboardType):
        (WebCore::tiffPasteboardType):
        (WebCore::DragData::asFilenames const):
        (WebCore::DragData::containsPlainText const):
        (WebCore::DragData::containsCompatibleContent const):
        (WebCore::DragData::containsPromise const):
        (WebCore::DragData::asURL const):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink):
        * platform/mac/LegacyNSPasteboardTypes.h: Added.
        (WebCore::legacyStringPasteboardType):
        (WebCore::legacyFilenamesPasteboardType):
        (WebCore::legacyTIFFPasteboardType):
        (WebCore::legacyRTFPasteboardType):
        (WebCore::legacyFontPasteboardType):
        (WebCore::legacyColorPasteboardType):
        (WebCore::legacyRTFDPasteboardType):
        (WebCore::legacyHTMLPasteboardType):
        (WebCore::legacyURLPasteboardType):
        (WebCore::legacyPDFPasteboardType):
        (WebCore::legacyFilesPromisePasteboardType):
        * platform/mac/LocalCurrentGraphicsContext.mm:
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writableTypesForURL):
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::supportedFileUploadPasteboardTypes):
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::writeURLForTypes):
        (WebCore::writeFileWrapperAsRTFDAttachment):
        (WebCore::Pasteboard::read):
        (WebCore::absoluteURLsFromPasteboardFilenames):
        (WebCore::Pasteboard::readPlatformValueAsString):
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType):
        (WebCore::Pasteboard::writeString):
        * platform/mac/PasteboardWriter.mm:
        (WebCore::createPasteboardWriter):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::numberOfFiles const):
        (WebCore::pasteboardMayContainFilePaths):
        (WebCore::PlatformPasteboard::stringForType const):
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::platformPasteboardTypeForSafeTypeForDOMToReadAndWrite):
        (WebCore::PlatformPasteboard::color):
        (WebCore::PlatformPasteboard::setStringForType):
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::createToggleButtonCell):
        (WebCore::drawCellFocusRingWithFrameAtTime):
        (WebCore::leakButtonCell):
        (WebCore::setUpButtonCell):
        (WebCore::paintButton):
        (WebCore::ThemeMac::inflateControlPaintRect const):
        * platform/mac/WebWindowAnimation.mm:
        (setScaledFrameForWindow):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::convertNSColorToColor):
        (WebCore::menuBackgroundColor):
        (WebCore::RenderThemeMac::updateCheckedState):
        (WebCore::RenderThemeMac::levelIndicatorStyleFor const):
        (WebCore::RenderThemeMac::levelIndicatorFor const):
        (WebCore::RenderThemeMac::servicesRolloverButtonCell const):

2017-12-22  Dan Bernstein  <mitz@apple.com>

        Crash beneath ScriptedAnimationController::serviceScriptedAnimations after a requestAnimationFrame callback removes the requesting iframe
        https://bugs.webkit.org/show_bug.cgi?id=181132
        <rdar://problem/35143540>

        Reviewed by Simon Fraser.

        Test: fast/animation/request-animation-frame-remove-iframe-in-callback.html

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations): Hold a reference to the
          document and pass that along to InspectorInstrumentation::willFireAnimationFrame rather
          than dereferencing the m_document member, which may have gotten cleared by an earlier
          callback.

2017-12-22  Chris Dumez  <cdumez@apple.com>

        importScripts() inside a service worker should ensure that the response has a JavaScript MIME type
        https://bugs.webkit.org/show_bug.cgi?id=181103

        Reviewed by Youenn Fablet.

        importScripts() inside a service worker should ensure that the response has a JavaScript
        MIME type, as per:
        - https://w3c.github.io/ServiceWorker/#importscripts (step 6)

        No new tests, rebaselined existing test.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::responseMIMEType const):

2017-12-22  Chris Dumez  <cdumez@apple.com>

        [Service Workers] Implement "Soft Update" algorithm
        https://bugs.webkit.org/show_bug.cgi?id=180702
        <rdar://problem/36163461>

        Reviewed by Youenn Fablet.

        Implement "Soft Update" algorithm:
        - https://w3c.github.io/ServiceWorker/#soft-update-algorithm

        Call softUpdate at the end of "Handle Fetch", as per:
        - https://w3c.github.io/ServiceWorker/#on-fetch-request-algorithm

        No new tests, rebaselined existing test.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::postTaskTo):
        * dom/ScriptExecutionContext.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::ServiceWorkerJob):
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::create):
        (WebCore::ServiceWorkerJob::data const):
        (WebCore::ServiceWorkerJob::promise):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::softUpdate):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::terminateWorker):
        (WebCore::SWContextManager::postTaskToServiceWorker):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::startScriptFetch):
        * workers/service/server/SWServer.h:

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

        [RenderTreeBuilder] Move RenderMenuList::addChild() tree mutation to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181130
        <rdar://problem/36196266>

        Reviewed by Antti Koivisto.

        This patch also creates a dedicated class for form control related tree mutations.

        Covered by existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setInnerRenderer): Update the style here instead.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::setInnerRenderer):
        (RenderMenuList::addChild):
        (RenderMenuList::showPopup): We should't really call showPopup on a detached renderer.
        (WebCore::RenderMenuList::createInnerBlock): Deleted.
        * rendering/RenderMenuList.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::createInnerRendererForButtonIfNeeded): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::formControlsBuilder):
        * rendering/updating/RenderTreeBuilderFormControls.cpp: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.
        (WebCore::RenderTreeBuilder::FormControls::FormControls):
        (WebCore::RenderTreeBuilder::FormControls::createInnerRendererIfNeeded):
        * rendering/updating/RenderTreeBuilderFormControls.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.

2017-12-21  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r223678): Cannot copy & paste a web page content into Yahoo! Mail
        https://bugs.webkit.org/show_bug.cgi?id=181114

        Reviewed by Geoffrey Garen.

        Turns out converting all URLs to blob isn't Web compatible. Don't do this conversion on HTTP, HTTP, and data URLs
        since websites tend to have access to contents accessible via those protocols, and blob URL conversion would break
        Yahoo! Mail, Gmail, and other major online email services.

        We've also considered using data URLs instead of blob URLs for conversion but pasting a large image converted into
        a data URL seems to break WordPress (it stores an empty post instead of the one with the image) so it's not likely
        to be Web compatible either.

        This patch therefore disables the blob conversion in sanitizeMarkupWithArchive for HTTP, HTTPS, data URLs for
        cross-origin content, restoring the behavior prior to r223678. For contents converted from attributed strings,
        we continue to convert to blob URL since there is no other way for websites to read local files or images references
        by an in-memory web archive.

        Tests: http/tests/security/clipboard/copy-paste-html-cross-in-origin-iframe-across-origin.html

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::shouldConvertToBlob): Added.
        (WebCore::sanitizeMarkupWithArchive):

2017-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Credentials warning spam when running CodeGenerator.pm
        https://bugs.webkit.org/show_bug.cgi?id=181127

        Unreviewed, update WebCore_IDL_INCLUDES.

        * CMakeLists.txt:

2017-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Duplicated symbols in libjavascriptcoregtk and libwebkit2gtk can cause crashes in production builds
        https://bugs.webkit.org/show_bug.cgi?id=179914

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt: Test for WebCore_LIBRARY_TYPE rather than SHARED_CORE.

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

        [RenderTreeBuilder] Move RenderButton::addChild() tree mutation to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181109
        <rdar://problem/36188262>

        Reviewed by Antti Koivisto.

        Covered by existing tests.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setInnerRenderer):
        (WebCore::RenderButton::updateAnonymousChildStyle const):
        (WebCore::RenderButton::addChild): Deleted.
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::propagateStyleToAnonymousChildren):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::updateAnonymousChildStyle const):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):

2017-12-22  Ms2ger  <Ms2ger@igalia.com>

        REGRESSION(r226228) Build error with unqualified isfinite() in MediaCapabilities.cpp
        https://bugs.webkit.org/show_bug.cgi?id=181118

        Unreviewed build fix.

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::isValidVideoConfiguration): qualify the one unqualified isfinite() call.

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

        com.apple.WebKit.WebContent.Development crashed in com.apple.WebCore: WebCore::UserMediaRequest::stop + 126
        https://bugs.webkit.org/show_bug.cgi?id=181057
        <rdar://problem/36167175>

        Unreviewed.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::stop): Fixed comment typo.

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

        ServiceWorkerThreadProxy should set the correct cookie and cache partitioning options
        https://bugs.webkit.org/show_bug.cgi?id=181000

        Reviewed by Chris Dumez.

        Covered by rebased test.

        Add a way to set the domain for cache partition explicitly on a ScriptExecutionContext.
        This is used by ServiceWorkerThreadProxy document to mimick the fact that it may be
        a service worker used by iframes that have a cross origin top document.
        Updated code to use that new utility routine.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::domainForCachePartition const):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::setDomainForCachePartition):
        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setDomainForCachePartition):
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::topOriginURL):
        (WebCore::createPageForServiceWorker):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2017-12-21  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] fix build after r226245
        https://bugs.webkit.org/show_bug.cgi?id=181113

        Unreviewed build fix.

        No new tests, no change in behavior.

        * html/AttachmentTypes.h: Added an include for std::optional

2017-12-21  Brady Eidson  <beidson@apple.com>

        Refactor MessagePortChannel family classes for an easier multi-process split.
        https://bugs.webkit.org/show_bug.cgi?id=180981

        Reviewed by Andy Estes.

        No new tests (Refactor, no behavior change)

        - Make MessagePortChannel an abstract class instead of a wrapper around a mysterious "platform" class.
        - Implement the "in-process" channel for WK1 and WK2-for-now.
        - Other random cleanup and modernization of this code.
        
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * dom/InProcessMessagePortChannel.cpp: Added.
        (WebCore::InProcessMessagePortChannel::createChannelBetweenPorts):
        (WebCore::InProcessMessagePortChannel::create):
        (WebCore::InProcessMessagePortChannel::InProcessMessagePortChannel):
        (WebCore::InProcessMessagePortChannel::~InProcessMessagePortChannel):
        (WebCore::InProcessMessagePortChannel::postMessageToRemote):
        (WebCore::InProcessMessagePortChannel::takeAllMessagesFromRemote):
        (WebCore::InProcessMessagePortChannel::isConnectedTo):
        (WebCore::InProcessMessagePortChannel::entangleIfOpen):
        (WebCore::InProcessMessagePortChannel::disentangle):
        (WebCore::InProcessMessagePortChannel::hasPendingActivity):
        (WebCore::InProcessMessagePortChannel::locallyEntangledPort):
        (WebCore::InProcessMessagePortChannel::takeEntangledChannel):
        (WebCore::InProcessMessagePortChannel::close):
        (WebCore::InProcessMessagePortChannel::setRemotePort):
        * dom/InProcessMessagePortChannel.h: Added.
        (WebCore::InProcessMessagePortChannel::MessagePortQueue::create):
        (WebCore::InProcessMessagePortChannel::MessagePortQueue::takeAllMessages):
        (WebCore::InProcessMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):
        (WebCore::InProcessMessagePortChannel::MessagePortQueue::isEmpty):
        (WebCore::InProcessMessagePortChannel::MessagePortQueue::MessagePortQueue):
        
        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
        * dom/MessageChannel.h:
        (WebCore::MessageChannel::create):
        (WebCore::MessageChannel::port1 const):
        (WebCore::MessageChannel::port2 const):
        
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::hasPendingActivity const):
        * dom/MessagePort.h:
        
        * dom/MessagePortChannel.cpp: Added.
        (WebCore::MessagePortChannel::createChannelBetweenPorts):
        (WebCore::MessagePortChannel::MessagePortChannel):
        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::EventData::EventData):
        (WebCore::MessagePortChannel::~MessagePortChannel):
        
        * dom/default/PlatformMessagePortChannel.cpp: Removed.
        * dom/default/PlatformMessagePortChannel.h: Removed.
        * workers/service/context/ServiceWorkerThread.h:

2017-12-21  Ryosuke Niwa  <rniwa@webkit.org>

        Rename NoEventDispatchAssertion to ScriptDisallowedScope
        https://bugs.webkit.org/show_bug.cgi?id=181102

        Reviewed by Zalan Bujtas.

        Renamed the class.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
        (WebCore::ContainerNode::removeNodeWithScriptAssertion):
        (WebCore::executeNodeInsertionWithScriptAssertion):
        (WebCore::ContainerNode::removeDetachedChildren):
        (WebCore::ContainerNode::insertBeforeCommon):
        (WebCore::ContainerNode::appendChildCommon):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted):
        (WebCore::notifyChildNodeRemoved):
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::isSafeToUpdateStyleOrLayout):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::dispatchWindowEvent):
        (WebCore::Document::dispatchWindowLoadEvent):
        (WebCore::Document::applyPendingXSLTransformsTimerFired):
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::attachAttributeNodeIfNeeded):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::setAttributeNodeNS):
        (WebCore::Element::dispatchFocusInEvent):
        (WebCore::Element::dispatchFocusOutEvent):
        * dom/ElementIteratorAssertions.h:
        (WebCore::ElementIteratorAssertions::ElementIteratorAssertions):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/NoEventDispatchAssertion.h: Removed.
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchDOMActivateEvent):
        * dom/ScriptDisallowedScope.h: Copied from Source/WebCore/dom/NoEventDispatchAssertion.h.
        (WebCore::ScriptDisallowedScope::ScriptDisallowedScope):
        (WebCore::ScriptDisallowedScope::~ScriptDisallowedScope):
        (WebCore::ScriptDisallowedScope::InMainThread::isEventDispatchAllowedInSubtree):
        (WebCore::ScriptDisallowedScope::InMainThread::isScriptAllowed):
        (WebCore::NoEventDispatchAssertion::NoEventDispatchAssertion): Deleted.
        (WebCore::NoEventDispatchAssertion::~NoEventDispatchAssertion): Deleted.
        (WebCore::NoEventDispatchAssertion::isEventAllowedInMainThread): Deleted.
        (WebCore::NoEventDispatchAssertion::InMainThread::InMainThread): Deleted.
        (WebCore::NoEventDispatchAssertion::InMainThread::~InMainThread): Deleted.
        (WebCore::NoEventDispatchAssertion::InMainThread::isEventDispatchAllowedInSubtree): Deleted.
        (WebCore::NoEventDispatchAssertion::InMainThread::isEventAllowed): Deleted.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::EventAllowedScope): Deleted.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::~EventAllowedScope): Deleted.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::isAllowedNode): Deleted.
        (WebCore::NoEventDispatchAssertion::EventAllowedScope::isAllowedNodeInternal): Deleted.
        (WebCore::NoEventDispatchAssertion::DisableAssertionsInScope::DisableAssertionsInScope): Deleted.
        (WebCore::NoEventDispatchAssertion::DisableAssertionsInScope::~DisableAssertionsInScope): Deleted.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeClassicScript):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjectsForDocumentSuspension):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        * html/HTMLElement.cpp:
        (WebCore::textToFragment):
        (WebCore::HTMLElement::setInnerText):
        * html/HTMLMediaElement.cpp:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::createCueRenderingTree):
        (WebCore::VTTCue::updateDisplayTree):
        (WebCore::VTTCue::removeDisplayTree):
        * loader/FormSubmission.cpp:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData):
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layout):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::performLayoutWithFlattening):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearShadowTree):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2017-12-21  Maciej Stachowiak  <mjs@apple.com>

        Update Service Workers status to Supported in Preview
        https://bugs.webkit.org/show_bug.cgi?id=181093

        Reviewed by Andy Estes.

        * features.json:

2017-12-21  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r226224.
        <rdar://problem/36185975>

        Pasteboard data is more than a dictionary. We have to whitelist NSString
        and NSArray as well. Change method name to reflect that we take a whitelist
        of classes that are allowed to be unarchived in the call.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Use revised method.
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Ditto.

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

        [RenderTreeBuilder] Move RenderRubyAsInline::addChild mutation to a RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181101
        <rdar://problem/36184788>

        Reviewed by Antti Koivisto.

        * rendering/RenderRuby.cpp:
        (WebCore::isRubyBeforeBlock): Deleted.
        (WebCore::isRubyAfterBlock): Deleted.
        (WebCore::rubyBeforeBlock): Deleted.
        (WebCore::rubyAfterBlock): Deleted.
        (WebCore::createAnonymousRubyInlineBlock): Deleted.
        (WebCore::lastRubyRun): Deleted.
        (WebCore::RenderRubyAsInline::addChild): Deleted.
        * rendering/RenderRuby.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::findOrCreateParentForChild):
        * rendering/updating/RenderTreeBuilderRuby.h:

2017-12-21  Jiewen Tan  <jiewen_tan@apple.com>

        Update Credential Management API for WebAuthentication
        https://bugs.webkit.org/show_bug.cgi?id=181082
        <rdar://problem/36055239>

        Reviewed by Daniel Bates.

        Part 1/2

        In this patch, it restructure a bit for existing Credential Management API codebase:
        1. Rename the folder from credentials to credentialmanagement for better understanding.
        2. Remove unneeded dummy codes, i.e. PasswordCredential and FederatedCredential.
        3. Core API and layout tests are updated correspondingly as well.

        Rebaseline test results.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/credentialmanagement/BasicCredential.cpp: Renamed from Source/WebCore/Modules/credentials/BasicCredential.cpp.
        (WebCore::BasicCredential::BasicCredential):
        (WebCore::BasicCredential::type const):
        * Modules/credentialmanagement/BasicCredential.h: Renamed from Source/WebCore/Modules/credentials/BasicCredential.h.
        (WebCore::BasicCredential::id const):
        * Modules/credentialmanagement/BasicCredential.idl: Renamed from Source/WebCore/Modules/credentials/BasicCredential.idl.
        * Modules/credentialmanagement/CredentialCreationOptions.h: Renamed from Source/WebCore/Modules/credentials/CredentialData.h.
        * Modules/credentialmanagement/CredentialCreationOptions.idl: Renamed from Source/WebCore/Modules/credentials/CredentialData.idl.
        * Modules/credentialmanagement/CredentialRequestOptions.h: Renamed from Source/WebCore/Modules/credentials/CredentialRequestOptions.h.
        * Modules/credentialmanagement/CredentialRequestOptions.idl: Renamed from Source/WebCore/Modules/credentials/CredentialRequestOptions.idl.
        * Modules/credentialmanagement/CredentialsContainer.cpp: Renamed from Source/WebCore/Modules/credentials/CredentialsContainer.cpp.
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::store):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::preventSilentAccess):
        * Modules/credentialmanagement/CredentialsContainer.h: Renamed from Source/WebCore/Modules/credentials/CredentialsContainer.h.
        (WebCore::CredentialsContainer::create):
        (WebCore::CredentialsContainer::CredentialsContainer):
        * Modules/credentialmanagement/CredentialsContainer.idl: Renamed from Source/WebCore/Modules/credentials/CredentialsContainer.idl.
        * Modules/credentialmanagement/NavigatorCredentials.cpp: Renamed from Source/WebCore/Modules/credentials/NavigatorCredentials.cpp.
        (WebCore::NavigatorCredentials::supplementName):
        (WebCore::NavigatorCredentials::credentials):
        (WebCore::NavigatorCredentials::from):
        * Modules/credentialmanagement/NavigatorCredentials.h: Renamed from Source/WebCore/Modules/credentials/NavigatorCredentials.h.
        * Modules/credentialmanagement/NavigatorCredentials.idl: Renamed from Source/WebCore/Modules/credentials/NavigatorCredentials.idl.
        * Modules/credentials/CredentialCreationOptions.h: Removed.
        * Modules/credentials/CredentialCreationOptions.idl: Removed.
        * Modules/credentials/CredentialUserData.h: Removed.
        * Modules/credentials/CredentialUserData.idl: Removed.
        * Modules/credentials/FederatedCredential.cpp: Removed.
        * Modules/credentials/FederatedCredential.h: Removed.
        * Modules/credentials/FederatedCredential.idl: Removed.
        * Modules/credentials/FederatedCredentialInit.h: Removed.
        * Modules/credentials/FederatedCredentialInit.idl: Removed.
        * Modules/credentials/FederatedCredentialRequestOptions.h: Removed.
        * Modules/credentials/FederatedCredentialRequestOptions.idl: Removed.
        * Modules/credentials/PasswordCredential.cpp: Removed.
        * Modules/credentials/PasswordCredential.h: Removed.
        * Modules/credentials/PasswordCredential.idl: Removed.
        * Modules/credentials/PasswordCredentialData.h: Removed.
        * Modules/credentials/PasswordCredentialData.idl: Removed.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2017-12-21  John Wilander  <wilander@apple.com>

        Storage Access API: Allow requests from non-sandboxed iframes
        https://bugs.webkit.org/show_bug.cgi?id=181099
        <rdar://problem/36184501>

        Reviewed by Brent Fulgham.

        No new tests. Changed existing tests.

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

2017-12-21  Ryosuke Niwa  <rniwa@webkit.org>

        Minor cleanup in WebContentReaderCocoa after r226213
        https://bugs.webkit.org/show_bug.cgi?id=181104

        Reviewed by Wenson Hsieh.

        Deployed early exists in the case of attachment replacements to make the code easier to read.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentAndAddResources):
        (WebCore::markupForFragmentInDocument): Extracted out of sanitizeMarkupWithArchive.
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readImage): Simplified the return logic.

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

        [RenderTreeBuilder] Move RenderRubyAsBlock::addChild mutation to a RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181090
        <rdar://problem/36180916>

        Reviewed by Antti Koivisto.

        This is in preparation for moving all ruby mutation code here.

        Covered by existing tests.

        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsBlock::addChild): Deleted.
        * rendering/RenderRuby.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::isAnonymousRubyInlineBlock):
        (WebCore::isRubyBeforeBlock):
        (WebCore::isRubyAfterBlock):
        (WebCore::isRubyChildForNormalRemoval):
        (WebCore::rubyBeforeBlock):
        (WebCore::rubyAfterBlock):
        (WebCore::createAnonymousRubyInlineBlock):
        (WebCore::lastRubyRun):
        (WebCore::RenderTreeBuilder::Ruby::findOrCreateParentForChild):
        * rendering/updating/RenderTreeBuilderRuby.h:

2017-12-21  Jeremy Jones  <jeremyj@apple.com>

        Update FULLSCREEN_API feature defines.
        https://bugs.webkit.org/show_bug.cgi?id=181015

        Reviewed by Tim Horton.

        Change enabled iphone sdk for FULLSCREEN_API.

        * Configurations/FeatureDefines.xcconfig:

2017-12-21  Chris Dumez  <cdumez@apple.com>

        ononline, onoffline and navigator.onLine don't work if Parallels or VMWare is installed
        https://bugs.webkit.org/show_bug.cgi?id=32327

        Reviewed by Alexey Proskuryakov.

        When determining if we are online, ignore virtual interfaces added on the host machine
        by Parallels and VMWare. This is needed because those interfaces are always up, whether
        or not the virtual machine is running. This was causing navigator.onLine to always return
        true on the host machine when Parallels or VMWare was installed.

        Note that it is safe to ignore these interfaces and that it does not cause issues when
        running Safari inside the virtual machine because those virtual interfaces are only
        exposed on the host machine. Inside, the virtual machine, we see the usual en0 interface.

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying):

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

        [RenderTreeBuilder] Move repeating code to RenderTreeBuilder::insertInternal
        https://bugs.webkit.org/show_bug.cgi?id=181094

        Reviewed by Antti Koivisto.

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):

2017-12-21  Jeremy Jones  <jeremyj@apple.com>

        Build fix after r226223
        https://bugs.webkit.org/show_bug.cgi?id=181088

        Unreviewed.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::exitFullscreen):

2017-12-21  John Wilander  <wilander@apple.com>

        Storage Access API: Make DocumentLoader::willSendRequest() and WebFrameLoaderClient::detachedFromParent2() tell the network process to get rid of any sub frame access entries
        https://bugs.webkit.org/show_bug.cgi?id=180728
        <rdar://problem/36009288>

        Reviewed by Youenn Fablet.

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

        This change calls the network process to clear any storage access
        entries when a subframe navigates or is detached.

        * dom/Document.cpp:
        (WebCore::Document::hasStorageAccess):
        (WebCore::Document::requestStorageAccess):
        (WebCore::Document::hasFrameSpecificStorageAccess):
        (WebCore::Document::setHasFrameSpecificStorageAccess):
        * dom/Document.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::removeStorageAccess):

2017-12-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Complete support for keyframe animations
        https://bugs.webkit.org/show_bug.cgi?id=179708

        Reviewed by Dean Jackson.

        We implement section 5.10.3 "Processing a keyframes argument" of the Web Animations spec to handle
        multiple keyframes, rather than only two, provided either in iterable (ie. array) or property-index
        (ie. dictionary) form. Although we don't currently support timing function or composite operations,
        we parse them as well.

        While there are minimal test changes, there will be a host of changes in the next patch in which
        we turn Element.animate() on.

        * animation/KeyframeEffect.cpp:
        (WebCore::IDLAttributeNameToAnimationPropertyName): New utility to convert an IDL-parsed JS property
        into a WebCore CSSPropertyID.
        (WebCore::computeMissingKeyframeOffsets): Converts "null" offsets into computed offset values as specified
        in section 4.4.2. "Calculating computed keyframes".
        (WebCore::processIterableKeyframes): Process the iterable form of the keyframes argument.
        (WebCore::processKeyframeLikeObject): Process a keyframe-like object found in the property-indexed form.
        (WebCore::processPropertyIndexedKeyframes): Process the property-indexed form of the keyframes argument.
        (WebCore::KeyframeEffect::setKeyframes): Since this method and processKeyframes() share the same signature,
        we can just return the value from processKeyframes() directly.
        (WebCore::KeyframeEffect::processKeyframes): Process the keyframes argument as specified.
        (WebCore::KeyframeEffect::applyAtLocalTime): Delegate blending to the new setAnimatedPropertiesInStyle()
        since this task is now more complex due to handling of multiple keyframes.
        (WebCore::KeyframeEffect::getAnimatedStyle): Delegate blending to the new setAnimatedPropertiesInStyle()
        since this task is now more complex due to handling of multiple keyframes.
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle): Handle multiple and implicit start and end keyframes.
        * animation/KeyframeEffect.h: Add some new structures used for parsing purposes.
        * animation/KeyframeEffect.idl: Expose the CompositeOperation enum and the BasePropertyIndexedKeyframe dictionary
        used in processKeyframeLikeObject().
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::getCSSPropertyIDFromJavaScriptPropertyName):
        * css/CSSStyleDeclaration.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimation::isPropertyAnimatable):
        * page/animation/CSSPropertyAnimation.h:

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

        Add initial DOM support for Media Capabilities
        https://bugs.webkit.org/show_bug.cgi?id=181064

        Reviewed by Eric Carlson.

        Test: media/mediacapabilities/mediacapabilities-types.html

        Add basic, cross-platform, DOM facing type and API support for Media Capabilities API.

        * bindings/scripts/CodeGenerator.pm:
        (WK_ucfirst):
        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediacapabilities/AudioConfiguration.h: Added.
        * Modules/mediacapabilities/AudioConfiguration.idl: Added.
        * Modules/mediacapabilities/MediaCapabilities.cpp: Added.
        (WebCore::bucketMIMETypes):
        (WebCore::isValidMIMEType):
        (WebCore::isValidVideoConfiguration):
        (WebCore::isValidAudioConfiguration):
        (WebCore::isValidMediaConfiguration):
        (WebCore::MediaCapabilities::decodingInfo):
        (WebCore::MediaCapabilities::encodingInfo):
        * Modules/mediacapabilities/MediaCapabilities.h: Added.
        * Modules/mediacapabilities/MediaCapabilities.idl: Added.
        * Modules/mediacapabilities/MediaCapabilitiesInfo.h: Added.
        (WebCore::MediaCapabilitiesInfo::supported const):
        (WebCore::MediaCapabilitiesInfo::setSupported):
        (WebCore::MediaCapabilitiesInfo::smooth const):
        (WebCore::MediaCapabilitiesInfo::setSmooth):
        (WebCore::MediaCapabilitiesInfo::powerEfficient const):
        (WebCore::MediaCapabilitiesInfo::setPowerEfficient):
        * Modules/mediacapabilities/MediaCapabilitiesInfo.idl: Added.
        * Modules/mediacapabilities/MediaConfiguration.h: Added.
        * Modules/mediacapabilities/MediaConfiguration.idl: Added.
        * Modules/mediacapabilities/MediaDecodingConfiguration.h: Added.
        * Modules/mediacapabilities/MediaDecodingConfiguration.idl: Added.
        * Modules/mediacapabilities/MediaDecodingType.h: Added.
        * Modules/mediacapabilities/MediaDecodingType.idl: Added.
        * Modules/mediacapabilities/MediaEncodingConfiguration.h: Added.
        * Modules/mediacapabilities/MediaEncodingConfiguration.idl: Added.
        * Modules/mediacapabilities/MediaEncodingType.h: Added.
        * Modules/mediacapabilities/MediaEncodingType.idl: Added.
        * Modules/mediacapabilities/NavigatorMediaCapabilities.cpp: Added.
        (WebCore::NavigatorMediaCapabilities::NavigatorMediaCapabilities):
        (WebCore::NavigatorMediaCapabilities::supplementName):
        (WebCore::NavigatorMediaCapabilities::from):
        (WebCore::NavigatorMediaCapabilities::mediaCapabilities):
        (WebCore::NavigatorMediaCapabilities::mediaCapabilities const):
        * Modules/mediacapabilities/NavigatorMediaCapabilities.h: Added.
        * Modules/mediacapabilities/NavigatorMediaCapabilities.idl: Added.
        * Modules/mediacapabilities/ScreenColorGamut.h: Added.
        * Modules/mediacapabilities/ScreenColorGamut.idl: Added.
        * Modules/mediacapabilities/ScreenLuminance.h: Added.
        (WebCore::ScreenLuminance::min const):
        (WebCore::ScreenLuminance::setMin):
        (WebCore::ScreenLuminance::max const):
        (WebCore::ScreenLuminance::setMax):
        (WebCore::ScreenLuminance::maxAverage const):
        (WebCore::ScreenLuminance::setMaxAverage):
        * Modules/mediacapabilities/ScreenLuminance.idl: Added.
        * Modules/mediacapabilities/VideoConfiguration.h: Added.
        * Modules/mediacapabilities/VideoConfiguration.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setMediaCapabilitiesEnabled):
        (WebCore::RuntimeEnabledFeatures::mediaCapabilitiesEnabled const):
        * page/Settings.yaml:

2017-12-21  Keith Rollin  <krollin@apple.com>

        Add optional logging of per-resource cookie information
        https://bugs.webkit.org/show_bug.cgi?id=180883
        <rdar://problem/35802295>

        Reviewed by Brent Fulgham.

        In order to support the tracking of the efficacy of Intelligent
        Tracking Protection, add some logging of the cookie information
        associated with each loaded resource. This logging is off by default
        and is enabled with `defaults write -g WebKitLogCookieInformation
        -bool true`.

        No new tests -- no new user functionality added. Only new logging has
        been added.

        * platform/Cookie.h:
        (WebCore::Cookie::Cookie):
        (WebCore::Cookie::isNull const):
        (WebCore::Cookie::encode const):
        (WebCore::Cookie::decode):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::canonicalCookieTime):
        (WebCore::cookieCreatedTime):
        (WebCore::cookieExpirationTime):
        (WebCore::getRawCookies):
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::cookieCreated):
        (WebCore::Cookie::Cookie):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):

2017-12-21  Brent Fulgham  <bfulgham@apple.com>

        Adopt new secure coding APIs in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=178484
        <rdar://problem/34837193>

        Reviewed by Eric Carlson.

        Switch to new NSKeyed[Un]Archiver methods that use NSSecureCoding by default.

        Most of the new API is wrapped in a set of convenience methods so we can
        build without the new API on older systems.

        No change in behavior.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString): Use new convenience method
        to archive the string object.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Use new secure API.
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Ditto.

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

        [RenderTreeBuilder] Move ruby mutation code to a dedicated class.
        https://bugs.webkit.org/show_bug.cgi?id=181066
        <rdar://problem/36167692>

        Reviewed by Antti Koivisto.

        This is in preparation for moving all ruby mutation code here.

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::rubyRunInsertChild): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::rubyBuilder):
        * rendering/updating/RenderTreeBuilderRuby.cpp: Added.
        (WebCore::RenderTreeBuilder::Ruby::Ruby):
        (WebCore::RenderTreeBuilder::Ruby::insertChild):
        * rendering/updating/RenderTreeBuilderRuby.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.

2017-12-21  Ms2ger  <Ms2ger@igalia.com>

        Replace a FIXME comment in CanvasGradient::addColorStop().
        https://bugs.webkit.org/show_bug.cgi?id=181034

        Reviewed by Daniel Bates.

        Tests: LayoutTests/imported/w3c/canvas/2d.gradient.object.current.html

        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):

2017-12-21  Jeremy Jones  <jeremyj@apple.com>

        Enable picture-in-picture from inline element on suspend.
        https://bugs.webkit.org/show_bug.cgi?id=180942
        rdar://problem/34745234

        Reviewed by Jer Noble.

        When a element goes into element fullscreen mode, a descendant video element gains the ability to automatically enter picture-in-picture on application suspend.

        This adds support for video fullscreen standby mode, which creates a VideoFullscreenInterfaceAVKit so that it can
        trigger auto-pip on application suspend while the element is not actually presenting in video fullscreen mode.

        VideoFullscreenInterfaceAVKit has a new state transition system that will replace the existing one to enable the increased
        number and complexity of state transitions. Until we are ready to completely commit to this new code path, this implementation is
        conditionalized to keep the existing code path working.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::setVideoFullscreenStandby):
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const):
        * html/HTMLMediaElement.h:
        * page/ChromeClient.h:
        * platform/cocoa/VideoFullscreenChangeObserver.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewControllerDelegate playerViewControllerShouldStartPictureInPictureFromInlineWhenEnteringBackground:]):
        (-[WebAVPlayerLayer layoutSublayers]):
        (allocWebAVPictureInPicturePlayerLayerViewInstance):
        (allocWebAVPlayerLayerViewInstance):
        (VideoFullscreenInterfaceAVKit::applicationDidBecomeActive):
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (VideoFullscreenInterfaceAVKit::enterFullscreen):
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):
        (VideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
        (VideoFullscreenInterfaceAVKit::preparedToReturnToInline):
        (VideoFullscreenInterfaceAVKit::mayAutomaticallyShowVideoPictureInPicture const):
        (VideoFullscreenInterfaceAVKit::willStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::failedToStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::willStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        (VideoFullscreenInterfaceAVKit::setMode):
        (VideoFullscreenInterfaceAVKit::clearMode):
        (VideoFullscreenInterfaceAVKit::setHasVideoContentLayer):
        (VideoFullscreenInterfaceAVKit::setInlineRect):
        (VideoFullscreenInterfaceAVKit::doSetup):
        (VideoFullscreenInterfaceAVKit::finalizeSetup):
        (VideoFullscreenInterfaceAVKit::doEnterFullscreen):
        (VideoFullscreenInterfaceAVKit::doExitFullscreen):
        (VideoFullscreenInterfaceAVKit::exitFullscreenHandler):
        (VideoFullscreenInterfaceAVKit::enterFullscreenHandler):
        (VideoFullscreenInterfaceAVKit::returnToStandby):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::requestUpdateInlineRect):
        (VideoFullscreenControllerContext::requestVideoContentLayer):
        (VideoFullscreenControllerContext::returnVideoContentLayer):
        (VideoFullscreenControllerContext::didSetupFullscreen):
        (VideoFullscreenControllerContext::didExitFullscreen):
        (VideoFullscreenControllerContext::setUpFullscreen):

2017-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        DeferredLoadingScope incorrectly disabled images or enables deferred loading
        https://bugs.webkit.org/show_bug.cgi?id=181077

        Reviewed by Wenson Hsieh.

        Fixed the bug that DeferredLoadingScope::~DeferredLoadingScope was checking the wrong flag
        for restoring the disabledness of images and deferred loading.

        Test: editing/pasteboard/pasting-with-images-disabled-should-not-enable-deferred-loading.html

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::DeferredLoadingScope::~DeferredLoadingScope): Fixed the bug.
        * testing/Internals.cpp:
        (WebCore::Internals::pageDefersLoading): Added for testing.
        * testing/Internals.h:
        * testing/Internals.idl: Added pageDefersLoading.

2017-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        isSafari check should take Safari Technology Preview into account
        https://bugs.webkit.org/show_bug.cgi?id=181076

        Reviewed by Alex Christensen.

        Fixed isSafari() so that it returns true for Safari Technology Preview. This bug resulted in the custom pasteboard
        types not being enabled in Safari Technology Preview. In long term, we should eliminate these isSafari() checks.

        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::MacApplication::isSafari):

2017-12-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Attachment replacement logic should not depend on subresource URL attribute replacement
        https://bugs.webkit.org/show_bug.cgi?id=181068
        <rdar://problem/36168313>

        Reviewed by Ryosuke Niwa.

        Refactors attachment replacement logic, so that it doesn't require us to first replace element attributes that
        contain subresource URLs with blob URLs before performing attachment element replacement. See below comments for
        more detail.

        Covered by existing API tests in WKAttachmentTests.

        * editing/WebContentReader.h:
        (WebCore::BlobReplacementInfo::isEmpty const): Deleted.

        Remove BlobReplacementInfo. Instead, augment `replaceRichContentWithAttachments` so that it takes in the list of
        subresources directly and generates blobs for each subresource.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::replaceSelectionWithAttributedString):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::shouldReplaceRichContentWithAttachments):
        (WebCore::createFragmentForImageAttachment):
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):

        In these helper functions that currently convert subresource URLs to blob URLs, if attachment elements are not
        defined out, and the runtime feature for attachment elements is enabled, then use an alternate codepath to
        adjust the markup (via replaceRichContentWithAttachments).

        Otherwise, fall back to default subresource URL conversion logic, which (at the moment) still converts
        subresources to blobs, but will soon be changed to emit data URLs instead.

        (WebCore::WebContentReader::readWebArchive):
        (WebCore::WebContentMarkupReader::readWebArchive):
        (WebCore::WebContentReader::readRTFD):
        (WebCore::WebContentMarkupReader::readRTFD):
        (WebCore::WebContentReader::readRTF):
        (WebCore::WebContentMarkupReader::readRTF):
        (WebCore::WebContentReader::readImage):

        Remove the createFragmentFromAttributedString helper and revert to just calling createFragmentAndAddResources.

        (WebCore::createFragmentFromAttributedString): Deleted.

2017-12-20  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add screen capture IDL and stub functions
        https://bugs.webkit.org/show_bug.cgi?id=181070
        <rdar://problem/35555184>

        Reviewed by Youenn Fablet.

        Tests: fast/mediastream/screencapture-disabled.html
               fast/mediastream/screencapture-enabled.html

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getDisplayMedia const):
        (WebCore::MediaDevices::getSupportedConstraints):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaDevices.idl:
        * Modules/mediastream/MediaTrackConstraints.cpp:
        (WebCore::convertToInternalForm):
        * Modules/mediastream/MediaTrackConstraints.h:
        * Modules/mediastream/MediaTrackConstraints.idl:
        * Modules/mediastream/MediaTrackSupportedConstraints.h:
        * Modules/mediastream/MediaTrackSupportedConstraints.idl:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::start):
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::deny):
        * Modules/mediastream/UserMediaRequest.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::screenCaptureEnabled const):
        (WebCore::RuntimeEnabledFeatures::setScreenCaptureEnabled):
        * platform/mediastream/CaptureDevice.h:
        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::MediaTrackConstraintSetMap::set):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaTrackConstraintSetMap::displaySurface const):
        (WebCore::MediaTrackConstraintSetMap::logicalSurface const):
        (WebCore::MediaTrackConstraintSetMap::encode const):
        (WebCore::MediaTrackConstraintSetMap::decode):
        * platform/mediastream/MediaStreamRequest.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::fitnessDistance):
        (WebCore::RealtimeMediaSource::applyConstraint):
        (WebCore::RealtimeMediaSource::supportsConstraint const):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenter::captureDeviceWithPersistentID):
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::supportsDisplaySurface const):
        (WebCore::RealtimeMediaSourceSettings::displaySurface const):
        (WebCore::RealtimeMediaSourceSettings::setDisplaySurface):
        (WebCore::RealtimeMediaSourceSettings::supportsLogicalSurface const):
        (WebCore::RealtimeMediaSourceSettings::logicalSurface const):
        (WebCore::RealtimeMediaSourceSettings::setLogicalSurface):
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp:
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsConstraint const):
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsDisplaySurface const):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsDisplaySurface):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsLogicalSurface const):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsLogicalSurface):
        (WebCore::RealtimeMediaSourceSupportedConstraints::encode const):
        (WebCore::RealtimeMediaSourceSupportedConstraints::decode):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setScreenCaptureEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

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

        Unreviewed, rolling out r225656.

        The test has been a flaky timout since being added.

        Reverted changeset:

        "WebAssembly: sending module to iframe fails"
        https://bugs.webkit.org/show_bug.cgi?id=179263
        https://trac.webkit.org/changeset/225656

2017-12-20  Don Olmstead  <don.olmstead@sony.com>

        [Win] Use WCharStringExtras functions in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=180963

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::appendLinkedFonts):
        (WebCore::getLinkedFonts):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::fontFromDescriptionAndLogFont):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/network/win/DownloadBundleWin.cpp:
        (WebCore::DownloadBundle::appendResumeData):
        (WebCore::DownloadBundle::extractResumeData):
        * platform/text/win/LocaleWin.cpp:
        (WebCore::LCIDFromLocaleInternal):
        (WebCore::LCIDFromLocale):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):
        (WebCore::createGlobalData):
        (WebCore::getFileDescriptorData):
        (WebCore::getURL):
        (WebCore::getCFData):
        (WebCore::setCFData):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::asFilenames const):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImageFilename):
        (WebCore::dragLabelFont):
        * platform/win/FileSystemWin.cpp:
        (WebCore::FileSystem::getFindData):
        (WebCore::FileSystem::createSymbolicLink):
        (WebCore::FileSystem::deleteFile):
        (WebCore::FileSystem::deleteEmptyDirectory):
        (WebCore::FileSystem::moveFile):
        (WebCore::FileSystem::pathByAppendingComponent):
        (WebCore::FileSystem::makeAllDirectories):
        (WebCore::FileSystem::pathGetFileName):
        (WebCore::FileSystem::openTemporaryFile):
        (WebCore::FileSystem::openFile):
        (WebCore::FileSystem::hardLinkOrCopyFile):
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::mimeTypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::read):
        (WebCore::createGlobalHDropContent):
        * platform/win/PathWalker.cpp:
        (WebCore::PathWalker::PathWalker):
        * platform/win/SSLKeyGeneratorWin.cpp:
        (WebCore::WebCore::signedPublicKeyAndChallengeString):
        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createFromReadingFile):
        * rendering/RenderThemeWin.cpp:
        (WebCore::fillFontDescription):

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

        com.apple.WebKit.WebContent.Development crashed in com.apple.WebCore: WebCore::UserMediaRequest::stop + 126
        https://bugs.webkit.org/show_bug.cgi?id=181057

        Reviewed by Eric Carlson.

        Covered by fast/mediastream tests to not crash anymore.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::stop):

2017-12-20  Brady Eidson  <beidson@apple.com>

        Assertion failure in MessagePort::contextDestroyed in http/tests/security/MessagePort/event-listener-context.html, usually attributed to later tests.
        https://bugs.webkit.org/show_bug.cgi?id=94458

        Reviewed by Chris Dumez.

        No new tests (Changed existing test to reliably crash before this change, and work after it)

        There was already a glaring FIXME that said "MessagePorts should be ActiveDOMObjects"
        
        It was right, and it fixes up this subtle lifetime issue.
        
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::hasPendingActivity const):
        (WebCore::MessagePort::locallyEntangledPort const):
        (WebCore::MessagePort::activeDOMObjectName const):
        (WebCore::MessagePort::hasPendingActivity): Deleted.
        (WebCore::MessagePort::locallyEntangledPort): Deleted.
        * dom/MessagePort.h:

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::hasPendingActivity const):

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

        Do not search for service worker registration in case of non HTTP navigation loads
        https://bugs.webkit.org/show_bug.cgi?id=180976
        <rdar://problem/36157322>

        Unreviewed.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource): Removing unneeded spaces.

2017-12-20  Alex Christensen  <achristensen@webkit.org>

        Remove some SVN files accidentally committed with r226160
        https://bugs.webkit.org/show_bug.cgi?id=180934

        * WebCore.xcodeproj/project.pbxproj.orig: Removed.
        * WebCore.xcodeproj/project.pbxproj.rej: Removed.

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

        [RenderTreeBuilder] Replace remaining addChild calls with RenderTreeBuilder::insert
        https://bugs.webkit.org/show_bug.cgi?id=181044
        <rdar://problem/36157613>

        Reviewed by Antti Koivisto.

        Covered by existing test cases.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChildIgnoringContinuation):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::addChildIgnoringContinuation): Deleted.

2017-12-20  Daniel Bates  <dabates@apple.com>

        Cleanup: Dereference value of optional directly instead of using checked value in WebCore::subdivide()
        https://bugs.webkit.org/show_bug.cgi?id=181050

        Reviewed by Simon Fraser.

        It is sufficient and more efficient to dereference a std::optional directly when we know that it has
        a value as opposed to using the checked dereference member function std::optional<>::value().

        No functionality changed. So, no new tests.

        * rendering/MarkerSubrange.cpp:
        (WebCore::subdivide):

2017-12-20  Daniel Bates  <dabates@apple.com>

        MarkerSubrange.SubdivideGrammarAndSelectionOverlap{Frontmost, FrontmostWithLongestEffectiveRange} are failing
        https://bugs.webkit.org/show_bug.cgi?id=181014

        Reviewed by Simon Fraser.

        Fixes an issue in the subdivision algorithm where the returned subranges may not be paint order
        or reverse paint order when using the default overlap strategy (OverlapStrategy::None) and
        either OverlapStrategy::Frontmost or OverlapStrategy::FrontmostWithLongestEffectiveRange, respectively.

        Currently we compute the overlapping subranges up to some point p_i on the line by sweeping from the
        start of the line through all the unclosed subranges. The unclosed subranges are sorted along the line.
        That is, they are not sorted by paint order or reverse paint order. Therefore we must take care to
        ensure that we return the computed overlapping subranges with respect to paint order/reverse paint order.

        * rendering/MarkerSubrange.cpp:
        (WebCore::subdivide):

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

        LayoutTest imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=179137
        <rdar://problem/35337335>

        Reviewed by Chris Dumez.

        Covered by unflaked test.

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::postTaskToLoader): ThreadableBlobRegistry is using callOnMainThread.
        Use it also for postTaskToLoader so that there is no race condition between registering a blob and reading it.

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

        Support service worker interception of request with blob body
        https://bugs.webkit.org/show_bug.cgi?id=181035

        Reviewed by Chris Dumez.

        Covered by updated test.

        Add support for getting blob request bodies within service worker.
        Disable interception of requests with form datas.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::fromFormData):
        * Modules/fetch/FetchBody.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):

2017-12-20  Jeremy Jones  <jeremyj@apple.com>

        Send fullscreenChange earlier, in webkitWillEnterFullscreen
        https://bugs.webkit.org/show_bug.cgi?id=181016

        Reviewed by Jer Noble.

        Sending the event earlier, allows pages to update their interface state before the fullscreen animation.
        
        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):

2017-12-20  Daniel Bates  <dabates@apple.com>

        Remove Alternative Presentation Button
        https://bugs.webkit.org/show_bug.cgi?id=180500
        <rdar://problem/35891047>

        Reviewed by Simon Fraser.

        We no longer need the alternative presentation button.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * English.lproj/Localizable.strings:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.h:
        * editing/Editor.cpp:
        (WebCore::Editor::clear):
        (WebCore::Editor::substituteWithAlternativePresentationButton): Deleted.
        (WebCore::Editor::removeAlternativePresentationButton): Deleted.
        (WebCore::Editor::elementsReplacedByAlternativePresentationButton): Deleted.
        (WebCore::Editor::didInsertAlternativePresentationButtonElement): Deleted.
        (WebCore::Editor::didRemoveAlternativePresentationButtonElement): Deleted.
        * editing/Editor.h:
        * editing/cocoa/AlternativePresentationButtonSubstitution.cpp: Removed.
        * editing/cocoa/AlternativePresentationButtonSubstitution.h: Removed.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::willAttachRenderers):
        (WebCore::HTMLInputElement::alternativePresentationButtonElement const): Deleted.
        (WebCore::HTMLInputElement::setTypeWithoutUpdatingAttribute): Deleted.
        (WebCore::HTMLInputElement::createInputType): Deleted.
        * html/HTMLInputElement.h:
        * html/InputType.h:
        (WebCore::InputType::alternativePresentationButtonElement const): Deleted.
        * html/InputTypeNames.cpp:
        (WebCore::InputTypeNames::alternativePresentationButton): Deleted.
        * html/InputTypeNames.h:
        * html/shadow/cocoa/AlternativePresentationButtonElement.cpp: Removed.
        * html/shadow/cocoa/AlternativePresentationButtonElement.h: Removed.
        * html/shadow/cocoa/AlternativePresentationButtonInputType.cpp: Removed.
        * html/shadow/cocoa/AlternativePresentationButtonInputType.h: Removed.
        * page/ChromeClient.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAlternativePresentationButtonLabel): Deleted.
        (WebCore::alternativePresentationButtonTitle): Deleted.
        (WebCore::alternativePresentationButtonSubtitle): Deleted.
        * platform/LocalizedStrings.h:
        * testing/Internals.cpp:
        (WebCore::Internals::substituteWithAlternativePresentationButton): Deleted.
        (WebCore::Internals::removeAlternativePresentationButton): Deleted.
        (WebCore::Internals::elementsReplacedByAlternativePresentationButton): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-12-20  Chris Dumez  <cdumez@apple.com>

        Do not reuse resource for memory cache if selected service worker differs
        https://bugs.webkit.org/show_bug.cgi?id=181042

        Reviewed by Youenn Fablet.

        No new tests, rebaselined existing test.

        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::options const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy const):

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

        Do not search for service worker registration in case of non HTTP navigation loads
        https://bugs.webkit.org/show_bug.cgi?id=180976

        Reviewed by Chris Dumez.

        Covered by manual testing using perf test app uploaded in https://bugs.webkit.org/show_bug.cgi?id=180929.
        In case we are sure there is no possiblity for getting a service worker, skip the search step.
        Simialrly, do not report any Document as a Service Worker client if it can never be controlled.
        A follow-up patch should handle the case of local URLs service worker selection.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        (WebCore::DocumentLoader::commitData):

2017-12-20  Andy Estes  <aestes@apple.com>

        [Apple Pay] Tell PassKit whether Apple Pay JS or Payment Request was used to start an Apple Pay session
        https://bugs.webkit.org/show_bug.cgi?id=181001
        <rdar://problem/35479106>

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        (WebCore::ApplePaySessionPaymentRequest::requester const):
        (WebCore::ApplePaySessionPaymentRequest::setRequester):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::show):

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

        [RenderTreeBuilder] Move finding-the-parent/creating-wrapper logic from RenderTable::addChild to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181018
        <rdar://problem/36148601>

        Reviewed by Antti Koivisto.

        This is in preparation for removing all tree mutation from renderering code.

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::findOrCreateParentForChild):
        * rendering/updating/RenderTreeBuilderTable.h:

2017-12-20  Frederic Wang  <fwang@igalia.com>

        Split layout of RenderMathMLRow into smaller steps
        https://bugs.webkit.org/show_bug.cgi?id=180348

        Reviewed by Manuel Rego Casasnovas.

        Currently, RenderMathMLRow mixes too many steps in the same layout functions: layout children,
        calculate stretch size, stretch vertical operators, calculate final ascent/descent, handle
        out-of-flow positioned children, set logical height, set logical width for non-display
        <math> tag, center display <math> tag etc This situation is inherited from the old flexbox
        implementation but it makes difficult to read the code and to re-use layout & metrics
        calculation for follow-up work on <mrow>-like elements (<menclose>, <mapdded>, <msqrt> or
        <math>). See for example bug 160547 for <math> or bug 161126 for <menclose>.
        This patch rewrites RenderMathMLRow into smaller steps:
        - stretchVerticalOperatorsAndLayoutChildren() which calls layoutIfNeeded() or
        insertPositionedObject() on children and stretch vertical operators.
        - getContentBoundingBox() to determine the metrics of the mrow-like element without calling
        layout on children or positioning them, so that we can improve mrow-like element in the
        future.
        - layoutRowItems() which sets the position of children.

        Setting the logical width/height or centering children is now moved into layoutBlock() since
        derived class overriding layoutBlock() will do their own adjustment for width, height and
        positions.

        Test: mathml/mrow-preferred-width-with-out-of-flow-child.html
        The rest of the behavior is unchanged and already covered by existing tests.

        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::layoutBlock): Use the new function and get contentWidth
        directly from getContentBoundingBox().
        * rendering/mathml/RenderMathMLPadded.cpp:
        (WebCore::RenderMathMLPadded::layoutBlock): Ditto.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layoutBlock): Ditto, also remove useless statement
        baseAscent = baseDescent.
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::toVerticalStretchyOperator): New helper function to cast to a vertical stretchy
        operator.
        (WebCore::RenderMathMLRow::stretchVerticalOperatorsAndLayoutChildren): New helper function
        to ensure layoutIfNeeded()/insertPositionedObject() is called on children and that the
        vertical operators are stretched.
        (WebCore::RenderMathMLRow::getContentBoundingBox const): New helper function to determine
        the width/ascent/descent to use for the mrow content.
        (WebCore::RenderMathMLRow::computePreferredLogicalWidths): Skip out-of-flow children in the
        preferred width calculation. This is verified by the new test.
        (WebCore::RenderMathMLRow::layoutRowItems): Only keep the positioning of children with the
        specified width and ascent.
        (WebCore::RenderMathMLRow::layoutBlock): Center children for <math display="block"> tag and
        set the logical width in other cases. Also set the logical height here.
        (WebCore::RenderMathMLRow::computeLineVerticalStretch): Deleted. This work is included in
        stretchVerticalOperatorsAndLayoutChildren() now.
        * rendering/mathml/RenderMathMLRow.h: Update declaration of functions.

2017-12-20  Antti Koivisto  <antti@apple.com>

        Move list and multicolumn building code from RenderTreeUpdater to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181021

        Reviewed by Zalan Bujtas.

        RenderTreeUpdater::ListItem -> RenderTreeBuilder::List
        RenderTreeUpdater::MultiColumn -> RenderTreeBuilder::MultiColumn

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::updateAfterDescendants):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::listBuilder):
        (WebCore::RenderTreeBuilder::multiColumnBuilder):
        * rendering/updating/RenderTreeBuilderList.cpp: Copied from Source/WebCore/rendering/updating/RenderTreeUpdaterListItem.cpp.
        (WebCore::RenderTreeBuilder::List::List):
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        (WebCore::RenderTreeUpdater::ListItem::updateMarker): Deleted.
        * rendering/updating/RenderTreeBuilderList.h: Copied from Source/WebCore/rendering/updating/RenderTreeUpdaterListItem.h.
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp: Copied from Source/WebCore/rendering/updating/RenderTreeUpdaterMultiColumn.cpp.
        (WebCore::RenderTreeBuilder::MultiColumn::MultiColumn):
        (WebCore::RenderTreeBuilder::MultiColumn::updateAfterDescendants):
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        (WebCore::RenderTreeUpdater::MultiColumn::update): Deleted.
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow): Deleted.
        (WebCore::RenderTreeUpdater::MultiColumn::destroyFragmentedFlow): Deleted.
        * rendering/updating/RenderTreeBuilderMultiColumn.h: Copied from Source/WebCore/rendering/updating/RenderTreeUpdaterMultiColumn.h.
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::commit):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        * rendering/updating/RenderTreeUpdater.h:
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        * rendering/updating/RenderTreeUpdaterListItem.cpp: Removed.
        * rendering/updating/RenderTreeUpdaterListItem.h: Removed.
        * rendering/updating/RenderTreeUpdaterMultiColumn.cpp: Removed.
        * rendering/updating/RenderTreeUpdaterMultiColumn.h: Removed.

2017-12-20  Ms2ger  <Ms2ger@igalia.com>

        REGRESSION(r226160) Build broken when MEDIA_STREAM is disabled with MediaStreamRequest namespace confusion
        https://bugs.webkit.org/show_bug.cgi?id=181026

        Unreviewed build fix.

        * platform/mediastream/MediaStreamRequest.h: Fix namespace, unconditionally include header.

2017-12-20  Frederic Wang  <fwang@igalia.com>

        Refactor RenderMathMLFraction to remove members modified during layout
        https://bugs.webkit.org/show_bug.cgi?id=180151

        Reviewed by Manuel Rego Casasnovas.

        Currently, RenderMathMLFraction has three LayoutUnit members m_defaultLineThickness,
        m_lineThickness and m_ascent that are set during layout. In the past such members have caused
        MathML rendering bugs due to update issues. This patch refactors the layout of MathML
        fractions so that it does not require to store and keep these LayoutUnit members up-to-date.
        New helper functions are introduced to perform the simple arithmetic calculations required.

        No new tests, behavior unchanged and already covered by existing tests.

        * rendering/mathml/RenderMathMLFraction.cpp: We add new helper functions to calculate line
        thickness values. This allows to remove updateLineThickness(), m_defaultLineThickness and
        m_lineThickness. We also introduce the ascentOverHorizontalAxis() helper function to
        calculate the ascent over the middle of its fraction bar or stack gap. This allows to remove
        the m_ascent member.
        (WebCore::RenderMathMLFraction::defaultLineThickness const): Helper function to calculate
        the default thickness of the fraction bar given in the MATH table or a fallback value.
        This replaces the use of m_defaultLineThickness.
        (WebCore::RenderMathMLFraction::lineThickness const): Helper function to resolve the
        actual thickness based on the @linethickness attribute and the default value. This replaces
        the use of m_lineThickness.
        (WebCore::RenderMathMLFraction::relativeLineThickness const): Rewrite this function using
        the new helper functions.
        (WebCore::RenderMathMLFraction::fractionParameters const): Make this const and replaces
        isStack() with !lineThickness().
        (WebCore::RenderMathMLFraction::stackParameters const): Ditto. Also move from layoutBlock
        the adjustment of parameters to ensure a minimum gap. Doing so assumes that the fraction is
        valid so we add an ASSERT.
        (WebCore::RenderMathMLFraction::horizontalOffset const): Make this a const since it does not
        mutate anything.
        (WebCore::RenderMathMLFraction::ascentOverHorizontalAxis const): Move this code from
        layoutBlock() to determine the middle of the stack gap or of the fraction bar. This helper
        function replaces m_ascent - mathAxisHeight(). Note that the adjustment of topShiftUp is now
        done in stackParameters().
        (WebCore::RenderMathMLFraction::layoutBlock): Remove the call to updateLineThickness().
        Rely on stackParameters() and ascentOverHorizontalAxis() to perform the necessary calculation
        of bottomShiftDown and ascent respectively.
        (WebCore::RenderMathMLFraction::paint): Use lineThickness() and ascentOverHorizontalAxis()
        instead of m_lineThickness, m_ascent and isStack().
        (WebCore::RenderMathMLFraction::firstLineBaseline const): Use ascentOverHorizontalAxis() and
        mathAxisHeight() instead of m_ascent.
        (WebCore::RenderMathMLFraction::updateLineThickness): Deleted.
        * rendering/mathml/RenderMathMLFraction.h: Declare new helper functions for line thickness
        values and ascent and remove the old LayoutUnit members. Make horizontalOffset(),
        fractionParameter() and stackParameters() const since they do not modify anything and the two
        last are used in the const function ascentOverHorizontalAxis(), itself used in
        firstLineBaseline().

2017-12-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][Clang] Build fix after r226138
        https://bugs.webkit.org/show_bug.cgi?id=180984

        Unreviewed build fix.

        No new tests, its a build fix.

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

2017-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r222699): Drag & drop from a web page to Gmail fails
        https://bugs.webkit.org/show_bug.cgi?id=181019

        Reviewed by Wenson Hsieh.

        The bug was caused by imageTypeToFakeFilename returning "image/png" instead of "image.png" for
        the filename for a PING image converted from a TIFF image. Fixed the bug by correcting this typo.

        Tests: PasteImage.PasteLegacyTIFFImage
               PasteImage.PasteTIFFImage 

        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::imageTypeToFakeFilename):

2017-12-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Refactor user-installed font setting for clarity
        https://bugs.webkit.org/show_bug.cgi?id=181013

        Reviewed by Simon Fraser.

        Pave the way for https://bugs.webkit.org/show_bug.cgi?id=180951.

        This patch renames the Setting to not have so many grammatical negatives, and moves
        some CoreText-specific FontCache function signatures into a new FontCacheCoreText.h
        header file. It also uses the AllowUserInstalledFonts enum class in more places instead
        of the old boolean we were using, and puts this enum class in the common TextFlags.h
        header.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initializeFontStyle):
        * page/Settings.yaml:
        * platform/graphics/FontCache.h:
        (WebCore::SynthesisPair::SynthesisPair): Deleted.
        (WebCore::SynthesisPair::boldObliquePair const): Deleted.
        * platform/graphics/FontDescription.cpp:
        (WebCore::m_shouldAllowUserInstalledFonts):
        (WebCore::m_mayRepresentUserInstalledFont): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::shouldAllowUserInstalledFonts const):
        (WebCore::FontDescription::setShouldAllowUserInstalledFonts):
        (WebCore::FontDescription::operator== const):
        (WebCore::FontDescription::mayRepresentUserInstalledFont const): Deleted.
        (WebCore::FontDescription::setMayRepresentUserInstalledFont): Deleted.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::singleton):
        (WebCore::FontDatabase::singletonAllowingUserInstalledFonts):
        (WebCore::FontDatabase::singletonDisallowingUserInstalledFonts):
        (WebCore::FontDatabase::FontDatabase):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        * platform/graphics/cocoa/FontCacheCoreText.h: Added.
        (WebCore::SynthesisPair::SynthesisPair):
        (WebCore::SynthesisPair::boldObliquePair const):
        * platform/text/TextFlags.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

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

        UserMediaRequest should stop a request when Document is being stopped
        https://bugs.webkit.org/show_bug.cgi?id=180962

        Reviewed by Eric Carlson.

        Covered by fast/mediastream/destroy-document-while-enumerating-devices.html not crashing anymore under guardmalloc.
        Stopping to wait for the media stream to be active whenDocument goes away.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::stop):
        (WebCore::UserMediaRequest::activeDOMObjectName const):
        (WebCore::UserMediaRequest::canSuspendForDocumentSuspension const):
        (WebCore::UserMediaRequest::contextDestroyed): Deleted.
        * Modules/mediastream/UserMediaRequest.h:

2017-12-19  Antti Koivisto  <antti@apple.com>

        Move first-letter building code to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=180992

        Reviewed by Zalan Bujtas.

        All special case tree building logic should go to RenderTreeBuilder.

        - RenderTreeUpdater::FirstLetter -> RenderTreeBuilder::FirstLetter
        - Make the builder non-static and stop using RenderTreeBuilder::current() there.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::updateAfterDescendants):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::firstLetterBuilder):
        (WebCore::RenderTreeBuilder::tableBuilder):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp: Copied from rendering/updating/RenderTreeUpdaterFirstLetter.cpp.
        (WebCore::supportsFirstLetter):
        (WebCore::RenderTreeBuilder::FirstLetter::FirstLetter):
        (WebCore::RenderTreeBuilder::FirstLetter::updateAfterDescendants):
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
        (WebCore::updateFirstLetterStyle): Deleted.
        (WebCore::createFirstLetterRenderer): Deleted.
        (WebCore::RenderTreeUpdater::FirstLetter::update): Deleted.
        * rendering/updating/RenderTreeBuilderFirstLetter.h: Copied from rendering/updating/RenderTreeUpdaterFirstLetter.h.
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        * rendering/updating/RenderTreeUpdater.h:
        * rendering/updating/RenderTreeUpdaterFirstLetter.cpp: Removed.
        * rendering/updating/RenderTreeUpdaterFirstLetter.h: Removed.

2017-12-19  Chris Dumez  <cdumez@apple.com>

        [Fetch] Extracting a body of type Blob should not set Content-Type to the empty string
        https://bugs.webkit.org/show_bug.cgi?id=180991

        Reviewed by Youenn Fablet.

        Extracting a body of type Blob should not set Content-Type to the empty string as per:
        - https://fetch.spec.whatwg.org/#concept-bodyinit-extract

        No new tests, rebaselined existing test.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):

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

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

        No longer needed to build without error. (Requested by xenon
        on #webkit).

        Reverted changeset:

        "[GTK][WPE] Conditionalize libTASN1 use behind
        ENABLE_SUBTLE_CRYPTO in the CMake files"
        https://bugs.webkit.org/show_bug.cgi?id=180949
        https://trac.webkit.org/changeset/226094

2017-12-19  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clean up RealtimeMediaSource interfaces
        https://bugs.webkit.org/show_bug.cgi?id=180934
        <rdar://problem/36108648>

        Reviewed by Youenn Fablet.

        No new tests, updated http/tests/media/media-stream/disconnected-frame.html.
        
        Wrap video and audio constraints in a struct instead of passing both around as separate
        parameters. Cleanup up the interface to RealTimeMediaSourceCenter.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia const):
        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::start):
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::contextDestroyed):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::request const):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/CaptureDevice.h:
        (WebCore::CaptureDevice::persistentId const):
        (WebCore::CaptureDevice::label const):
        (WebCore::CaptureDevice::groupId const):
        (WebCore::CaptureDevice::type const):
        (WebCore::CaptureDevice::setPersistentId): Deleted.
        (WebCore::CaptureDevice::setLabel): Deleted.
        (WebCore::CaptureDevice::setGroupId): Deleted.
        (WebCore::CaptureDevice::setType): Deleted.
        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::getAudioSourcesInfo): Deleted.
        (CaptureDeviceManager::getVideoSourcesInfo): Deleted.
        (CaptureDeviceManager::deviceWithUID): Deleted.
        * platform/mediastream/CaptureDeviceManager.h:
        (WebCore::CaptureDeviceManager::captureDeviceWithPersistentID):
        (WebCore::CaptureDeviceManager::refreshCaptureDevices):
        * platform/mediastream/MediaStreamRequest.h: Copied from Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDevice.mm.
        (WebCore::MediaStreamRequest::encode const):
        (WebCore::MediaStreamRequest::decode):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream):
        (WebCore::RealtimeMediaSourceCenter::getMediaStreamDevices):
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenter::captureDeviceWithPersistentID):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:
        (WebCore::AVAudioSessionCaptureDevice::AVAudioSessionCaptureDevice):
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::captureDevices):
        (WebCore::AVAudioSessionCaptureDeviceManager::captureDeviceWithPersistentID):
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::captureDevicesInternal):
        (WebCore::AVCaptureDeviceManager::captureDevices):
        (WebCore::AVCaptureDeviceManager::refreshAVCaptureDevicesOfType):
        (WebCore::AVCaptureDeviceManager::refreshCaptureDevices):
        (WebCore::AVCaptureDeviceManager::deviceDisconnected):
        (WebCore::AVCaptureDeviceManager::getAudioSourcesInfo): Deleted.
        (WebCore::AVCaptureDeviceManager::getVideoSourcesInfo): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::CoreAudioCaptureDevice::CoreAudioCaptureDevice):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::CoreAudioCaptureDeviceManager::captureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::captureDeviceWithPersistentID):
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::startProducingData):
        (WebCore::MockRealtimeAudioSource::createMuted): Deleted.
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::deviceMap):
        (WebCore::MockRealtimeMediaSource::captureDeviceWithPersistentID):
        (WebCore::MockRealtimeMediaSource::audioDevices):
        (WebCore::MockRealtimeMediaSource::videoDevices):
        (WebCore::MockRealtimeMediaSource::MockRealtimeMediaSource):
        * platform/mock/MockRealtimeMediaSource.h:
        (WebCore::MockRealtimeMediaSource::device const):
        (WebCore::MockRealtimeMediaSource::deviceIndex): Deleted.
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::initializeCapabilities):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        (WebCore::MockRealtimeVideoSource::createMuted): Deleted.
        * platform/mock/MockRealtimeVideoSource.h:

2017-12-19  Ryosuke Niwa  <rniwa@webkit.org>

        Don't convert pasted content to use blob URL in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=180969

        Reviewed by Wenson Hsieh.

        Turns out that some WebKit1 clients are relying on being able to see the original URLs of the pasted content;
        e.g. not storing content referenced by HTTP/HTTPS protocol as opposed to local files.

        This patch restores the behavior prior to r223440 and r222839 for WebKit1 clients by overriding resources in
        DocumentLoader instead of converting URLs used in the pasted contents by blob URLs. In addition, this patch
        disables the pasteboard sanitization and custom data transfer types for WebKit1 clients as the feature poses
        a compatibility concern for WebKit1 clients.

        Tests: WebKitLegacy.AccessingImageInPastedRTFD
               WebKitLegacy.AccessingImageInPastedWebArchive

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentAndAddResources):
        (WebCore::WebContentReader::readWebArchive):
        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::defaultCustomPasteboardDataEnabled):

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

        Playing media elements which call "pause(); play()" will have the play promise rejected.
        https://bugs.webkit.org/show_bug.cgi?id=180781
        <rdar://problem/33191377>

        Reviewed by Eric Carlson.

        Follow-up to address failing iOS API tests. Rather than skipping the call to
        prepareForLoad() in the case where media elements are not allowed to load data,
        unconditionally call prepareForLoad(), but conditionally call selectMediaResource() inside
        that function only if the media elemnet is allowed to load. This ensures that the
        MediaPlayer is created when play(), pause(), or load() are called during a user gesture
        later, and selectMediaResource() (which depends on having a non-null m_player) is called.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::insertedIntoAncestor):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::playInternal):

2017-12-19  Timothy Hatcher  <timothy@hatcher.name>

        Build failure in WebGL2 when Video feature is disabled
        https://bugs.webkit.org/show_bug.cgi?id=180946

        Reviewed by Brian Burg.

        * html/canvas/WebGL2RenderingContext.h: Make TexImageSource conditional on ENABLE(VIDEO).
        * html/canvas/WebGL2RenderingContext.idl: Ditto.

2017-12-19  Chris Dumez  <cdumez@apple.com>

        scopeURL should start with the provided scriptURL
        https://bugs.webkit.org/show_bug.cgi?id=180983

        Reviewed by Youenn Fablet.

        scopeURL should start with the provided scriptURL, as per:
        - https://w3c.github.io/ServiceWorker/#update (steps 7.8 to 7.18)

        No new tests, rebaselined existing tests.

        * platform/network/HTTPHeaderNames.in:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::didReceiveResponse):

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

        [RenderTreeBuilder] Move finding-the-parent/creating-wrapper logic from RenderTableSection::addChild to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=180994
        <rdar://problem/36139222>

        Reviewed by Antti Koivisto.

        This is in preparation for removing all tree mutation from renderering code.

        Covered by existing tests.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::findOrCreateParentForChild):
        * rendering/updating/RenderTreeBuilderTable.h:

2017-12-19  Daniel Bates  <dabates@apple.com>

        Implement InlineTextBox painting using marker subranges
        https://bugs.webkit.org/show_bug.cgi?id=180984
        <rdar://problem/36139364>

        Reviewed by David Hyatt.

        As a step towards implementing CSS Pseudo-Elements Module Level 4, explicitly decompose a
        text line into subrange objects that may be styled (say, to give the appearance of selected
        text) and painted.

        No functionality changed. So, no new tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect const): Update comments.

        (WebCore::InlineTextBox::MarkerSubrangeStyle::operator== const):
        (WebCore::InlineTextBox::MarkerSubrangeStyle::operator!= const):
        (WebCore::InlineTextBox::StyledMarkerSubrange::StyledMarkerSubrange):
        Define a subclass to represent a marker subrange that has associated style information.
        We will make use of the style information when painting the subrange.

        (WebCore::createMarkerSubrangeFromSelectionInBox): Convenience function to instantiate a
        MarkerSubrange instance from the current selection of a specified text box.

        (WebCore::InlineTextBox::paint): Write in terms of MarkerSubrange. We keep composition backgrounds
        and composition underlines as special cases for now. We represent all other subranges of the line
        as MarkerSubrange instances, including unmarked text (i.e. non-selected text without an associated
        document marker). The subranges for the gaps between document markers and selection are implicitly
        created by subdividing the entire line. Support for PaintBehaviorExcludeSelection is implemented
        by subdividing the entire line with the selection subrange and then removing the selection subrange
        from the resulting list of subdivisions before painting with the resulting list.

        (WebCore::InlineTextBox::paintPlatformDocumentMarkers): Renamed; formerly named paintDocumentMarkers.
        (WebCore::InlineTextBox::paintPlatformDocumentMarker): Renamed; formerly named paintDocumentMarker.

        (WebCore::InlineTextBox::computeStyleForUnmarkedMarkerSubrange const): Convenience function to
        compute the style for unmarked text.

        (WebCore::InlineTextBox::resolveStyleForSubrange): Added

        (WebCore::InlineTextBox::subdivideAndResolveStyle): Subdivides the list of marker subranges and
        coalesces subranges of the same type (e.g. selection) or with the same style. The latter strategy
        preserves the optimization of drawing the text of the entire line in one draw command when we know
        that the selected text looks identical to non-selected text. This optimization was performed in TextPainter::paint().

        (WebCore::InlineTextBox::collectSubrangesForDraggedContent): Added.
        (WebCore::InlineTextBox::collectSubrangesForDocumentMarkers): Added.
        (WebCore::InlineTextBox::textOriginFromBoxRect const): Added.

        (WebCore::InlineTextBox::paintMarkerSubranges):
        (WebCore::InlineTextBox::paintTextSubrangeBackground):
        (WebCore::InlineTextBox::paintTextSubrangeForeground):
        (WebCore::InlineTextBox::paintTextSubrangeDecoration):
        Paint the marker subrange.

        (WebCore::InlineTextBox::paintCompositionBackground): Moved function to group it with the logic to
        paint composition underlines. Modified to pass clamped offsets to paintTextSubrangeBackground() as
        paintTextSubrangeBackground() now expects them.

        (WebCore::mirrorRTLSegment): Moved function to be above paintCompositionUnderline() as it is the only
        function that makes use of it.

        (WebCore::InlineTextBox::paintSelection): Deleted.
        (WebCore::InlineTextBox::paintTextMatchMarker): Deleted.
        (WebCore::InlineTextBox::paintDecoration): Deleted.
        (WebCore::InlineTextBox::paintDocumentMarker): Deleted; renamed to paintPlatformDocumentMarker.
        (WebCore::InlineTextBox::paintDocumentMarkers): Deleted; renamed to paintPlatformDocumentMarkers.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::paintMarkerSubranges): Added.
        * rendering/MarkerSubrange.h:
        (WebCore::MarkerSubrange::isEmpty const): Added.
        (WebCore::MarkerSubrange::operator!= const): Added.
        (WebCore::MarkerSubrange::operator== const): Added.
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow): Updated code as we no longer need to pass the text run length
        to TextPainter::paint(). Also modernize the code while I am here.
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::Styles::operator== const): Added.
        (WebCore::TextDecorationPainter::TextDecorationPainter): Modified to take an optional TextDecorationPainter::Styles
        instance as an argument and removed the unused parameter for PseudoId.
        * rendering/TextDecorationPainter.h:
        (WebCore::TextDecorationPainter::Styles::operator!= const): Added.
        * rendering/TextPaintStyle.cpp:
        (WebCore::TextPaintStyle::operator== const): Added.
        (WebCore::computeTextSelectionPaintStyle): Removed the now unused out-arguments paintSelectedTextOnly, paintSelectedTextSeparately,
        and paintNonSelectedTextOnly. The values stored in these out-arguments were intended to be used by the caller to
        minimize the number of drawing commands. The value of paintSelectedTextSeparately indicated whether selected text
        would look identical to non-selected text so that a caller could use one paint command to draw the entire line
        instead of issuing two or more drawing commands to paint non-selected and selected text separately. We now
        accomplish the same optimization by coalescing subrange styles in InlineTextBox::subdivideAndResolveStyle().
        The value of paintNonSelectedTextOnly, as its name states, indicated whether a caller should only paint non-selected
        text and hence skip painting of selected text. This value was only used when painting dragged content (i.e. DocumentMarker::DraggedContent
        markers) and its effect is now more directly achieved by the dragged content logic in InlineTextBox::paint().
        * rendering/TextPaintStyle.h:
        (WebCore::TextPaintStyle::operator!= const): Added.
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paint): Implemented in terms TextPainter::paintRange() now that InlineTextBox::paint() optimizes
        for the number of drawing calls. See remarks for WebCore::computeTextSelectionPaintStyle() for more details.
        * rendering/TextPainter.h: Group together related member functions.
        (WebCore::TextPainter::setSelectionStyle): Deleted.
        (WebCore::TextPainter::setSelectionShadow): Deleted.

2017-12-19  Daniel Bates  <dabates@apple.com>

        Add support for computing the frontmost longest effective marker subrange
        https://bugs.webkit.org/show_bug.cgi?id=180985

        Reviewed by Dave Hyatt.

        Add a new subdivision overlap strategy to return the minimum list of maximal length non-
        overlapping subranges. We will make use of this strategy together with an algorithm to
        coalesce adjacent subranges with visually indistinct styles to minimize the total number
        of drawing commands needed to paint an entire line of text. We are not making use of
        this functionality now. We will make use of it to simplify the patch for <https://bugs.webkit.org/show_bug.cgi?id=180984>.

        * rendering/MarkerSubrange.cpp:
        (WebCore::subdivide):
        * rendering/MarkerSubrange.h:

2017-12-19  Chris Dumez  <cdumez@apple.com>

        Handle Fetch should wait for the service worker's state to become activated
        https://bugs.webkit.org/show_bug.cgi?id=180959

        Reviewed by Youenn Fablet.

        Handle Fetch should wait for the service worker's state to become activated when
        it is currently activating.

        Specification:
        - https://w3c.github.io/ServiceWorker/#on-fetch-request-algorithm (Step 16)

        No new tests, rebaselined existing test.

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::~SWServerWorker):
        (WebCore::SWServerWorker::whenActivated):
        (WebCore::SWServerWorker::setState):
        (WebCore::SWServerWorker::callWhenActivatedHandler):
        * workers/service/server/SWServerWorker.h:

2017-12-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        [YARR] Yarr should return ErrorCode instead of error messages (const char*)
        https://bugs.webkit.org/show_bug.cgi?id=180966

        Reviewed by Mark Lam.

        Remove unnecessary String creation.

        No behavior change.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::URLFilterParser::addPattern):

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

        [RenderTreeBuilder] Move finding-the-parent/creating-wrapper logic from RenderTableRow::addChild to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=180964
        <rdar://problem/36123315>

        Reviewed by Antti Koivisto.

        This is in preparation for removing all tree mutation from renderering code.

        Covered by existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderTable.cpp: Added.
        (WebCore::RenderTreeBuilder::Table::findOrCreateParentForChild):
        * rendering/updating/RenderTreeBuilderTable.h: Copied from Source/WebCore/rendering/updating/RenderTreeBuilder.h.

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

        Service Worker should not clean HTTP headers added by the application or by fetch specification before service worker interception
        https://bugs.webkit.org/show_bug.cgi?id=180939

        Reviewed by Chris Dumez.

        Covered by modified WPT test.

        Add support to clean only specific headers in cleanHTTPRequestHeadersForAccessControl,
        renamed from cleanRedirectedRequestForAccessControl.
        Compute the list of headers to keep in DocumentThreadableLoader.
        Add a specific rule for Accept header which is set prior service worker interception and for
        HTTP headers set by DocumentThreadableLoader clients.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::httpHeadersToKeepFromCleaning):
        (WebCore::cleanRedirectedRequestForAccessControl):
        * loader/CrossOriginAccessControl.h:
        (WebCore::cleanRedirectedRequestForAccessControl):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * loader/ResourceLoaderOptions.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):
        * workers/service/context/ServiceWorkerThread.h:

2017-12-19  Andy Estes  <aestes@apple.com>

        [Apple Pay] Stop maintaining a list of payment networks
        https://bugs.webkit.org/show_bug.cgi?id=180965
        <rdar://problem/34696560>

        Reviewed by Tim Horton.

        Instead of maintaining the list of valid payment networks in WebCore, allow the client to
        provide the list when constructing a PaymentCoordinator. Then, use PaymentCoordinator's list
        to validate ApplePaySessionPaymentRequests.

        Validation will now be done case-insensitively since Cocoa clients will provide a list of
        network names that differ in capitalization from the names formerly accepted by WebCore.

        Added new test cases to http/tests/ssl/applepay/ApplePaySession.html.

        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate): Changed to return a Vector of validated strings.
        (WebCore::validate): Renamed to convertAndValidate.
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        (WebCore::ApplePaySession::create):
        * Modules/applepay/ApplePaySessionPaymentRequest.cpp:
        (WebCore::ApplePaySessionPaymentRequest::isValidSupportedNetwork): Deleted.
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::toHashSet):
        (WebCore::PaymentCoordinator::PaymentCoordinator): Converted availablePaymentNetworks to a
        case-insensitive HashSet and stored in m_availablePaymentNetworks.
        (WebCore::PaymentCoordinator::validatedPaymentNetwork const): Added special cases for "jcb"
        and "carteBancaire" for API compatibility. For other networks, checked m_availablePaymentNetworks.
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::show):
        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame): Constructed m_paymentCoordinator with configuration.availablePaymentNetworks.
        * page/PageConfiguration.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        * testing/MockPaymentCoordinator.cpp:
        * testing/MockPaymentCoordinator.h:

2017-12-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, try to fix the Windows build after r226097.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendCustomAttributes):

2017-12-18  Andy Estes  <aestes@apple.com>

        [Apple Pay] Only include phonetic name properties in ApplePayPaymentContact when version >= 3
        https://bugs.webkit.org/show_bug.cgi?id=180925
        <rdar://problem/35907596>

        Reviewed by Tim Horton.

        No tests possible. The fix involves converting PKContacts, which we can't create in our test harness.

        * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp:
        (WebCore::ApplePayPaymentAuthorizedEvent::ApplePayPaymentAuthorizedEvent):
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.h:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create):
        (WebCore::ApplePaySession::ApplePaySession):
        (WebCore::ApplePaySession::version const):
        (WebCore::ApplePaySession::didAuthorizePayment):
        (WebCore::ApplePaySession::didSelectShippingContact):
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp:
        (WebCore::ApplePayShippingContactSelectedEvent::ApplePayShippingContactSelectedEvent):
        * Modules/applepay/ApplePayShippingContactSelectedEvent.h:
        * Modules/applepay/Payment.h:
        * Modules/applepay/PaymentContact.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::supportsVersion const):
        (WebCore::PaymentCoordinator::supportsVersion): Deleted.
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentSession.h:
        * Modules/applepay/cocoa/PaymentCocoa.mm:
        (WebCore::convert):
        (WebCore::Payment::toApplePayPayment const):
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::convert):
        (WebCore::PaymentContact::toApplePayPaymentContact const):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::document const):
        (WebCore::ApplePayPaymentHandler::paymentCoordinator const):
        (WebCore::ApplePayPaymentHandler::version const):
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
        (WebCore::ApplePayPaymentHandler::didSelectShippingContact):
        (WebCore::ApplePayPaymentHandler::document): Deleted.
        (WebCore::ApplePayPaymentHandler::paymentCoordinator): Deleted.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:

2017-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] The 'webkitattachmentbloburl' attribute should not persist after markup serialization
        https://bugs.webkit.org/show_bug.cgi?id=180924
        <rdar://problem/36099093>

        Reviewed by Tim Horton.

        Work towards dragging Blob-backed attachment elements as files on iOS and Mac. It doesn't make sense for the
        attachment blob URL to stick around on the element after markup serialization, so this patch removes logic that
        eagerly sets the blob URL upon setting an attachment's File. Instead, we just append this attribute when
        generating markup.

        This patch also augments existing WKAttachmentTests to ensure that these attributes are not present.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendCustomAttributes):
        (WebCore::createFragmentFromMarkup):
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFile):
        * rendering/HitTestResult.cpp:

        Fixes a related issue where an attachment is backed by Blob data (and not a file path) would specify "file:///"
        as its attachment file path in DragController when starting a drag. Instead, if there is no file path, fall back
        to the blob URL.

        This will be tested in a future patch once a WK2 dragging simulator for Mac is implemented, and support for
        dragging out Blob-backed attachments as (platform) files is implemented.

        (WebCore::HitTestResult::absoluteAttachmentURL const):

2017-12-18  Chris Dumez  <cdumez@apple.com>

        Default scope used when registering a service worker is wrong
        https://bugs.webkit.org/show_bug.cgi?id=180961

        Reviewed by Youenn Fablet.

        The default scope we used when registering a service worker was wrong, it did not match:
        - https://w3c.github.io/ServiceWorker/#start-register (Step 4)

        This patch aligns our behavior with the specification.

        No new tests, rebaselined existing test.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):

2017-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion hit in DocumentOrderedMap::get while removing a form element
        https://bugs.webkit.org/show_bug.cgi?id=137959
        <rdar://problem/27702012>

        Reviewed by Brent Fulgham.

        The assertion failure was caused by FormAssociatedElement::findAssociatedForm calling TreeScope::getElementById
        for a form associated element inside FormAttributeTargetObserver::idTargetChanged during the removal of
        the owner form element, or the first non-form element with the matching ID. If there are other elements with
        the same ID in the removed tree at that moment, MapEntry's count for the ID can be higher than it needs to be
        since Element::removedFromAncestor has not been called on those elements yet.

        Fixed the bug by checking this condition explicitly. This patch introduces ContainerChildRemovalScope which
        keeps track of the container node from which a subtree was removed as well as the root of the removed subtree.
        DocumentOrderedMap::get then checks whether the matching element can be found in this removed subtree, and its
        isConnected() still returns true (the evidence that Element::removedFromAncestor has not been called) when
        count > 0 and there was no matching element in the tree scope.

        In the long term, we should refactor the way FormAssociatedElement and HTMLFormElement refers to each other
        and avoid calling DocumentOrderedMap::get before finish calling removedFromAncestor on the removed subtree.

        Tests: fast/forms/update-form-owner-in-moved-subtree-assertion-failure-5.html
               fast/forms/update-form-owner-in-moved-subtree-assertion-failure-6.html

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeRemoved):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ContainerChildRemovalScope): Added.
        (WebCore::ContainerChildRemovalScope::ContainerChildRemovalScope):
        (WebCore::ContainerChildRemovalScope::~ContainerChildRemovalScope):
        (WebCore::ContainerChildRemovalScope::parentOfRemovedTree):
        (WebCore::ContainerChildRemovalScope::removedChild):
        (WebCore::ContainerChildRemovalScope::currentScope):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::get const): Added a special early exit when this function is called during
        a node removal.

2017-12-18  Timothy Hatcher  <timothy@hatcher.name>

        [GTK][WPE] Conditionalize libTASN1 use behind ENABLE_SUBTLE_CRYPTO in the CMake files
        https://bugs.webkit.org/show_bug.cgi?id=180949

        Reviewed by Carlos Alberto Lopez Perez.

        * PlatformGTK.cmake: Move the include path and library additions to conditional ENABLE_SUBTLE_CRYPTO section.
        * PlatformWPE.cmake: Ditto.

2017-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support representing pasted or dropped content using attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=180892
        <rdar://problem/36064210>

        Reviewed by Tim Horton.

        Support dropping and pasting attributed strings that contain NSTextAttachments. Teaches
        replaceRichContentWithAttachmentsIfNecessary to replace object elements with attachments; see comments below for
        more details.

        Test: WKAttachmentTests.InsertPastedAttributedStringContainingMultipleAttachments

        * editing/WebContentReader.h:

        Add BlobReplacementInfo, which contains a map of blob URLs to replacement Blobs, as well as a map of blob URLs
        to replaced subresource URLs.

        (WebCore::BlobReplacementInfo::isEmpty const):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::replaceSelectionWithAttributedString):
        * editing/cocoa/WebArchiveResourceFromNSAttributedString.h:
        * editing/cocoa/WebArchiveResourceFromNSAttributedString.mm:

        Implement -[WebArchiveResourceFromNSAttributedString MIMEType]. UIFoundation asks for -MIMEType in the process
        of generating markup from NSTextAttachments; this currently causes the web process to crash on an unrecognized
        selector.

        Additionally, work around <rdar://problem/36074429>, a UIFoundation bug in which all but a few hard-coded file
        extensions actually yield MIME types that are more specific than "application/octet-stream". This can safely be
        removed once <rdar://problem/36074429> is addressed.

        (-[WebArchiveResourceFromNSAttributedString MIMEType]):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachmentsIfNecessary):

        Try to replace object elements with attachments, and also tweak the title of the attachment's File to use the
        replaced subresource's filename if possible. Additionally, abstracts out information for replacing object or
        image elements (formerly a pair of { File, Element }) into a separate struct, and add a AttachmentDisplayMode
        parameter to determine whether the attachment should be presented in-line (in the case of images), or as an icon.

        (WebCore::attributesForAttributedStringConversion):

        Only exclude object elements from being generated from NSTextAttachments if the attachment element runtime
        feature is disabled, or !ENABLE(ATTACHMENT_ELEMENT).

        (WebCore::createFragmentAndAddResources):

        Additionally keep track of a mapping from blob URL => replaced subresource URL. In all the places where we
        previously only plumbed a map of blob URL => Blob, use a BlobReplacementInfo struct instead, which now includes
        a map from blob URL => replaced URL.

        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readWebArchive):
        (WebCore::WebContentMarkupReader::readWebArchive):
        (WebCore::WebContentReader::readRTFD):
        (WebCore::WebContentMarkupReader::readRTFD):
        (WebCore::WebContentReader::readRTF):
        (WebCore::WebContentMarkupReader::readRTF):
        (WebCore::WebContentReader::readImage):

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

        Service worker served response tainting should keep its tainting
        https://bugs.webkit.org/show_bug.cgi?id=180952

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setResponse):

2017-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, attempt to fix watch and TV builds after r226085

        Explicitly include a header in WebContentReaderCocoa.mm.

        * editing/cocoa/WebContentReaderCocoa.mm:

2017-12-18  Brady Eidson  <beidson@apple.com>

        Add ability to API test Service Workers via a custom protocol.
        https://bugs.webkit.org/show_bug.cgi?id=180911

        Reviewed by Chris Dumez.

        Covered by API test ServiceWorkers.Basic

        This adds a set of "Service Workers can handle this" schemes to the scheme registry
        and uses it for SW decisions instead of a handful of previous techniques.

        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsRuntimeCheck):
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/IDLAttributes.json:

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::hasServiceWorkerScheme):
        * dom/ScriptExecutionContext.h:

        * page/NavigatorServiceWorker.idl:

        * platform/SchemeRegistry.cpp:
        (WebCore::serviceWorkerSchemesLock):
        (WebCore::serviceWorkerSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeServiceWorkersCanHandle):
        (WebCore::SchemeRegistry::canServiceWorkersHandleURLScheme):
        (WebCore::SchemeRegistry::isServiceWorkerContainerCustomScheme):
        * platform/SchemeRegistry.h:

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):

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

2017-12-18  Chris Dumez  <cdumez@apple.com>

        We should use "error" redirect mode for fetching service worker scripts
        https://bugs.webkit.org/show_bug.cgi?id=180950

        Reviewed by Youenn Fablet.

        We should use "error" redirect mode for fetching service worker scripts, as per:
        - https://w3c.github.io/ServiceWorker/#update (Step 7.5)

        No new tests, rebaselined existing test.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/WorkerScriptLoader.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):

2017-12-18  Chris Dumez  <cdumez@apple.com>

        ExtendableMessageEvent constructor fails to initialize the 'source' attribute
        https://bugs.webkit.org/show_bug.cgi?id=180954

        Reviewed by Youenn Fablet.

        No new tests, rebaselined existing test.

        * workers/service/ExtendableMessageEvent.cpp:
        (WebCore::ExtendableMessageEvent::ExtendableMessageEvent):

2017-12-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Insert images as inline attachments when pasting and dropping
        https://bugs.webkit.org/show_bug.cgi?id=180853
        <rdar://problem/35756268>

        Reviewed by Tim Horton.

        Adds support for transforming dropped and pasted web content fragments prior to insertion, such that inline
        elements (so far, only images) are replaced with attachment elements that have an inline representation. See
        below comments for more detail.

        Tests: WKAttachmentTests.InsertPastedImageAsAttachment
               WKAttachmentTests.InsertPastedAttributedStringContainingImage
               WKAttachmentTestsMac.InsertPastedFileURLsAsAttachments
               WKAttachmentTestsIOS.InsertDroppedImageAsAttachment
               WKAttachmentTestsIOS.InsertDroppedAttributedStringContainingAttachment

        * editing/WebContentReader.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::replaceSelectionWithAttributedString):

        Add a new helper to replace elements in a DOM fragment with inline attachment elements instead, using the given
        Blobs. So far, we only replace image elements with these attachments, by mapping the source of each image to a
        Blob, and constructing a replacement attachment backed by a File constructed from the image's corresponding
        Blob. However, this mechanism can be generalized in the future to handle transformations from arbitrary elements
        to attachment elements capable of representing the same elements using inline display mode.

        This function is a noop if the attachment elements are disabled via runtime-enabled features.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachmentsIfNecessary):
        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):

        Add out-params to both of these helper functions that capture the map of blob URLs to Blobs being used to
        replace subresource URLs in the pasted/dropped DOM fragment.

        (WebCore::WebContentReader::readWebArchive):
        (WebCore::WebContentMarkupReader::readWebArchive):
        (WebCore::createFragmentFromAttributedString):
        (WebCore::WebContentReader::readRTFD):
        (WebCore::WebContentMarkupReader::readRTFD):
        (WebCore::WebContentReader::readRTF):
        (WebCore::WebContentMarkupReader::readRTF):
        (WebCore::WebContentReader::readImage):

        In these places where we swap out subresource URLs for blob URLs, collect a map of blob URL => Blob, and use it
        to replace images in the DOM with attachments (if needed, and possible).

        * editing/mac/WebContentReaderMac.mm:
        (WebCore::WebContentReader::readFilenames):

        Augment existing logic to generate attachment elements when pasting or dropping file URLs, so that the generated
        attachment elements also have titles, subtitles, and content type information.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFile):

        Add an optional second param, UpdateDisplayAttributes. If UpdateDisplayAttributes::Yes is passed in, then we set
        the elements's attributes that are displayed in the attachment representation (title, subtitle, and type) using
        the given File.

        (WebCore::HTMLAttachmentElement::updateFileWithData):
        (WebCore::HTMLAttachmentElement::populateShadowRootIfNecessary):

        Make a small tweak to correctly handle the case where an attachment with a content type that is a UTI is being
        displayed inline. Content type can either be a UTI or a MIME type, but the code to construct the shadow tree of
        an attachment element only handles MIME types.

        * html/HTMLAttachmentElement.h:

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

        SameOrigin and CORS fetch should fail on opaque responses served from ServiceWorker
        https://bugs.webkit.org/show_bug.cgi?id=180941

        Reviewed by Chris Dumez.

        Covered by rebased tests.

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

2017-12-18  Dean Jackson  <dino@apple.com>

        Make some functions in GraphicsContextCG use call_once for statics
        https://bugs.webkit.org/show_bug.cgi?id=180841
        <rdar://problem/36058448>

        Reviewed by Antoine Quint.

        In preparation for making OffscreenCanvas operate inside a Worker,
        make sure GraphicsContext is thread safe. Change some functions
        that use a static to call_once.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        (WebCore::linearRGBColorSpaceRef):
        (WebCore::extendedSRGBColorSpaceRef):
        (WebCore::displayP3ColorSpaceRef):

2017-12-18  Chris Dumez  <cdumez@apple.com>

        ExtendableMessageEvent.data should return the value it was initialized to
        https://bugs.webkit.org/show_bug.cgi?id=180868

        Reviewed by Geoffrey Garen.

        No new tests, rebaselined existing test.

        * bindings/js/JSExtendableMessageEventCustom.cpp:
        (WebCore::constructJSExtendableMessageEvent):
        * workers/service/ExtendableMessageEvent.cpp:
        (WebCore::ExtendableMessageEvent::ExtendableMessageEvent):
        * workers/service/ExtendableMessageEvent.idl:

2017-12-18  Megan Gardner  <megan_gardner@apple.com>

        Support Autoscrolling in contenteditable for WK2
        https://bugs.webkit.org/show_bug.cgi?id=180789

        Reviewed by Simon Frasier and Wenson Hsieh..

        Activate the autoscrollController to scroll to the position provided to us by the
        UIProcess. Allows for scrolling in contentEditable for WebKit2

        Test: fast/events/touch/ios/drag-to-autoscroll-in-single-line-editable.html

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded):
        (WebCore::EventHandler::targetPositionForSelectionAutoscroll const):
        (WebCore::EventHandler::shouldUpdateAutoscroll):
        (WebCore::EventHandler::effectiveMousePositionForSelectionAutoscroll const): Deleted.
        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::startTextAutoscroll):
        (WebCore::EventHandler::cancelTextAutoscroll):
        (WebCore::EventHandler::targetPositionForSelectionAutoscroll const):
        (WebCore::EventHandler::shouldUpdateAutoscroll):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::targetPositionForSelectionAutoscroll const):
        (WebCore::EventHandler::effectiveMousePositionForSelectionAutoscroll const): Deleted.

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

        Add support for response blob given to fetch events
        https://bugs.webkit.org/show_bug.cgi?id=180894

        Reviewed by Darin Adler.

        Covered by updated test expectations.

        Adding support for getting a blob URL from a FormData that only contains one blob.
        Adding support to create a FetcLoader from a ServiceWorkerThreadProxy

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        (WebCore::FetchLoader::startLoadingBlobURL):
        * Modules/fetch/FetchLoader.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/FormData.cpp:
        (WebCore::FormData::asBlobURL const):
        * platform/network/FormData.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::createBlobLoader):
        * workers/service/context/ServiceWorkerThreadProxy.h:

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

        [SVG] Detach list wrappers before resetting the base value.
        https://bugs.webkit.org/show_bug.cgi?id=180912
        <rdar://problem/36017970>

        Reviewed by Simon Fraser.

        Before resetting the animation value (and destroying the assigned SVG object -SVGLengthValue in this case),
        we need to check if there's an associated tear off wrapper for the said SVG object and make a copy of it.
        This is currently done in the wrong order through animValDidChange.

        Test: svg/animations/crash-when-animation-is-running-while-getting-value.html

        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValue):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::synchronizeWrappersIfNeeded):

2017-12-18  Brady Eidson  <beidson@apple.com>

        REGRESSION: ASSERTION FAILED: !m_importCompleted
        https://bugs.webkit.org/show_bug.cgi?id=180935

        Unreviewed bot gardening.

        No new tests (Covered by existing tests)

        The ASSERT was invalid for database pushes failing to open databases like this, so skip it for that scenario.

        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::databaseFailedToOpen):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registrationStoreDatabaseFailedToOpen):
        * workers/service/server/SWServer.h:

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

        Playing media elements which call "pause(); play()" will have the play promise rejected.
        https://bugs.webkit.org/show_bug.cgi?id=180781

        Reviewed by Eric Carlson.

        Test: media/video-pause-play-resolve.html

        When scheduling a rejection or resolution of existing play promises, move() the existing
        promises into the block. This ensures that valid promises aren't added to the play promise
        vector between when a rejection is scheduled and when it runs.

        Drive-by fix: Don't return false from playInternal() just so the newly created promise will
        get rejected. The pause() command will reject the promise, so just make sure it's added to
        the m_pendingPlayPromises before calling playInternal().

        Drive-by fix #2: The spec referenced by playInternal() and pauseInternal() doesn't say to
        call the "Media Element Load Algorithm" (i.e., prepareForLoad()); it says to call the
        "Resource Selection Algorithm" (i.e., selectMediaResource()). But fixing this bug caused
        an assertion crash when the resource selection task was fired and m_player was null. This
        was because the algorithm is being run at stop() time due to stop() calling pause(). The
        solution to this ASSERT is to stop the m_resourceSelectionTaskQueue in stop().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleRejectPendingPlayPromises):
        (WebCore::HTMLMediaElement::rejectPendingPlayPromises):
        (WebCore::HTMLMediaElement::resolvePendingPlayPromises):
        (WebCore::HTMLMediaElement::scheduleNotifyAboutPlaying):
        (WebCore::HTMLMediaElement::notifyAboutPlaying):
        (WebCore::HTMLMediaElement::noneSupported):
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::stop):
        * html/HTMLMediaElement.h:

2017-12-18  Daniel Bates  <dabates@apple.com>

        Add SPI to query for the current and last auto fill button type and pass user data object to _webView:focusShouldStartInputSession:
        https://bugs.webkit.org/show_bug.cgi?id=180774
        <rdar://problem/36033832>

        Reviewed by Tim Horton.

        Expose a way for an embedding client to query for the auto fill button type of a specific
        input element as it may not be feasible for a client to track such state themselves. For
        similar reasons track and expose SPI to query for the last auto fill button type for a
        specific field.

        Test: fast/forms/auto-fill-button/last-auto-fill-button-type.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::setShowAutoFillButton):
        Update the last auto fill button type.

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::lastAutoFillButtonType const): Added.

        * testing/Internals.cpp:
        (WebCore::toAutoFillButtonType):
        (WebCore::toInternalsAutoFillButtonType):
        (WebCore::Internals::autoFillButtonType):
        (WebCore::Internals::lastAutoFillButtonType):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add functions for testing.

2017-12-17  John Wilander  <wilander@apple.com>

        Storage Access API: Make document.hasStorageAccess() retrieve current status from the network process
        https://bugs.webkit.org/show_bug.cgi?id=180681
        <rdar://problem/35982161>

        Reviewed by Alex Christensen.

        Tests: http/tests/storageAccess/has-storage-access-from-prevalent-domain-with-non-recent-user-interaction.html
               http/tests/storageAccess/has-storage-access-from-prevalent-domain-with-recent-user-interaction.html

        This change makes an asynchronous request to the network process
        to see if storage access has been granted for this frame, on this
        page, for this domain.

        * dom/Document.cpp:
        (WebCore::Document::hasStorageAccess):
        * page/ChromeClient.h:

2017-12-17  Chris Dumez  <cdumez@apple.com>

        Strip fragment identifier from ServiceWorker's scriptURL
        https://bugs.webkit.org/show_bug.cgi?id=180887

        Reviewed by Darin Adler.

        Strip fragment identifier from ServiceWorker's scriptURL to match Firefox and Chrome.
        This behavior does not appear to be specified so I filed:
        - https://github.com/w3c/ServiceWorker/issues/1249

        No new tests, rebaselined existing test.

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::m_script):

2017-12-17  Antti Koivisto  <antti@apple.com>

        Move render tree updating related files under rendering/updating/
        https://bugs.webkit.org/show_bug.cgi?id=180918

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderTreeBuilder.cpp: Removed.
        * rendering/RenderTreeBuilder.h: Removed.
        * rendering/updating: Added.
        * rendering/updating/RenderTreeBuilder.cpp: Copied from Source/WebCore/rendering/RenderTreeBuilder.cpp.
        * rendering/updating/RenderTreeBuilder.h: Copied from Source/WebCore/rendering/RenderTreeBuilder.h.
        * rendering/updating/RenderTreePosition.cpp: Copied from Source/WebCore/style/RenderTreePosition.cpp.
        * rendering/updating/RenderTreePosition.h: Copied from Source/WebCore/style/RenderTreePosition.h.
        * rendering/updating/RenderTreeUpdater.cpp: Copied from Source/WebCore/style/RenderTreeUpdater.cpp.
        * rendering/updating/RenderTreeUpdater.h: Copied from Source/WebCore/style/RenderTreeUpdater.h.
        * rendering/updating/RenderTreeUpdaterFirstLetter.cpp: Copied from Source/WebCore/style/RenderTreeUpdaterFirstLetter.cpp.
        * rendering/updating/RenderTreeUpdaterFirstLetter.h: Copied from Source/WebCore/style/RenderTreeUpdaterFirstLetter.h.
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp: Copied from Source/WebCore/style/RenderTreeUpdaterGeneratedContent.cpp.
        * rendering/updating/RenderTreeUpdaterGeneratedContent.h: Copied from Source/WebCore/style/RenderTreeUpdaterGeneratedContent.h.
        * rendering/updating/RenderTreeUpdaterListItem.cpp: Copied from Source/WebCore/style/RenderTreeUpdaterListItem.cpp.
        * rendering/updating/RenderTreeUpdaterListItem.h: Copied from Source/WebCore/style/RenderTreeUpdaterListItem.h.
        * rendering/updating/RenderTreeUpdaterMultiColumn.cpp: Copied from Source/WebCore/style/RenderTreeUpdaterMultiColumn.cpp.
        * rendering/updating/RenderTreeUpdaterMultiColumn.h: Copied from Source/WebCore/style/RenderTreeUpdaterMultiColumn.h.
        * style/RenderTreePosition.cpp: Removed.
        * style/RenderTreePosition.h: Removed.
        * style/RenderTreeUpdater.cpp: Removed.
        * style/RenderTreeUpdater.h: Removed.
        * style/RenderTreeUpdaterFirstLetter.cpp: Removed.
        * style/RenderTreeUpdaterFirstLetter.h: Removed.
        * style/RenderTreeUpdaterGeneratedContent.cpp: Removed.
        * style/RenderTreeUpdaterGeneratedContent.h: Removed.
        * style/RenderTreeUpdaterListItem.cpp: Removed.
        * style/RenderTreeUpdaterListItem.h: Removed.
        * style/RenderTreeUpdaterMultiColumn.cpp: Removed.
        * style/RenderTreeUpdaterMultiColumn.h: Removed.

2017-12-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][WebCore][CSSJIT] Remove VM reference in CSSJIT
        https://bugs.webkit.org/show_bug.cgi?id=180917

        Reviewed by Sam Weinig.

        Remove VM reference in CSSJIT. CSSJIT should not be
        bound to a specific VM.

        No behavior change.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::compileSelector):
        * cssjit/SelectorCompiler.h:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::compileSelector):
        (WebCore::SelectorDataList::execute const):
        * dom/SelectorQuery.h:

2017-12-16  Dan Bernstein  <mitz@apple.com>

        WKWebView has no equivalent of -[WebView setAlwaysShowVerticalScroller:]
        https://bugs.webkit.org/show_bug.cgi?id=180613
        <rdar://problem/35946124>

        Reviewed by Geoff Garen.

        Test: TestWebKitAPI/Tests/WebKitCocoa/WKWebViewAlwaysShowsScroller.mm

        * platform/ScrollView.h: Exported setScrollbarModes.

2017-12-16  Antti Koivisto  <antti@apple.com>

        Introduce RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=180817

        Reviewed by Zalan Bujtas.

        RenderTreeBuilder is responsible of building the render tree, including construction of various anonymous
        renderers. Renderer subtype specific render tree construction code will eventually move there.

        This patch adds RenderTreeBuilder class and passes it as a parameter for all addChild implementations.
        Future patches can then mechanically move the building code from renderers to RenderTreeBuilder.

        It also moves one addChild implementation (RenderRuby::addChild -> RenderTreeBuilder::rubyRunInsertChild)
        to RenderTreeBuilder as a test.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToContinuation):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addChild):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::setText):
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::addChildIgnoringContinuation):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::wrapNewRenderer):
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        (WebCore::RenderFullScreen::unwrapRenderer):
        (WebCore::RenderFullScreen::createPlaceholder):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::addChild):
        * rendering/RenderGrid.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChild):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderInline.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createInnerBlock):
        (RenderMenuList::addChild):
        (RenderMenuList::setText):
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::updateTextRenderer):
        (WebCore::RenderQuote::updateRenderer):
        * rendering/RenderQuote.h:
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsBlock::addChild):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::addChild): Deleted.
        * rendering/RenderRubyRun.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTable.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/RenderTableSection.h:
        * rendering/RenderTreeBuilder.cpp: Added.
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::~RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::rubyRunInsertChild):
        * rendering/RenderTreeBuilder.h: Added.
        (WebCore::RenderTreeBuilder::current):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addChild):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::addChild):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::addChild):
        * rendering/svg/RenderSVGText.h:
        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::insert): Deleted.
        * style/RenderTreePosition.h:
        (WebCore::RenderTreePosition::RenderTreePosition):
        (WebCore::RenderTreePosition::nextSibling const):
        (WebCore::RenderTreePosition::canInsert const): Deleted.
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        (WebCore::RenderTreeUpdater::createRenderer):
        (WebCore::RenderTreeUpdater::createTextRenderer):
        (WebCore::RenderTreeUpdater::updateTextRenderer):
        (WebCore::createTextRenderer): Deleted.
        * style/RenderTreeUpdater.h:
        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::updateFirstLetterStyle):
        (WebCore::createFirstLetterRenderer):
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updateQuotesUpTo):
        (WebCore::createContentRenderers):
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):
        * style/RenderTreeUpdaterListItem.h:
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeUpdater::MultiColumn::destroyFragmentedFlow):

2017-12-16  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Fix filling of descriptor from queue
        https://bugs.webkit.org/show_bug.cgi?id=172717

        Reviewed by Youenn Fablet.

        Fixed the filling of descriptor from queue (step 10.d at [1]). When first implemented,
        spec comprised a bug and code was not reachable. Spec has now been fixed and code can
        now be reached.

        [1] https://streams.spec.whatwg.org/#readable-byte-stream-controller-fill-pull-into-descriptor-from-queue

        No new tests (covered by WPT tests, whose expectations have been updated).

        * Modules/streams/ReadableByteStreamInternals.js:
        (readableByteStreamControllerFillDescriptorFromQueue): Updated.

2017-12-16  Brady Eidson  <beidson@apple.com>

        Implement getting ServiceWorker registrations for the WKWebsiteDataStore API
        https://bugs.webkit.org/show_bug.cgi?id=180886

        Reviewed by Chris Dumez.

        No new tests (API test coming soon).

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registrationStoreImportComplete):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::getOriginsWithRegistrations):
        (WebCore::SWServer::performGetOriginsWithRegistrationsCallbacks):
        * workers/service/server/SWServer.h:

2017-12-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove unnecessary boolean result of start() functions
        https://bugs.webkit.org/show_bug.cgi?id=180856

        Reviewed by Darin Adler.

        No behavior change.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::~AsyncAudioDecoder):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::databaseThread):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        Now `Thread::create` always succeeds (if it fails, WebKit crashes).
        DatabaseThread::start() now always returns true. So, we do not need
        to return bool.

        * Modules/webdatabase/DatabaseThread.h:
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::start):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::start):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-12-16  Chris Dumez  <cdumez@apple.com>

        Add optimization when updating a SW registration results in the exact same script
        https://bugs.webkit.org/show_bug.cgi?id=180891

        Reviewed by Geoffrey Garen.

        Add optimization when updating a SW registration results in the exact same script:
        - https://w3c.github.io/ServiceWorker/#update-algorithm (step 8)

        No new tests, rebaselined existing test.

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

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

        Service worker script fetch request should set the Service-Worker header
        https://bugs.webkit.org/show_bug.cgi?id=180889

        Reviewed by Chris Dumez.

        Test: http/wpt/service-workers/check-service-worker-header.https.html

        Update WorkerScriptLoader to take a request instead of an URL.
        Updates Worker implementation and use it in ServiceWorkerJob to set the missing request header.

        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/WorkerScriptLoader.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):

2017-12-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r225969.

        This change introduced LayoutTest crashes.

        Reverted changeset:

        "Introduce RenderTreeBuilder"
        https://bugs.webkit.org/show_bug.cgi?id=180817
        https://trac.webkit.org/changeset/225969

2017-12-15  Chris Dumez  <cdumez@apple.com>

        Support updating a service worker registration's updateViaCache flag
        https://bugs.webkit.org/show_bug.cgi?id=180888

        Reviewed by Brady Eidson.

        Support updating a service worker registration's updateViaCache flag to match other browsers:
        - https://github.com/w3c/ServiceWorker/issues/1189

        No new tests, rebaselined existing test.

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::setRegistrationUpdateViaCache):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::setUpdateViaCache):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runRegisterJob):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::setUpdateViaCache):
        * workers/service/server/SWServerRegistration.h:

2017-12-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r225941.

        This change introduced LayoutTest crashes and assertion
        failures.

        Reverted changeset:

        "Web Inspector: replace HTMLCanvasElement with
        CanvasRenderingContext for instrumentation logic"
        https://bugs.webkit.org/show_bug.cgi?id=180770
        https://trac.webkit.org/changeset/225941

2017-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        Add a release assert that Timer::m_wasDeleted is false in setNextFireTime
        https://bugs.webkit.org/show_bug.cgi?id=180860
        <rdar://problem/36066500>

        Reviewed by David Kilzer.

        Turn an exist debug-only assertion into a release assertion to help diagnose a crash
        which appears to be caused by a freed timer getting scheduled back into the timer heap.

        * platform/Timer.cpp:
        (WebCore::TimerBase::~TimerBase):
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:

2017-12-15  Simon Fraser  <simon.fraser@apple.com>

        Elements animated on-screen are missing sometimes
        https://bugs.webkit.org/show_bug.cgi?id=180773
        rdar://problem/34923438

        Reviewed by Zalan Bujtas.
        
        After r225310 it was still possible for elements to be missing backing store when brought
        on-screen via an animation. This occurred if a child element was outside the bounds of the
        element being animated.

        Fix by making sure that GraphicsLayer's "animatedExtent" took composited child layers into account.

        As for r225310, no test because this is timing sensitive and hard to reliably make a test for.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2017-12-15  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/service-workers/service-worker/update.https.html is sometimes crashing in Debug builds
        https://bugs.webkit.org/show_bug.cgi?id=180867

        Reviewed by Brady Eidson.

        Fix assertion to make sure the worker is terminating if it is already in m_runningOrTerminatingWorkers.

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

2017-12-15  Chris Dumez  <cdumez@apple.com>

        Service Worker Registration promise is sometimes not rejected when the script load fails
        https://bugs.webkit.org/show_bug.cgi?id=180849

        Reviewed by Brady Eidson.

        Service Worker Registration promise is sometimes not rejected when the script load fails.
        This was caused by the ServiceWorkerJob sometimes passing a null ResourceError to the
        StorageProcess, even though the load failed.

        No new tests, rebaselined exisiting tests.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::notifyError):
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::notifyFinished):

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

        WebRTC Stats should not be console logged from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=180845

        Reviewed by Eric Carlson.

        Ensuring console log are done in the main thread.

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

2017-12-15  Antti Koivisto  <antti@apple.com>

        Introduce RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=180817

        Reviewed by Zalan Bujtas.

        RenderTreeBuilder is responsible of building the render tree, including construction of various anonymous
        renderers. Renderer subtype specific render tree construction code will eventually move there.

        This patch adds RenderTreeBuilder class and passes it as a parameter for all addChild implementations.
        Future patches can then mechanically move the building code from renderers to RenderTreeBuilder.

        It also moves one addChild implementation (RenderRuby::addChild -> RenderTreeBuilder::rubyRunInsertChild)
        to RenderTreeBuilder as a test.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToContinuation):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addChild):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::setText):
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::addChildIgnoringContinuation):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::wrapNewRenderer):
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        (WebCore::RenderFullScreen::unwrapRenderer):
        (WebCore::RenderFullScreen::createPlaceholder):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::addChild):
        * rendering/RenderGrid.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChild):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderInline.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createInnerBlock):
        (RenderMenuList::addChild):
        (RenderMenuList::setText):
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::updateTextRenderer):
        (WebCore::RenderQuote::updateRenderer):
        * rendering/RenderQuote.h:
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsBlock::addChild):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::addChild): Deleted.
        * rendering/RenderRubyRun.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTable.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/RenderTableSection.h:
        * rendering/RenderTreeBuilder.cpp: Added.
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::~RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::rubyRunInsertChild):
        * rendering/RenderTreeBuilder.h: Added.
        (WebCore::RenderTreeBuilder::current):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addChild):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::addChild):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::addChild):
        * rendering/svg/RenderSVGText.h:
        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::insert): Deleted.
        * style/RenderTreePosition.h:
        (WebCore::RenderTreePosition::RenderTreePosition):
        (WebCore::RenderTreePosition::nextSibling const):
        (WebCore::RenderTreePosition::canInsert const): Deleted.
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        (WebCore::RenderTreeUpdater::createRenderer):
        (WebCore::RenderTreeUpdater::createTextRenderer):
        (WebCore::RenderTreeUpdater::updateTextRenderer):
        (WebCore::createTextRenderer): Deleted.
        * style/RenderTreeUpdater.h:
        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::updateFirstLetterStyle):
        (WebCore::createFirstLetterRenderer):
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updateQuotesUpTo):
        (WebCore::createContentRenderers):
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):
        * style/RenderTreeUpdaterListItem.h:
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeUpdater::MultiColumn::destroyFragmentedFlow):

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

        Implement <iframe allow="camera; microphone">
        https://bugs.webkit.org/show_bug.cgi?id=167430

        Reviewed by Eric Carlson.

        Tests: imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.sub.html

        Adding allow attribute to HTMLIFrameElement as per https://wicg.github.io/feature-policy/#iframe-allow-attribute.
        Cross-origin iframes will get access to camera/microphone based on this attribute value.
        Same-origin iframes do not need any attribute.
        In case getUserMedia requests both camera and microphone, and allow attribute is only one of these,
        getUserMedia access is denied. This goes against the tests but is not very clear from the specification.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::isSecure):
        (WebCore::isAllowedToUse):
        (WebCore::canCallGetUserMedia):
        (WebCore::UserMediaRequest::start):
        * html/HTMLAttributeNames.in:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLIFrameElement.idl:

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

        Inconsistent section grid could lead to CrashOnOverflow
        https://bugs.webkit.org/show_bug.cgi?id=180850
        <rdar://problem/34064811>

        Reviewed by Simon Fraser.

        Each RenderTableSection maintains a grid of rows and columns. The number of columns in this grid equals the
        maximum number of columns in the entire table (taking spans and multiple sections into account).
        Since the maximum number of columns might change while re-computing the sections, we need to
        adjust them accordingly at the end (otherwise it could lead to inconsistent grids where rows have different number of columns).

        Test: fast/table/table-row-oveflow-crash.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcSections const):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::removeRedundantColumns):
        * rendering/RenderTableSection.h:

2017-12-14  David Kilzer  <ddkilzer@apple.com>

        Enable -Wstrict-prototypes for WebKit
        <https://webkit.org/b/180757>
        <rdar://problem/36024132>

        Rubber-stamped by Joseph Pecoraro.

        * Configurations/Base.xcconfig:
        (CLANG_WARN_STRICT_PROTOTYPES): Add. Set to YES.

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

        srflx and relay ICE candidates lack raddr (rel-addr) and rport (rel-port) attributes if getUserMedia access has not been granted
        https://bugs.webkit.org/show_bug.cgi?id=180842

        Reviewed by Jon Lee.

        Manually tested since there is no way to gather reflexive or stun candidates in WebKit CI.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::filterICECandidate):

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

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

        Introduced a crash in HTMLPictureElement. We're taking a
        different approach for webkit.org/b/180769 (Requested by rniwa
        on #webkit).

        Reverted changeset:

        "Crash inside ImageLoader::updateFromElement()"
        https://bugs.webkit.org/show_bug.cgi?id=180769
        https://trac.webkit.org/changeset/225878

2017-12-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r225931.

        Breaks internal builds.

        Reverted changeset:

        "Fix Mac CMake build"
        https://bugs.webkit.org/show_bug.cgi?id=180835
        https://trac.webkit.org/changeset/225931

2017-12-14  Simon Fraser  <simon.fraser@apple.com>

        Another Windows build fix.

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

2017-12-14  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build after r225915.

        Windows doens't have dispatch_once with blocks. Switch to use lambda functions instead.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        (WebCore::linearRGBColorSpaceRef):
        (WebCore::extendedSRGBColorSpaceRef):
        (WebCore::displayP3ColorSpaceRef):

2017-12-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: replace HTMLCanvasElement with CanvasRenderingContext for instrumentation logic
        https://bugs.webkit.org/show_bug.cgi?id=180770

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::~CanvasRenderingContext):
        Instead of waiting on the HTMLCanvasElement to destruct to call willDestroyCanvasRenderingContext
        we can call out in the destructor and know that the CanvasRenderingContext will be destroyed
        immediately thereafter.

        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::create):
        * html/canvas/ImageBitmapRenderingContext.h:
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::create):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::create):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::create):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContext2d):
        (WebCore::HTMLCanvasElement::createContextWebGL):
        (WebCore::HTMLCanvasElement::createContextWebGPU):
        (WebCore::HTMLCanvasElement::createContextBitmapRenderer):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::setImageBuffer const):
        Instead of adding didCreateCanvasRenderingContext calls at the construction sites of each
        context, we can make the constructors private and force the usage of static `create` functions.
        This way, we have access to the fully constructed object and have a guaranteed path for creation.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::create):
        (WebCore::InspectorCanvas::InspectorCanvas):
        (WebCore::InspectorCanvas::canvasElement):
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::buildInitialState):
        
        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::context const):

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::requestNode):
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes):
        (WebCore::contextAsScriptValue):
        (WebCore::InspectorCanvasAgent::resolveCanvasContext):
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::updateShader):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::willDestroyCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):
        (WebCore::InspectorCanvasAgent::didEnableExtension):
        (WebCore::InspectorCanvasAgent::didCreateProgram):
        (WebCore::InspectorCanvasAgent::canvasDestroyedTimerFired):
        (WebCore::InspectorCanvasAgent::canvasRecordingTimerFired):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::unbindCanvas):
        (WebCore::InspectorCanvasAgent::findInspectorCanvas):
        (WebCore::InspectorCanvasAgent::unbindProgram):
        (WebCore::InspectorCanvasAgent::didCreateCSSCanvas): Deleted.
        (WebCore::InspectorCanvasAgent::canvasDestroyed): Deleted.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext):
        (WebCore::InspectorInstrumentation::willDestroyCanvasRenderingContext):
        (WebCore::InspectorInstrumentation::didChangeCanvasMemory):
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrame):
        (WebCore::InspectorInstrumentation::didEnableExtension):
        (WebCore::InspectorInstrumentation::didCreateProgram):
        (WebCore::InspectorInstrumentation::willDeleteProgram):
        (WebCore::InspectorInstrumentation::isShaderProgramDisabled):
        (WebCore::InspectorInstrumentation::consoleStartRecordingCanvas):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvas): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::consoleStartRecordingCanvasImpl):
        (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodesImpl):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContextImpl):
        (WebCore::InspectorInstrumentation::willDestroyCanvasRenderingContextImpl):
        (WebCore::InspectorInstrumentation::didChangeCanvasMemoryImpl):
        (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrameImpl):
        (WebCore::InspectorInstrumentation::didEnableExtensionImpl):
        (WebCore::InspectorInstrumentation::didCreateProgramImpl):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvasImpl): Deleted.

        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::record):
        (WebCore::PageConsoleClient::recordEnd):

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasElement):
        (WebCore::Document::nameForCSSCanvasElement const):
        We have no reason to save the CSS canvas name for each InspectorCanvas object, so instead we
        can just query for the name based on the CanvasRenderingContext's HTMLCanvasElement (assuming
        it is not an OffscreenCanvas) when we need it.

2017-12-14  Chris Dumez  <cdumez@apple.com>

        self.importScripts() should obey updateViaCache inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180826

        Reviewed by Youenn Fablet.

        self.importScripts() should obey updateViaCache inside service workers, as per:
        - https://html.spec.whatwg.org/multipage/workers.html#dom-workerglobalscope-importscripts

        Tests: http/tests/workers/service/registration-updateViaCache-all-importScripts.html
               http/tests/workers/service/registration-updateViaCache-imports-importScripts.html
               http/tests/workers/service/registration-updateViaCache-none-importScripts.html

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        * workers/WorkerScriptLoader.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::setRegistrationLastUpdateTime):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::lastUpdateTime const):
        (WebCore::ServiceWorkerRegistration::setLastUpdateTime):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::setLastUpdateTime):
        * workers/service/server/SWServerRegistration.h:

2017-12-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        Drop Thread::tryCreate
        https://bugs.webkit.org/show_bug.cgi?id=180808

        Reviewed by Darin Adler.

        This change reveals that nobody cares the WorkerThread::start's failure.
        We should use `Thread::create` to ensure thread is actually starting.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        * workers/WorkerThread.h:

2017-12-14  Alicia Boya García  <aboya@igalia.com>

        [MSE] Add isValid() check before using trackBuffer.lastEnqueuedPresentationTime
        https://bugs.webkit.org/show_bug.cgi?id=180258

        Reviewed by Jer Noble.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2017-12-14  John Wilander  <wilander@apple.com>

        Storage Access API: Implement frame-specific access in the document.cookie layer
        https://bugs.webkit.org/show_bug.cgi?id=180682
        <rdar://problem/35982257>

        Reviewed by Alex Christensen.

        No new tests. Changed expected result from existing test.

        CookiesStrategy::cookiesForDOM(), CookiesStrategy::setCookiesFromDOM(),
        CookiesStrategy::cookieRequestHeaderFieldValue(), and
        CookiesStrategy::getRawCookies() now take optional parameters for
        frameID and pageID to allow frame-specific scoping of cookies.

        This change makes the return values of FrameLoaderClient::frameID()
        and FrameLoaderClient::pageID() std::optional<uint64_t> so that
        WebCore can call those getters and get the right return values in
        WebKit and std:nullopt in WebKitLegacy.

        * dom/Document.cpp:
        (WebCore::Document::requestStorageAccess):
        * loader/CookieJar.cpp:
        (WebCore::cookies):
        (WebCore::setCookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * platform/CookiesStrategy.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::headerValueForVary):
        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::CookieJarCurlFileSystem::setCookiesFromDOM):
        (WebCore::CookieJarCurlFileSystem::cookiesForDOM):
        (WebCore::CookieJarCurlFileSystem::cookieRequestHeaderFieldValue):
        (WebCore::CookieJarCurlFileSystem::getRawCookies):
        (WebCore::cookiesForDOM):
        (WebCore::setCookiesFromDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesInPartitionForURL):
        (WebCore::cookiesForURL):
        (WebCore::cookiesForSession):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::setCookiesFromDOM):
        (WebCore::getRawCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):

2017-12-14  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=180835

        Reviewed by Andy Estes.

        * PlatformMac.cmake:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:

2017-12-14  Antoine Quint  <graouts@apple.com>

        [Web Animations] Use is<> when possible
        https://bugs.webkit.org/show_bug.cgi?id=180832

        Reviewed by Dean Jackson.

        Adopt is<> when possible.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::startOrStopAccelerated):

2017-12-14  Antoine Quint  <graouts@apple.com>

        [Web Animations] Bring timeline and currentTime setters closer to compliance
        https://bugs.webkit.org/show_bug.cgi?id=180834

        Reviewed by Dean Jackson.

        Now that we've added support for the concept of a hold time, pending tasks
        and updating the finished state, adopt those in places we had already implemented
        but weren't fully compliant.

        Web Platform Tests cover these behaviors, but we're currently failing those tests
        due to lacking an implementation for Element.animate().

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setTimeline): Add some spec comments to clarify the code behavior
        and implement step 4 of the "setting the timeline" procedure where we reset the hold time
        to an unresolved value if the start time is resolved, as well as step 5 where we update the
        finished state. Finally, we also ensure we update the pending tasks as the ready state is
        dependent on a timeline being set.
        (WebCore::WebAnimation::bindingsStartTime const): Invert the way we test for an unresolved
        value to match prior review comments by Dean Jackson.
        (WebCore::WebAnimation::setBindingsStartTime): Use a boolean check rather than checking
        equality with std::nullopt.
        (WebCore::WebAnimation::setBindingsCurrentTime): Do not raise an exception when setting
        an unresolved time.

2017-12-14  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the cancel() method on Animation
        https://bugs.webkit.org/show_bug.cgi?id=180830
        <rdar://problem/36055816>

        Reviewed by Dean Jackson.

        We implement the cancel() method on the Animation interface with full spec text defining
        the normative behavior of those methods and code matching those steps. Implementing the
        cancel() method required implementing the notion of "resetting pending tasks",
        which the Web Animations spec defines as well.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::cancel):
        (WebCore::WebAnimation::resetPendingTasks):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

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

        "Click to exit fullscreen" text not legible on High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=180825
        <rdar://problem/32839983>

        Reviewed by Eric Carlson.

        Explicitly set the NSVisualAffectView's .appearance property.

        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        (-[WebCoreFullScreenPlaceholderView initWithFrame:]):

2017-12-14  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the finish() method on Animation
        https://bugs.webkit.org/show_bug.cgi?id=180822
        <rdar://problem/36053282>

        Reviewed by Dean Jackson.

        We implement the finish() method on the Animation interface with full spec text defining
        the normative behavior of those methods and code matching those steps. Implementing the
        finish() method required implementing the notion of "silently setting the current time",
        which the Web Animations spec defines as well.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::silentlySetCurrentTime):
        (WebCore::WebAnimation::setCurrentTime):
        (WebCore::WebAnimation::finish):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2017-12-14  Chris Dumez  <cdumez@apple.com>

        Service worker script fetching currently always uses the network cache
        https://bugs.webkit.org/show_bug.cgi?id=180816

        Reviewed by Alex Christensen.

        Service worker script fetching currently always uses the network cache. This is incorrect as per:
        - https://w3c.github.io/ServiceWorker/#update-algorithm (step 7.2)

        Tests: http/tests/workers/service/registration-updateViaCache-all.html
               http/tests/workers/service/registration-updateViaCache-none.html

        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/WorkerScriptLoader.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::startScriptFetchForServer):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::startScriptFetch):
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        * workers/service/ServiceWorkerJob.h:
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::startScriptFetch):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runUpdateJob):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::lastUpdateTime const):

2017-12-14  Simon Fraser  <simon.fraser@apple.com>

        Remove ColorSpaceDeviceRGB and most users of the obsolete deviceRGB colorspace
        https://bugs.webkit.org/show_bug.cgi?id=180689

        Reviewed by Darin Adler.
        
        Address issues noted by Darin in r225797:
        
        Existing and new code mistakenly allocated colorspaces on every call, because
        they didn't initialize the static variable on the first call. Avoid this mistake
        by using dispatch_once() in these functions.

        Fix a case where the extendedSRGBColorSpaceRef() fallback was returning deviceRGB
        instead of sRGB.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        (WebCore::linearRGBColorSpaceRef):
        (WebCore::extendedSRGBColorSpaceRef):
        (WebCore::displayP3ColorSpaceRef):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::linearRGBColorSpaceRef):

2017-12-13  Keith Miller  <keith_miller@apple.com>

        JSObjects should have a mask for loading indexed properties
        https://bugs.webkit.org/show_bug.cgi?id=180768

        Reviewed by Mark Lam.

        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::Detail::NumericSequenceConverter::convertArray):
        (WebCore::Detail::SequenceConverter::convertArray):

2017-12-13  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the play() and pause() methods on Animation
        https://bugs.webkit.org/show_bug.cgi?id=178932
        <rdar://problem/35271069>

        Reviewed by Eric Carlson.

        We implement the play() and pause() methods of the Animation interface with full spec text defining
        the normative behavior of those methods and code matching those steps. Playing and pausing animations
        incur running a play or pause task when conditions are met, specifically here when the timeline is ready.
        So we add the notion of pending tasks and provide a proper implementation of pending() which we had
        introduced in an earlier patch with a constant false return value.

        Note that the play() method exposes an auto-rewinding flag which we always set to true, but other specs,
        namely CSS Animations, do not require the rewinding behavior, so we expose it for future use.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::play):
        (WebCore::WebAnimation::setTimeToRunPendingPlayTask):
        (WebCore::WebAnimation::runPendingPlayTask):
        (WebCore::WebAnimation::pause):
        (WebCore::WebAnimation::setTimeToRunPendingPauseTask):
        (WebCore::WebAnimation::runPendingPauseTask):
        (WebCore::WebAnimation::updatePendingTasks):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2017-12-14  Frederic Wang  <fwang@igalia.com>

        Make GraphicsLayer::dumpProperties dump m_offsetFromRenderer
        https://bugs.webkit.org/show_bug.cgi?id=180473

        Reviewed by Antonio Gomes.

        No new tests, this is just a new debug info.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const): Dump the offset from renderer if nonzero.

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

        REGRESSION(r225769): Build errors with constexpr std::tie on older gcc
        https://bugs.webkit.org/show_bug.cgi?id=180692

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::FontSelectionRange::operator== const):
        (WebCore::FontSelectionRequest::tied const):
        (WebCore::FontSelectionCapabilities::tied const):
        (WebCore::FontSelectionSpecifiedCapabilities:: const):

2017-12-13  Daniel Bates  <dabates@apple.com>

        Fix the Windows build after <https://trac.webkit.org/changeset/225879>
        (https://bugs.webkit.org/show_bug.cgi?id=180651)

        * html/TextFieldInputType.cpp:
        (WebCore::autoFillButtonTypeToAccessibilityLabel):
        (WebCore::autoFillButtonTypeToAutoFillButtonText):
        (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):

2017-12-13  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: add instrumentation for ImageBitmapRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=180736

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/create-context-bitmaprenderer.html
               inspector/canvas/requestContent-bitmaprenderer.html
               inspector/canvas/resolveCanvasContext-bitmaprenderer.html

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::createContextBitmapRenderer):
        Support passing an optional settings dictionary when creating an ImageBitmapRenderingContext.

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::contextAsScriptValue):

        * bindings/js/CallTracerTypes.h:

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildAction):
        (WebCore::InspectorCanvas::buildArrayForImageBitmap): Deleted.

2017-12-13  Daniel Bates  <dabates@apple.com>

        Add more auto fill button types
        https://bugs.webkit.org/show_bug.cgi?id=180651
        <rdar://problem/35891125>
        And
        <rdar://problem/35977943>

        Reviewed by Brent Fulgham.

        Tests: fast/forms/auto-fill-button/input-autofilled-disabled-strong-password-auto-fill-button.html
               fast/forms/auto-fill-button/input-autofilled-readonly-strong-password-auto-fill-button.html
               fast/forms/auto-fill-button/input-disabled-strong-password-and-strong-confirmation-password-auto-fill-buttons.html
               fast/forms/auto-fill-button/input-readonly-strong-password-and-strong-confirmation-password-auto-fill-buttons.html
               fast/forms/auto-fill-button/input-strong-confirmation-password-auto-fill-button.html
               fast/forms/auto-fill-button/input-strong-password-auto-fill-button.html

        * English.lproj/Localizable.strings:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]): Add strings for new auto fill button types.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isAutofilledStrongPassword):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/html.css:
        (input::-webkit-strong-password-auto-fill-button):
        (input:-webkit-autofill-strong-password):
        (input:-webkit-autofill, input:-webkit-autofill-strong-password):
        (input:-webkit-autofill): Deleted.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        Add new CSS pseudo class and CSS styles.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::reset): Hide the auto fill button when the form is reset. This is also called
        whenever we suspend the page to put it into the page cache.
        (WebCore::HTMLInputElement::setShowAutoFillButton): Modified to update the editability of the inner text element
        and invalidate styles for the subtree as the editability may have changed depending on the auto fill button type.

        (WebCore::autoFillStrongPasswordMaskImage):
        (WebCore::HTMLInputElement::createInnerTextStyle):
        (WebCore::HTMLInputElement::createInnerTextStyle const): Deleted.
        Adjust the look of the inner text field. This function is not const because we may need to resolve style to
        generate a mask image.

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::autoFillButtonType const): Fix style nit; use a C++ style cast while I am in
        this area.
        (WebCore::HTMLInputElement::hasAutoFillStrongPasswordButton const): Added.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createInnerTextStyle):
        (WebCore::HTMLTextAreaElement::createInnerTextStyle const): Deleted.
        Made this non-const because HTMLInputElement::createInnerTextStyle() needs to be non-const. See above.

        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::isInnerTextElementEditable const):
        (WebCore::HTMLTextFormControlElement::updateInnerTextElementEditability):
        Extract out the query to determine if the inner text element is editable into a virtual function isInnerTextElementEditable()
        and have updateInnerTextElementEditability() make use of it. By default a field is considered editable if it is not disabled
        or read-only. We override updateInnerTextElementEditability() in HTMLInputElement to also consider the auto fill button type.

        * html/HTMLTextFormControlElement.h:
        * html/TextFieldInputType.cpp:
        (WebCore::autoFillButtonTypeToAccessibilityLabel):
        (WebCore::autoFillButtonTypeToAutoFillButtonText):
        (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):
        (WebCore::isAutoFillButtonTypeChanged):
        (WebCore::TextFieldInputType::createAutoFillButton):
        (WebCore::TextFieldInputType::updateAutoFillButton):
        Support having text for the auto fill button.

        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillStrongPasswordLabel):
        (WebCore::AXAutoFillStrongConfirmationPasswordLabel):
        (WebCore::autoFillStrongPasswordLabel):
        * platform/LocalizedStrings.h:
        Add localized strings.

        * rendering/RenderTextControlSingleLine.h: Disallow scrolling depending on the auto fill button type.

        * testing/Internals.cpp:
        (WebCore::toAutoFillButtonType):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add support for testing.

2017-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        Crash inside ImageLoader::updateFromElement()
        https://bugs.webkit.org/show_bug.cgi?id=180769
        <rdar://problem/35278782>

        Reviewed by Antti Koivisto.

        Fixed the crash by moving all call sites of ImageLoader::updateFromElement() to be post insertion callbacks
        where it's safe to execute arbitrary scripts.

        No new test since existing tests cover this with a newly added release assert in ImageLoader.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::didFinishInsertingNode): Extracted from insertedIntoAncestor to call
        selectImageSource or updateFromElement.
        * html/HTMLImageElement.h: Made many member functions final.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didAttachRenderers): Delay the call to ImageLoader::updateFromElement() in
        ImageInputType using a post style resolution callback.
        * html/HTMLMetaElement.h:
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::sourcesChanged): Store the list of child image elements into a vector before
        calling selectImageSource since each call may execute arbitrary scripts.
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedIntoAncestor): Delay the call to ImageLoader::updateFromElement()
        using a post style resolution callback.
        (WebCore::HTMLSourceElement::didFinishInsertingNode): Extracted from insertedIntoAncestor.
        * html/HTMLSourceElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::updateAfterStyleResolution): Extracted from didAttachRenderers.
        * html/HTMLVideoElement.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::needsPostStyleResolutionCallback): Added. Returns true so that HTMLInputElement's
        didAttachRenderers would register a post style resolution callback.
        (WebCore::ImageInputType::updateAfterStyleResolution): Extracted from attach.
        (WebCore::ImageInputType::attach): Deleted.
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::needsPostStyleResolutionCallback): Added. All but ImageInputType returns false.
        (WebCore::InputType::updateAfterStyleResolution): Added.
        (WebCore::InputType::attach): Deleted.
        * html/InputType.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Added a release assertion. There is no direct security implication
        so there is no need to use RELEASE_ASSERT_WITH_SECURITY_IMPLICATION here.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::insertedIntoAncestor):
        (WebCore::SVGImageElement::didFinishInsertingNode):
        * svg/SVGImageElement.h:

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

        RenderImage can be destroyed even before setting the style on it.
        https://bugs.webkit.org/show_bug.cgi?id=180767
        <rdar://problem/33965995>

        Reviewed by Simon Fraser.

        In certain cases, when the newly constructed renderer can't be inserted into the tree (parent can only have specific type of children etc),
        RenderTreeUpdater destroys it right away. While destroying a RenderImage, the associated image resource assumes
        that the image renderer has been initialized through RenderElement::initializeStyle(). This is an incorrect
        assumption.
        This patch also makes RenderImageResource's m_renderer a weak pointer.
           
        Test: fast/images/crash-when-image-renderer-is-destroyed-before-calling-initializeStyle.html

        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::initialize):
        (WebCore::RenderImageResource::setCachedImage):
        (WebCore::RenderImageResource::resetAnimation):
        (WebCore::RenderImageResource::image const):
        (WebCore::RenderImageResource::setContainerContext):
        (WebCore::RenderImageResource::imageSize const):
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::renderer const):
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::shutdown):

2017-12-13  Ryosuke Niwa  <rniwa@webkit.org>

        Update the SVG use element's shadow trees explicitly before the style recall
        https://bugs.webkit.org/show_bug.cgi?id=180729
        <rdar://problem/36009806>

        Reviewed by Antti Koivisto.

        Update the SVG use element's shadow trees before start resolving styles. Document now has a hash set of all
        connected SVG use elements with invalidated shadow trees. SVGUseElement adds itself to this set when its
        shadow tree gets invalidated, or it gets newly connected to a document with the invalidated shadow tree.
        SVGUseElement removes itself from this set when it updates its shadow tree or it gets disconnected from
        a document with the invalidated shadow tree.

        No new tests. Covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::~Document): Assert that m_svgUseElements has been cleared.
        (WebCore::Document::resolveStyle): Update the shadow trees of SVG use elements with invalidated shadow trees.
        (WebCore::Document::addSVGUseElement): Added.
        (WebCore::Document::removeSVGUseElement): Added.
        * dom/Document.h:
        (WebCore::Document::svgUseElements const): Added.
        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithChildren): Removed EventAllowedScope since the SVG use element's shadow
        tree is no longer updated when there is a NoEventDispatchAssertion in the stack.
        (WebCore::Element::cloneElementWithoutChildren): Ditto.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveComposedTree): No longer drops the assertion now that SVG use element's
        shadow tree is updated before calling this function.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoAncestor): Add the element to the document's hash set if this use element's
        shadow tree needs to be updated (m_shadowTreeNeedsUpdate is set), and it got newly connected.
        (WebCore::SVGUseElement::removedFromAncestor): Ditto for removal. We have to check m_shadowTreeNeedsUpdate before
        calling SVGGraphicsElement::removedFromAncestor or updateExternalDocument since either function can invoke
        m_shadowTreeNeedsUpdate to true.
        (WebCore::SVGUseElement::willRecalcStyle): Deleted. We no longer call updateShadowTree during style recalc.
        (WebCore::SVGUseElement::updateShadowTree): Remove this element from the document's hah set. We can't clear all
        the entries in the map at once in Document::resolveStyle because updating the shadow trees of a SVG use element
        can result in a sync IPC in ImageLoader::updateFromElement, which end up executing arbitrary author scripts.
        (WebCore::SVGUseElement::cloneTarget const): Removed EventAllowedScope since the SVG use element's shadow tree
        is no longer updated when there is a NoEventDispatchAssertion in the stack.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree const): Ditto.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree const): Ditto.
        (WebCore::SVGUseElement::invalidateShadowTree): Add the element to the document's hash set if it's connected.
        * svg/SVGUseElement.h:

2017-12-13  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION(225597): Can't select a text box or web view on a page when VO is on.
        https://bugs.webkit.org/show_bug.cgi?id=180756
        <rdar://problem/35996158>

        Reviewed by Brent Fulgham.

        No new tests.

        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle):

2017-12-13  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the "updating the finished state" procedure
        https://bugs.webkit.org/show_bug.cgi?id=180743
        <rdar://problem/36017232>

        Reviewed by Simon Fraser.

        The Web Animations spec defines a procedure for "updating the finished state", which should run as the timeline time
        changes and is responsible for ultimately triggering finish events and fulfil the "finished" promise. The procedure
        allows for two flags to control its behavior: didSeek and synchronouslyNotify. When synchronouslyNotify is true, the
        "finish notification steps" procedure is ran right away, otherwise it's queued as a microtask.

        In this patch we introduce the notion of "hold time", which is the time held while an animation is paused. It will be
        set by the pause() and play() method in future patches.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimations): Update the finished state as the timeline time changes with both flags
        set to false.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::currentTime const): Add a private currentTime(bool) variant which allows for the hold time to
        be ignored in case updateFinishedState() was called with the didSeek flag set to false.
        (WebCore::WebAnimation::updateFinishedState): Implement the procedure as specified with all spec-mandated steps inline.
        (WebCore::WebAnimation::scheduleMicrotaskIfNeeded): Schedule a microtask to complete the "finish notification steps"
        if we haven't scheduled a microtask before.
        (WebCore::WebAnimation::performMicrotask): Perform the microtask if the "finish notification steps" procedure hasn't
        been canceled after it was originally scheduled, as tracked by the m_finishNotificationStepsMicrotaskPending flag, since
        microtasks are not presently cancelable.
        (WebCore::WebAnimation::finishNotificationSteps): Implement the procedure as specified with all spec-mandated steps inline,
        dispatching a "finish" events and fulfilling the "finished" promise.
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:
        * dom/EventNames.h:

2017-12-13  Simon Fraser  <simon.fraser@apple.com>

        Fix crash under Document::visualUpdatesSuppressionTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=180758
        Document::visualUpdatesSuppressionTimerFired

        Reviewed by Zalan Bujtas.

        Speculative fix for crash under visualUpdatesSuppressionTimerFired() where view()
        can be null. Add null checks for the view() in all code called from this function.

        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::visualUpdatesSuppressionTimerFired):

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

        ASSERT(LayoutDisallowedScope::isLayoutAllowed()) whenever hitting Enter in Web Inspector console
        https://bugs.webkit.org/show_bug.cgi?id=180690

        Reviewed by Simon Fraser.

        Defer text replacement notification until after layout is done to avoid unexpected forced layouts.

        Covered by existing tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::disableAccessibility):
        (WebCore::AXObjectCache::remove):
        (WebCore::filterMapForRemoval):
        (WebCore::filterListForRemoval):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::deferTextReplacementNotificationForTextControl):
        (WebCore::filterForRemoval): Deleted.
        * accessibility/AXObjectCache.h: Need to use the base (Element) class since
        we can't call is<HTMLTextFormControlElement> in Node d'tor.
        (WebCore::AXObjectCache::deferTextReplacementNotificationForTextControl):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):

2017-12-13  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r225836.

        Broke the Windows build.

        Reverted changeset:

        "Unify some WebGL sources"
        https://bugs.webkit.org/show_bug.cgi?id=180726
        https://trac.webkit.org/changeset/225836

2017-12-13  Andy Estes  <aestes@apple.com>

        [Payment Request] Remove ApplePayPaymentMethodUpdateEvent and use PaymentDetailsModifiers instead
        https://bugs.webkit.org/show_bug.cgi?id=180737
        <rdar://problem/36013152>

        Reviewed by Brady Eidson.

        Instead of firing a non-standard "applepaypaymentmethodupdate" event when the payment method
        changes, use the PaymentDetailsModifier mechanism to allow the merchant to specify override
        totals and additional display items per payment method type.

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

        * DerivedSources.make:
        * Modules/applepay/ApplePayLineItem.idl:
        * Modules/applepay/ApplePayPaymentMethod.h:
        * Modules/applepay/ApplePayPaymentMethod.idl:
        * Modules/applepay/ApplePayPaymentMethodType.h: Added.
        * Modules/applepay/ApplePayPaymentMethodType.idl: Added.
        * Modules/applepay/cocoa/PaymentMethodCocoa.mm:
        * Modules/applepay/paymentrequest/ApplePayModifier.h: Added.
        * Modules/applepay/paymentrequest/ApplePayModifier.idl: Added.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::show):
        (WebCore::ApplePayPaymentHandler::computeTotalAndLineItems):
        (WebCore::ApplePayPaymentHandler::detailsUpdated):
        (WebCore::ApplePayPaymentHandler::shippingAddressUpdated):
        (WebCore::ApplePayPaymentHandler::shippingOptionUpdated):
        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
        (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.cpp: Removed.
        * Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.h: Removed.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::convert):
        (WebCore::MockPaymentCoordinator::updateTotalAndLineItems):
        (WebCore::MockPaymentCoordinator::completeShippingMethodSelection):
        (WebCore::MockPaymentCoordinator::completeShippingContactSelection):
        (WebCore::MockPaymentCoordinator::completePaymentMethodSelection):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

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

        is<HTMLTextFormControlElement> reports the input type.
        https://bugs.webkit.org/show_bug.cgi?id=180721
        <rdar://problem/36005123>

        Reviewed by Ryosuke Niwa.

        This patch ensures that is<HTMLTextFormControlElement> consistently returns true even
        when the input type changes from text to non-text (checkbox etc).

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectText):
        * dom/Element.h:
        (WebCore::Element::isTextFormControlElement const):
        (WebCore::Element::isTextField const):
        (WebCore::Element::isTextFormControl const): Deleted.
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::findFirstMarkable):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll):
        * html/FormController.cpp:
        (WebCore::FormController::formElementsCharacterCount const):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::directionality const):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::didEditInnerTextValue):
        (WebCore::HTMLTextFormControlElement::selectedText const):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        (WebCore::HTMLTextFormControlElement::selectionStart const):
        (WebCore::HTMLTextFormControlElement::computeSelectionStart const):
        (WebCore::HTMLTextFormControlElement::selectionEnd const):
        (WebCore::HTMLTextFormControlElement::computeSelectionEnd const):
        (WebCore::HTMLTextFormControlElement::selectionDirection const):
        (WebCore::HTMLTextFormControlElement::computeSelectionDirection const):
        (WebCore::HTMLTextFormControlElement::selection const):
        (WebCore::HTMLTextFormControlElement::selectionChanged):
        (WebCore::HTMLTextFormControlElement::lastChangeWasUserEdit const):
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        (WebCore::enclosingTextFormControl):
        * html/HTMLTextFormControlElement.h:
        (isType):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isOverTextInsideFormControlElement const):

2017-12-12  Dean Jackson  <dino@apple.com>

        Unify some WebGL sources
        https://bugs.webkit.org/show_bug.cgi?id=180726

        Rubber-stamped by Keith, weeks ago.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLRenderingContextBase.cpp:

2017-12-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix !ENABLE(MEDIA_STREAM) build after r225822
        https://bugs.webkit.org/show_bug.cgi?id=180666
        <rdar://problem/36008948>

        * html/HTMLMediaElement.cpp:

2017-12-12  Alex Christensen  <achristensen@webkit.org>

        Fix possible out-of-bounds read in protocolIsInHTTPFamily
        https://bugs.webkit.org/show_bug.cgi?id=180688

        Reviewed by Daniel Bates.

        It wouldn't read very far out of bounds, and it would just change a bool return value,
        but it's still out of bounds.  Covered by an API test that ASAN wouldn't like.

        * platform/URL.cpp:
        (WebCore::protocolIsInHTTPFamily):
        Check bounds before reading a string.

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

        getUserMedia is resolving before the document knows it is capturing
        https://bugs.webkit.org/show_bug.cgi?id=180699

        Reviewed by Eric Carlson.

        Covered by updated test.

        Ensure the document state is capturing when getUserMedia promise is resolved by doing the following:
        - Promise is resolved when MediaStream is producing data.
        - MediaStream asks Document to update its state when MediaStream state is updated.

        Introduce PendingActivationMediaStream for waiting for the MediaStream to produce data.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::statusDidChange):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::contextDestroyed):
        (WebCore::UserMediaRequest::PendingActivationMediaStream::PendingActivationMediaStream):
        (WebCore::UserMediaRequest::PendingActivationMediaStream::~PendingActivationMediaStream):
        (WebCore::UserMediaRequest::PendingActivationMediaStream::characteristicsChanged):
        (WebCore::UserMediaRequest::mediaStreamIsReady):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::PendingActivationMediaStream::create):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * WebCore/WebCore.xcodeproj/project.pbxproj:

2017-12-12  John Wilander  <wilander@apple.com>

        Storage Access API: Implement frame-specific access in the network storage session layer
        https://bugs.webkit.org/show_bug.cgi?id=180679
        <rdar://problem/35982116>

        Reviewed by Alex Christensen.

        Tests: http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-and-try-access-from-right-frame.html
               http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-but-try-access-from-wrong-frame.html

        This changes adds frameID and pageID to what is communicated for
        storage access and also stored in the network process' table of
        partitioning exceptions.

        * dom/Document.cpp:
        (WebCore::Document::hasStorageAccess):
            Now makes use of the new m_hasFrameSpecificStorageAccess to check
            if access has already been granted to this document's domain and
            frame.
        (WebCore::Document::requestStorageAccess):
            Now submits frameID and pageID in the request call and sets
            m_hasFrameSpecificStorageAccess upon granted access callback.
        * dom/Document.h:
        * page/ChromeClient.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::cookieStoragePartition const):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToPartitionOrBlockCookies):
        (WebCore::NetworkStorageSession::isStorageAccessGranted const):
        (WebCore::NetworkStorageSession::setStorageAccessGranted):
            Now makes use of frameID and pageID for partitioning exceptions.
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesInPartitionForURL):
        (WebCore::setCookiesFromDOM):
            Submits std::nullopt for frameID and pageID.
            Follow-up work tracked in https://bugs.webkit.org/show_bug.cgi?id=180682. 
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::applySniffingPoliciesAndStoragePartitionIfNeeded):
            Submits std::nullopt for frameID and pageID.
            Follow-up work tracked in https://bugs.webkit.org/show_bug.cgi?id=180682. 

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

        Playing webrtc video tracks should prevent from display to got to sleep
        https://bugs.webkit.org/show_bug.cgi?id=180666

        Reviewed by Darin Adler.

        Done through manual testing by checking screen assertions taken on webrtc sites.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldDisableSleep const):

2017-12-12  Dean Jackson  <dino@apple.com>

        Add CanvasRenderingContext2DBase class and OffscreenCanvasRenderingContext2D
        https://bugs.webkit.org/show_bug.cgi?id=180718
        <rdar://problem/36004015>

        Reviewed by Sam Weinig.

        Add an OffscreenCanvasRenderingContext2D class, and in the process create a shared
        base class for it and CanvasRenderingContext2D, called CanvasRenderingContext2DBase.
        The base class has nearly all the functionality, with the exception of the text
        and focus rendering APIs, which are only exposed on CanvasRenderingContext2D.

        At the moment CanvasRenderingContext2DBase's implementation still expects the attached
        canvas to be an HTMLCanvasElement, but that's ok since you can't yet create an
        OffscreenCanvasRenderingContext2D. A subsequent patch will do the right thing.

        No change in functionality at the moment, so covered by the existing tests.

        * DerivedSources.make: Add the new IDL file.

        * Sources.txt: Add all the new files to compile.
        * WebCore.xcodeproj/project.pbxproj:

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp: Removed some unnecessary headers, and
        added JSC:: where appropriate.
        (WebCore::JSCanvasRenderingContext2DOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCanvasRenderingContext2D::visitAdditionalChildren):

        * bindings/js/JSOffscreenCanvasRenderingContext2DCustom.cpp: Copied from Source/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp.
        (WebCore::root): New root function that just returns the address of the OffscreenCanvas.
        (WebCore::JSOffscreenCanvasRenderingContext2DOwner::isReachableFromOpaqueRoots):
        (WebCore::JSOffscreenCanvasRenderingContext2D::visitAdditionalChildren):

        * bindings/js/JSWorkerNavigatorCustom.cpp: Add JSC:: to fix a compilation error.
        (WebCore::JSWorkerNavigator::visitAdditionalChildren):

        * bindings/js/WebCoreBuiltinNames.h: New IDL types.

        * html/OffscreenCanvas.idl: Explicitly generates an IsReachable.

        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isOffscreen2d const): Helper for is<> trait.

        * html/canvas/CanvasRenderingContext2D.cpp: Nearly everything has been moved to the Base class.
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2DBase.cpp: Copied from Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp.
        * html/canvas/CanvasRenderingContext2DBase.h: Copied from Source/WebCore/html/canvas/CanvasRenderingContext2D.h.

        * html/canvas/OffscreenCanvasRenderingContext2D.cpp: Added. Basic implementation that
        just uses the Base class.
        (WebCore::OffscreenCanvasRenderingContext2D::OffscreenCanvasRenderingContext2D):
        * html/canvas/OffscreenCanvasRenderingContext2D.h: Added.
        * html/canvas/OffscreenCanvasRenderingContext2D.idl: Added.

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

        [EME] Support FPS-over-HLS in the Modern EME API
        https://bugs.webkit.org/show_bug.cgi?id=180707

        Reviewed by Eric Carlson.

        Add support for the "skd" initDataType, where the initData is the URI provided in the 
        EXT-X-KEY tag in a HLS manifest:

        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::sinfName):
        (WebCore::CDMPrivateFairPlayStreaming::skdName):
        (WebCore::extractSinfData):
        (WebCore::CDMPrivateFairPlayStreaming::sanitizeSkd):
        (WebCore::CDMPrivateFairPlayStreaming::extractKeyIDsSkd):
        (WebCore::validInitDataTypes):
        (WebCore::CDMFactory::platformRegisterFactories):
        (WebCore::CDMPrivateFairPlayStreaming::supportsInitDataType const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsConfiguration const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsInitData const):
        (WebCore::sinfName): Deleted.

        Add support for creating a AVContentKeyRequest from a skd key URI rather than from
        initialization data, and for extracting keyIDs from the AVContentKeyRequest identifier.

        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::keyIDs):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::requestLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequest):

        Add support for AVContentKeySession to MediaPlayerPrivateAVFoundationObjC, and for emitting
        initializationData messages when encountering a loading request for a "skd" URI.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::attemptToDecryptWithInstance):

2017-12-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose promises on Animation interface
        https://bugs.webkit.org/show_bug.cgi?id=180710
        <rdar://problem/36000604>

        Reviewed by Dean Jackson.

        Expose the "ready" and "finished" promises on Animation. A future patch will fulfil or reject them.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::WebAnimation):
        (WebCore::WebAnimation::readyPromiseResolve):
        (WebCore::WebAnimation::finishedPromiseResolve):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

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

        Fetch Event header filtering should apply in CORS mode only
        https://bugs.webkit.org/show_bug.cgi?id=180708

        Reviewed by Alex Christensen.

        Covered by no-longer failing test.

        * workers/service/context/ServiceWorkerFetch.cpp: cleaning headers only in case of CORS mode.

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

        REGRESSION (Safari 11): custom <font-face> tag crashes a page
        https://bugs.webkit.org/show_bug.cgi?id=177848

        Reviewed by Darin Adler.

        We currently use the CSS property parsers to parse SVG's <font-face> element attributes. Instead,
        we should be using the CSS descriptor parsers to parse these attributes. However, this is a
        fairly involved task, so until I can finish that, this patch fixes the crash. The crash is simple;
        the descriptors shouldn't accept the universal keywords ("initial", "inherit", etc.) and our
        font-face machinery assumes this. So the fix is just detect these keywords and explicitly disallow
        them.

        Test: svg/text/font-style-keyword.html

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::parseAttribute):

2017-12-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the playState property on Animation
        https://bugs.webkit.org/show_bug.cgi?id=180711
        <rdar://problem/36000982>

        Reviewed by Dean Jackson.

        Expose the playState and pending properties. The playState property has a complete implementation but
        has some test failures due to Animation lacking correct behavior while running animations which will
        be fixed in a followup patch. The pending property is a placeholder until we implement pending play
        and pause tasks in followup patches.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::playState const):
        (WebCore::WebAnimation::effectEndTime const):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2017-12-12  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Implement alignment for absolute positioned grid items
        https://bugs.webkit.org/show_bug.cgi?id=180632

        Reviewed by Manuel Rego Casasnovas.

        We are changing how we compute the grid area's size of positioned
        items, trying to make the logic as independent as possible of the
        grid container's direction.

        The new way of placing absolute positioned elements in their grid area
        is based on the previously computed area's size. This provide a
        mechanism to place an item in its area respecting the offsets derived
        from the Content Alignment CSS properties and, which is more important,
        ignoring the grid container's direction.

        Additionally, we use the already implemented alignment logic that's
        used for regular grid items. This patch provides almost full alignment
        capabilities for positioned objects, with the exception of 'stretch'.

        It's worth mentioning that some of the test cases using vertical-rl
        writing mode will fail because of the bug 180633.

        Updated web-platform-tests results of the test cases that pass now.

        * rendering/GridLayoutFunctions.cpp:
       (WebCore::GridLayoutFunctions::hasOverrideContainingBlockContentSizeForChild):
        (WebCore::GridLayoutFunctions::overrideContainingBlockContentSizeForChild):
        * rendering/GridLayoutFunctions.h:
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::updateOverrideContainingBlockContentSizeForChild const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::gridItemOffset const):
        (WebCore::RenderGrid::hasStaticPositionForChild const):
        (WebCore::RenderGrid::layoutPositionedObject):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        (WebCore::RenderGrid::columnAxisPositionForChild const):
        (WebCore::RenderGrid::rowAxisPositionForChild const):
        (WebCore::RenderGrid::columnAxisOffsetForChild const):
        (WebCore::RenderGrid::rowAxisOffsetForChild const):
        (WebCore::RenderGrid::gridPositionIsAutoForOutOfFlow const):
        (WebCore::RenderGrid::resolveAutoStartGridPosition const):
        (WebCore::RenderGrid::resolveAutoEndGridPosition const):
        (WebCore::RenderGrid::gridAreaBreadthForOutOfFlowChild):
        (WebCore::RenderGrid::logicalOffsetForChild const):
        (WebCore::RenderGrid::gridAreaPositionForOutOfFlowChild const):
        (WebCore::RenderGrid::gridAreaPositionForInFlowChild const):
        (WebCore::RenderGrid::gridAreaPositionForChild const):
        (WebCore::RenderGrid::translateOutOfFlowRTLCoordinate const):
        (WebCore::RenderGrid::findChildLogicalPosition const):
        * rendering/RenderGrid.h:
        * rendering/style/GridPositionsResolver.cpp:
        (WebCore::adjustGridPositionsFromStyle):
        (WebCore::GridPositionsResolver::initialPositionSide):
        (WebCore::GridPositionsResolver::finalPositionSide):
        * rendering/style/GridPositionsResolver.h:

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

        [EME] Support reporting and restoring persistent usage data.
        https://bugs.webkit.org/show_bug.cgi?id=180684

        Reviewed by Eric Carlson.

        Add support for reading and acknowledging persistent usage data from the MediaKeys storage
        directory.

        Add a mechanism for passing the storage location down to CDMPrivate and CDMInstance objects
        inside of the CDM class itself:

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::createInstance):
        (WebCore::CDM::storageDirectory const):
        * Modules/encryptedmedia/CDM.h:

        Support loading expired session data, acknowledging expired session data, closing sessions
        and removing usable key data.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::isEqual):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::closeSession):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::removeSessionData):

2017-12-12  Christopher Reid  <chris.reid@sony.com>

        WebGL TextureMapperShaderProgram shaders don't compile in MSVC
        https://bugs.webkit.org/show_bug.cgi?id=180709

        Reviewed by Myles C. Maxfield.

        No new tests, no change in behavior.

        Vertex and Fragment shaders were not compiling because TextureMapperShaderProgram.cpp was
        stringifying "#if USE(OPENGL_ES_2) ... #endif" into the shaders rather than evaluating these
        preprocessor directives before the STRINGIFY expansion.

        Moved these #if conditions outside of STRINGIFY to remove compiler ambiguity.

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:

2017-12-12  Zach Li  <zachli@apple.com>
        [WK2] Expose image via WKBundleHitTestResult API.
        https://bugs.webkit.org/show_bug.cgi?id=180552.
        rdar://problem/23951521

        Reviewed by Simon Fraser.

        * platform/graphics/ImageSource.h:
        This method will be used by clients outside WebCore, so
        add WEBCORE_EXPORT.

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

        Remove ColorSpaceDeviceRGB and most users of the obsolete deviceRGB colorspace
        https://bugs.webkit.org/show_bug.cgi?id=180689

        Reviewed by Tim Horton.

        Remove the ColorSpaceDeviceRGB enum and users.

        ImageBuffer now uses sRGB instead of deviceRGB in the few cases that used the latter.

        Switch Windows CG code to use sRGBColorSpaceRef() instead of deviceRGBColorSpaceRef().

        Have linearRGBColorSpaceRef() use kCGColorSpaceLinearSRGB, which is present in iOS 9 and 10.11 and later.

        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        * platform/graphics/Color.cpp:
        (WebCore::operator<<):
        * platform/graphics/ColorSpace.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::transformColorSpace):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::Color::Color):
        (WebCore::leakCGColor):
        (WebCore::createCGColorWithDeviceRGBA): Deleted.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        (WebCore::linearRGBColorSpaceRef):
        (WebCore::extendedSRGBColorSpaceRef):
        (WebCore::displayP3ColorSpaceRef):
        (WebCore::deviceRGBColorSpaceRef): Deleted.
        * platform/graphics/cg/GraphicsContextCG.h:
        (WebCore::cachedCGColorSpace):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContext::drawWindowsBitmap):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::create):
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::pixelBufferFromCGImage const):
        * platform/win/DragImageCGWin.cpp:
        (WebCore::allocImage):
        (WebCore::createCgContextFromBitmap):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):

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

        Navigation requests should use navigate fetch mode
        https://bugs.webkit.org/show_bug.cgi?id=179808

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::buildOptions): Update to throw only if init.mode is Navigate.
        * Modules/fetch/FetchRequestInit.h:
        (WebCore::FetchRequestInit::hasMembers const): If init is present, set default values as per spec.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadMainResource): Set fetch mode to navigate.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Bypass preflight in case fetch mode is navigate.

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

        HTML-page with <object type="image/svg+xml" data="foo.svg"> often is blank
        https://bugs.webkit.org/show_bug.cgi?id=180524
        <rdar://problem/35920554>

        Reviewed by Antti Koivisto.

        The test case has script that conditionalizes behavior on whether window.innerWidth/Height
        are zero during the load event. We didn't force layout in innerWidth/Height, so whether
        they would zero depended on whether the parent frame had laid out, which was timing-sensitive.

        Fix by triggering enough layout in the parent document so that the FrameView is resized before
        fetching its dimensions in innerWidth/Height. This causes our behavior to match Chrome and Firefox.

        Test: fast/dom/iframe-innerWidth.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Add some logging that helped me diagnose this.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight const):
        (WebCore::DOMWindow::innerWidth const):

2017-12-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Enqueue and dispatch animation events
        https://bugs.webkit.org/show_bug.cgi?id=180657
        <rdar://problem/35970103>

        Reviewed by Chris Dumez.

        Now that we have support for the AnimationPlaybackEvent interface, we need a way to enqueue
        such events for dispatch at the opportune time. The Web Animations spec defines two ways
        to queue and dispatch events.

        If the animation has a "document for timing", it should enqueue events on this document.
        In our implementation, if the animation timeline is set to a DocumentTimeline, that means
        it has a document for timing, and we let the DocumentTimeline enqueue those events, which
        will be dispatched through a dedicated GenericTaskQueue<Timer>. These events will be sorted
        by their respective timeline time before being dispatched.

        If there is no document for timing, events should be dispatched as a standalone task.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::~DocumentTimeline): Close the event dispatch task queue when the
        document timeline is torn down.
        (WebCore::DocumentTimeline::enqueueAnimationPlaybackEvent): Add the provided event to the
        pending animation events queue and, if one hasn't been registered yet, enqueue a task to
        dispatch events using a GenericTaskQueue<Timer>.
        (WebCore::compareAnimationPlaybackEvents): Comparator used to sort events in performEventDispatchTask()
        where events are sorted such that unresolved timeline times come first, and then from the
        earlier resolved timeline times to the later resolved timeline times. Events with unresolved
        timeline times and equal resolved timeline times are sorted in the order they were enqueued.
        (WebCore::DocumentTimeline::performEventDispatchTask): Run a stable sort on a copy of the pending list
        of events to dispatch and dispatch the events individually on their respective animations.
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create): Pass in the document to the constructor.
        (WebCore::WebAnimation::WebAnimation): Use the provided document to initialize ActiveDOMObject.
        (WebCore::WebAnimation::enqueueAnimationPlaybackEvent): Create an AnimationPlaybackEvent with
        the provided type, timeline time and animation time and enqueue it on the document timeline,
        if one is available, or dispatch on this animation as a standalone task.
        (WebCore::WebAnimation::acceleratedRunningStateDidChange):
        (WebCore::WebAnimation::activeDOMObjectName const):
        (WebCore::WebAnimation::canSuspendForDocumentSuspension const):
        (WebCore::WebAnimation::stop):
        * animation/WebAnimation.h: Define WebAnimation to be an EventTarget and an ActiveDOMObject.
        * animation/WebAnimation.idl: Define WebAnimation to be an EventTarget and an ActiveDOMObject.
        * dom/EventTargetFactory.in:

2017-12-12  Chris Dumez  <cdumez@apple.com>

        Simplify IPC code between WebProcess and StorageProcess for serviceWorker.postMessage()
        https://bugs.webkit.org/show_bug.cgi?id=180683

        Reviewed by Brady Eidson.

        Merge the 2 code paths from calling postMessage() from a ServiceWorkerClient and from
        a ServiceWorker. Also, postMessage() now only IPCs an identifier from the WebContent
        process to the StorageProcess. The ServiceWorkerClientData is looked up on Storage
        process side from the identifier before being sent to the context process.

        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::clientByID const):
        (WebCore::SWServer::matchAll):
        (WebCore::SWServer::forEachClientForOrigin):
        (WebCore::SWServer::claim):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::findClientByIdentifier):
        * workers/service/server/SWServerWorker.h:

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

        Allow AudioContext to start when getUserMedia is on
        https://bugs.webkit.org/show_bug.cgi?id=180680

        Reviewed by Eric Carlson.

        Test: webrtc/getUserMedia-webaudio-autoplay.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::willBeginPlayback):

2017-12-12  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Throw RangeError if a size is provided when creating a readable byte stream
        https://bugs.webkit.org/show_bug.cgi?id=180470

        Reviewed by Youenn Fablet.

        Throw a RangeError if a ReadableStream is created with type 'bytes' and with a
        non-undefined strategy size, as per latest spec:
        - https://github.com/whatwg/streams/pull/856
        - https://streams.spec.whatwg.org/#rs-constructor (step 4.c)

        One new test imported from WPT to check that RangeError is thrown.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream): Check strategy size and throw RangeError if needed.

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

        [GTK][WebRTC] Stop warning with so much verbosity about not implemented RealtimeMediaSourceCenter
        https://bugs.webkit.org/show_bug.cgi?id=180694

        Reviewed by Youenn Fablet.

        No new tests -- no change in functionality.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::singleton):

2017-12-12  Ms2ger  <Ms2ger@igalia.com>

        Implement {DOMMimeTypeArray, DOMPluginArray}::supportedPropertyNames().
        https://bugs.webkit.org/show_bug.cgi?id=180471

        Reviewed by Darin Adler.

        Test: imported/w3c/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html

        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::supportedPropertyNames):
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::supportedPropertyNames):

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

        [WTF] Thread::create should have Thread::tryCreate
        https://bugs.webkit.org/show_bug.cgi?id=180333

        Reviewed by Darin Adler.

        No behavior change.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        * platform/audio/ReverbConvolver.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):

2017-12-11  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Automatic minimum size is not clamped if min track sizing function is auto
        https://bugs.webkit.org/show_bug.cgi?id=180283

        Reviewed by Darin Adler.

        We were not clamping the automatic minimum size when
        the min track sizing function was intrinsic (e.g. minmax(auto, 0px)).
        However the spec (https://drafts.csswg.org/css-grid/#min-size-auto)
        is very clear regarding that.

        This patch modifies
        GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem(),
        so in the case of a fixed max track sizing function it clamps
        the automatic minimum size of the item to the stretch fit
        of the grid area's size.
        It needs to take into account if the item has fixed size, margin, border
        and/or padding as those cannot be clamped.

        Using WPT tests to verify this behavior,
        and corrected a bunch of other tests that were wrong.

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-017.html
              imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html
              imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem):
        * rendering/GridTrackSizingAlgorithm.h:
        (WebCore::GridTrack::growthLimitIsInfinite const):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::cacheMinMaxTrackBreadthTypes):
        (WebCore::GridTrackSize::hasFixedMaxTrackBreadth const):

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

        [Cairo] Cairo::clipToImageBuffer() should operate on a cairo_surface_t
        https://bugs.webkit.org/show_bug.cgi?id=180665

        Reviewed by Michael Catanzaro.

        Have the Cairo::clipToImageBuffer() function in the CairoUtilities code
        operate on a cairo_surface_t object, instead of an Image object.

        Call site in GraphicsContext::clipToImageBuffer() is adjusted to first
        ensure a non-null Image object, and then retrieve a cairo_surface_t
        object from that, passing it on to Cairo::clipToImageBuffer().

        No new tests -- no change in functionality.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::clipToImageBuffer):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):

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

        [Cairo] Don't use a static cairo_surface_t object for CairoPath contexts
        https://bugs.webkit.org/show_bug.cgi?id=180663

        Reviewed by Michael Catanzaro.

        Instead of using a single cairo_surface_t object and sharing it between
        different cairo_t objects handled by CairoPath, create a new mock 1x1px
        alpha-only surface for each cairo_t object that's allocated in the
        CairoPath constructor.

        This avoids potential issues in how Cairo's state handling internally
        uses these surfaces, which is completely opaque to us and out of our
        control. This also avoids crashes when using this one cairo_surface_t
        object through different CairoPath objects across different threads.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/PlatformPathCairo.cpp:
        (WebCore::CairoPath::CairoPath):
        (WebCore::pathSurface): Deleted.
        * platform/graphics/cairo/PlatformPathCairo.h:
        (WebCore::CairoPath::context):

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

        [CoordGraphics] Move UpdateAtlas, AreaAllocator into the platform layer
        https://bugs.webkit.org/show_bug.cgi?id=180641

        Reviewed by Michael Catanzaro.

        Move the UpdateAtlas and AreaAllocator classes and their source files
        into the platform layer. This still means using the WebCore namespace,
        but apart from that these two classes have no dependency on anything in
        the WebKit layer, so they can be moved from there.

        No new tests -- no change in functionality.

        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/coordinated/AreaAllocator.cpp: Renamed from Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp.
        (WebCore::AreaAllocator::AreaAllocator):
        (WebCore::AreaAllocator::~AreaAllocator):
        (WebCore::AreaAllocator::expand):
        (WebCore::AreaAllocator::expandBy):
        (WebCore::AreaAllocator::release):
        (WebCore::AreaAllocator::overhead const):
        (WebCore::AreaAllocator::roundAllocation const):
        (WebCore::GeneralAreaAllocator::GeneralAreaAllocator):
        (WebCore::GeneralAreaAllocator::~GeneralAreaAllocator):
        (WebCore::GeneralAreaAllocator::freeNode):
        (WebCore::GeneralAreaAllocator::expand):
        (WebCore::fitsWithin):
        (WebCore::GeneralAreaAllocator::allocate):
        (WebCore::GeneralAreaAllocator::allocateFromNode):
        (WebCore::GeneralAreaAllocator::splitNode):
        (WebCore::GeneralAreaAllocator::updateLargestFree):
        (WebCore::GeneralAreaAllocator::release):
        (WebCore::GeneralAreaAllocator::overhead const):
        * platform/graphics/texmap/coordinated/AreaAllocator.h: Renamed from Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.h.
        (WebCore::nextPowerOfTwo):
        (WebCore::AreaAllocator::size const):
        (WebCore::AreaAllocator::minimumAllocation const):
        (WebCore::AreaAllocator::setMinimumAllocation):
        (WebCore::AreaAllocator::margin const):
        (WebCore::AreaAllocator::setMargin):
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp: Renamed from Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp.
        (WebCore::UpdateAtlas::UpdateAtlas):
        (WebCore::UpdateAtlas::~UpdateAtlas):
        (WebCore::UpdateAtlas::buildLayoutIfNeeded):
        (WebCore::UpdateAtlas::didSwapBuffers):
        (WebCore::UpdateAtlas::getCoordinatedBuffer):
        * platform/graphics/texmap/coordinated/UpdateAtlas.h: Renamed from Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h.
        (WebCore::UpdateAtlas::size const):
        (WebCore::UpdateAtlas::supportsAlpha const):
        (WebCore::UpdateAtlas::addTimeInactive):
        (WebCore::UpdateAtlas::isInactive const):
        (WebCore::UpdateAtlas::isInUse const):

2017-12-11  Ryosuke Niwa  <rniwa@webkit.org>

        Disable NoEventDispatchAssertion release assertion in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=180616

        Reviewed by Zalan Bujtas.

        Disabled the release assertion for NoEventDispatchAssertion in WebKit1 since there are many
        delegate callbacks that happen at unsafe timing, and we don't have any hope of fixing them
        in short term.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * dom/Document.cpp:
        (WebCore::isSafeToUpdateStyleOrLayout):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeClassicScript):
        * platform/RuntimeApplicationChecks.h:
        (WebCore::isInWebProcess):
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::isInWebProcess): Extracted from IOSApplication::isWebProcess.
        (WebCore::IOSApplication::isWebProcess):

2017-12-11  Darin Adler  <darin@apple.com>

        Improve FontSelectionAlgorithm, including moving from IntegerHasher to Hasher
        https://bugs.webkit.org/show_bug.cgi?id=180340

        Reviewed by Dan Bates.

        * css/CSSFontFaceSet.h: Moved FontSelectionRequestKey and FontSelectionRequestKeyHash
        here to be private members, and used a std::optional instead of a class for this.
        Also use the new Hasher to compute the hash. Also added FontSelectionRequestKeyHashTraits.

        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription): Updated since FontSelectionRequest
        does not always have a constructor any more.

        * platform/graphics/FontSelectionAlgorithm.h: Tweaked comments. Used "using" instead
        of typedef. Formatted some trivial functions as single lines. Stopped using
        NeverDestroyed for simple classes like FontSelectionValue; it's not needed unless
        there is a destructor. Got rid of some incorrect use of const. Replaced some member
        functions with non-member functions. Moved some function bodies out of class definitions.
        Used a lot of constexpr functions.
        (WebCore::FontSelectionRequest::tied const): Added so we can easily write both == and the
        hash function without listing the data members.
        (WebCore::add): Added an overload so we can hash things that include FontSelectionRequest.
        (WebCore::FontSelectionRequestKey::FontSelectionRequestKey): Changed this class to
        use std::optional instead of a separate boolean for deleted values.
        (WebCore::FontSelectionRequestKey::isHashTableDeletedValue const): Ditto.
        (WebCore::FontSelectionRequestKey::operator== const): Ditto.
        (WebCore::FontSelectionRequestKeyHash::hash): Ditto.
        (WebCore::FontSelectionRequestKeyHash::equal): Ditto.
        (WebCore::FontSelectionCapabilities::tied const): Added so we can easily write both ==
        and the hash function without listing the data members.
        (WebCore::FontSelectionSpecifiedCapabilities::tied const): Ditto.
        (WebCore::FontSelectionAlgorithm::FontSelectionAlgorithm): Use make_unique instead of new.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::findClosestFont): Move in the vector instead of copying it when creating a
        FontSelectionAlgorithm object.

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

        [EME] support update() for FairPlayStreaming in Modern EME API
        https://bugs.webkit.org/show_bug.cgi?id=180542

        Reviewed by Eric Carlson.

        Support the updateLicense() method in CDMInstanceFairPlayStreaming. Also, support adding a
        AVStreamDataParser to the AVContentKeySession.

        Drive-by fixes:

        - Sometimes, AVFoundation will give us a base64 encoded string with spaces url-disallowed
        characters, so use base64Decode() rather than base64URLDecode().

        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::validFairPlayStreamingSchemes):
        (WebCore::extractSinfData):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didFailToProvideRequest):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstance const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::attemptToDecryptWithInstance):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::destroyParser):
        (WebCore::SourceBufferPrivateAVFObjC::setCDMInstance):

2017-12-11  Eric Carlson  <eric.carlson@apple.com>

        Web Inspector: Optionally log WebKit log parameters as JSON
        https://bugs.webkit.org/show_bug.cgi?id=180529
        <rdar://problem/35909462>

        Reviewed by Joseph Pecoraro.

        * dom/Document.cpp:
        (WebCore::Document::didLogMessage):Update for API change. Don't check for main thread, that
        is already done in addConsoleMessage.
        * dom/Document.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Cleanup logging.

        * html/track/DataCue.cpp:
        (WebCore::DataCue::toJSONString const): Serialize to JSON string.
        (WebCore::DataCue::toString const): Deleted.
        * html/track/DataCue.h:
        (WTF::LogArgument<WebCore::DataCue>::toString):

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::toJSON const): Ditto.
        (WebCore::TextTrackCue::toJSONString const):
        (WebCore::TextTrackCue::toString const): Deleted.
        * html/track/TextTrackCue.h:
        (WTF::LogArgument<WebCore::TextTrackCue>::toString):

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::toJSONString const): Ditto.
        (WebCore::TextTrackCueGeneric::toString const): Deleted.
        * html/track/TextTrackCueGeneric.h:
        (WTF::LogArgument<WebCore::TextTrackCueGeneric>::toString):

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::toJSONString const): Ditto.
        (WebCore::VTTCue::toString const): Deleted.
        * html/track/VTTCue.h:
        (WTF::LogArgument<WebCore::VTTCue>::toString):

        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::toJSONString const): Ditto.
        (WTF::LogArgument<WebCore::GenericCueData>::toString):
        (WebCore::GenericCueData::toString const): Deleted.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings): Cleanup logging.
        (WebCore::InbandTextTrackPrivateAVF::removeCompletedCues): Ditto.
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): Log the entire cue.
        (WebCore::InbandTextTrackPrivateAVF::readNativeSampleBuffer): Cleanup logging.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::maxMediaTimeSeekable const): Don't log, it isn't
        interesting and happens frequently.
        (WebCore::MediaPlayerPrivateAVFoundation::minMediaTimeSeekable const): Ditto.

        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::toJSONString const): Serialize to JSON string.

        * platform/graphics/iso/ISOVTTCue.h:
        (WTF::LogArgument<WebCore::ISOWebVTTCue>::toString): Ditto.

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

        Use VCP H264 encoder for platforms supporting it
        https://bugs.webkit.org/show_bug.cgi?id=179076
        rdar://problem/35180773

        Reviewed by Eric Carlson.

        Covered by existing test coverage.

        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp:
        (WebCore::VideoToolboxVideoEncoderFactory::setActive):
        (WebCore::VideoToolboxVideoEncoderFactory::CreateSupportedVideoEncoder):
        (WebCore::VideoToolboxVideoEncoderFactory::DestroyVideoEncoder):
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.h:

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

        Merge ServiceWorkerClientIdentifier into ServiceWorkerClientData
        https://bugs.webkit.org/show_bug.cgi?id=180669

        Reviewed by Youenn Fablet.

        Merge ServiceWorkerClientIdentifier into ServiceWorkerClientData, for consistency with
        ServiceWorkerIdentifier / ServiceWorkerData, and start simplifying the postMessage() code.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::setServiceWorkerConnection):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::getOrCreate):
        (WebCore::ServiceWorkerClient::ServiceWorkerClient):
        * workers/service/ServiceWorkerClient.h:
        (WebCore::ServiceWorkerClient::identifier const):
        * workers/service/ServiceWorkerClientData.cpp:
        (WebCore::ServiceWorkerClientData::isolatedCopy const):
        (WebCore::ServiceWorkerClientData::from):
        * workers/service/ServiceWorkerClientData.h:
        (WebCore::ServiceWorkerClientData::encode const):
        (WebCore::ServiceWorkerClientData::decode):
        * workers/service/ServiceWorkerClientInformation.h: Removed.
        * workers/service/ServiceWorkerClients.cpp:
        (WebCore::didFinishGetRequest):
        (WebCore::ServiceWorkerClients::get):
        (WebCore::matchAllCompleted):
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/ServiceWorkerWindowClient.cpp:
        (WebCore::ServiceWorkerWindowClient::ServiceWorkerWindowClient):
        * workers/service/ServiceWorkerWindowClient.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorker):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postMessageToServiceWorker):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::findClientByIdentifier):
        (WebCore::SWServer::matchAll):
        (WebCore::SWServer::claim):
        (WebCore::SWServer::registerServiceWorkerClient):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.h:

2017-12-11  Daniel Bates  <dabates@apple.com>

        Fix the macOS Sierra build following r225179
        (https://bugs.webkit.org/show_bug.cgi?id=180011)

        Substitute TARGET_MAC_OS_X_VERSION_LESS_THAN_101300 for TARGET_MAC_OS_X_VERSION_LESS_THAN_1013000.

        * Configurations/WebCore.xcconfig:

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

        Make FrameView objects IsoHeap allocated
        https://bugs.webkit.org/show_bug.cgi?id=180668
        <rdar://problem/35976738>

        Reviewed by Simon Fraser.

        Related to <https://trac.webkit.org/changeset/225719/webkit>

        * page/FrameView.cpp:
        * page/FrameView.h:

2017-12-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement AnimationPlaybackEvent and AnimationPlaybackEventInit
        https://bugs.webkit.org/show_bug.cgi?id=180647

        Reviewed by Dean Jackson.

        Actually fix Windows build this time.

        * animation/AnimationPlaybackEventInit.h:

2017-12-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement AnimationPlaybackEvent and AnimationPlaybackEventInit
        https://bugs.webkit.org/show_bug.cgi?id=180647
        <rdar://problem/35966325>

        Reviewed by Dean Jackson.

        Unreviewed, fix Windows build.

        * animation/AnimationPlaybackEventInit.h:

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

        FloatingObjects/FloatingObject classes should hold weak references to renderers
        https://bugs.webkit.org/show_bug.cgi?id=180627
        <rdar://problem/35954069>

        Reviewed by Antti Koivisto.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::FloatingObject):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::FloatingObjects):
        (WebCore::FloatingObjects::clearLineBoxTreePointers):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining const):
        (WebCore::ComputeFloatOffsetAdapter<FloatTypeValue>::collectIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::renderer const):
        (WebCore::FloatingObjects::renderer const):

2017-12-11  David Quesada  <david_quesada@apple.com>

        Turn on ENABLE_APPLICATION_MANIFEST
        https://bugs.webkit.org/show_bug.cgi?id=180562
        rdar://problem/35924737

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):
        * loader/cached/CachedResourceRequest.cpp:
            Add a missing #include that was implicitly added in the unified source when
            the feature is disabled.

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

        Add a runtime feature flag for ImageBitmap and OffscreenCanvas
        https://bugs.webkit.org/show_bug.cgi?id=180652
        <rdar://problem/35969611>

        Reviewed by Antoine Quint.

        Add a RuntimeEnabledFeature for these interfaces, and link the bindings
        to the feature.

        Test: fast/canvas/offscreen-enabled.html

        * bindings/js/WebCoreBuiltinNames.h:
        * html/ImageBitmap.idl:
        * html/OffscreenCanvas.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setImageBitmapOffscreenCanvasEnabled):
        (WebCore::RuntimeEnabledFeatures::imageBitmapOffscreenCanvasEnabled const):
        * page/WindowOrWorkerGlobalScope.idl:

2017-12-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement AnimationPlaybackEvent and AnimationPlaybackEventInit
        https://bugs.webkit.org/show_bug.cgi?id=180647
        <rdar://problem/35966325>

        Reviewed by Dean Jackson.

        We implement the AnimationPlaybackEvent interface and AnimationPlaybackEventInit dictionary
        as the first step towards dispatching animation "finish" and "cancel" events.

        Animation playback events will be dispatched on Animation objects and expose the timeline time
        and animation current time at the time they were constructed. Dispatch itself, which will be
        the focus of the next patch, is not synchronous, so it's important to track those values
        at creation time.

        No new tests yet, followup patches will enable event dispatch and existing Web Platform Tests
        will show progressions.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationPlaybackEvent.cpp: Added.
        (WebCore::AnimationPlaybackEvent::AnimationPlaybackEvent):
        (WebCore::AnimationPlaybackEvent::bindingsCurrentTime const):
        (WebCore::AnimationPlaybackEvent::bindingsTimelineTime const):
        * animation/AnimationPlaybackEvent.h: Added.
        * animation/AnimationPlaybackEvent.idl: Added.
        * animation/AnimationPlaybackEventInit.h: Added.
        * animation/AnimationPlaybackEventInit.idl: Added.
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:

2017-12-11  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] DumpRenderTree times out for all non-http tests
        https://bugs.webkit.org/show_bug.cgi?id=180571

        Reviewed by Alex Christensen.

        Bug fix on processing the curl event for file protocol.

        No new tests. This fix is to run existing tests.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::completeDidReceiveResponse):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::isCompleted const):
        (WebCore::CurlRequest::isCancelled const):
        (WebCore::CurlRequest::isCompletedOrCancelled const):

2017-12-11  Manuel Rego Casasnovas  <rego@igalia.com>

        REGRESSION(r221931): Row stretch doesn't work for grid container with min-height
        https://bugs.webkit.org/show_bug.cgi?id=180287

        Reviewed by Darin Adler.

        In r221931 we moved the stretch phase as the last step of
        the track sizing algorithm.
        However this introduced a regression as we were no longer
        taking into account the grid container min-width|height constraints
        during this step.

        The CSS WG modified the spec so it now defines what to do
        in these situations (https://drafts.csswg.org/css-grid/#algo-stretch):
          "If the free space is indefinite, but the grid container
           has a definite min-width/height, use that size to calculate
           the free space for this step instead."

        This patch adds a new method
        GridTrackSizingAlgorithmStrategy::freeSpaceForStretchAutoTracksStep().
        When we're in the DefiniteSizeStrategy it just returns the current
        free space.
        For the IndefiniteSizeStrategy in the columns case we don't need
        any special computation (the same that happens in
        recomputeUsedFlexFractionIfNeeded()); for rows it uses the min size
        of the grid container (respecting min-width|height properties)
        to calculate the free space.

        Test: imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-stretch-respects-min-size-001.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::IndefiniteSizeStrategy::freeSpaceForStretchAutoTracksStep const):
        (WebCore::DefiniteSizeStrategy::freeSpaceForStretchAutoTracksStep const):
        (WebCore::GridTrackSizingAlgorithm::stretchAutoTracks):
        * rendering/GridTrackSizingAlgorithm.h:

2017-12-10  Minsheng Liu  <lambda@liu.ms>

        Incorrect bounds inside <mover>/<munder> when a stretchy operator is present
        https://bugs.webkit.org/show_bug.cgi?id=179682

        Reviewed by Frédéric Wang.

        Currently a stretchy operator inside <mover>/<munder>/<munderover> is stretched
        during paint() rather than layout(), which leads to both end user confusion
        and many unexpected behaviors. This patch rewrites
        RenderMathMLUnderOver::stretchHorizontalOperatorsAndLayoutChildren()
        to both eliminate the issue and make operator stretching more standard
        conforming.

        A test is added to check the stretch width of stretchy operators in various
        scenarios:
        mathml/opentype/munderover-stretch-width.html

        A previous test is updated:
        mathml/opentype/opentype-stretchy-horizontal.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::stretchTo):
        (WebCore::RenderMathMLOperator::resetStretchSize):
        (WebCore::RenderMathMLOperator::paint):
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore::RenderMathMLOperator::setStretchWidthLocked):
        (WebCore::RenderMathMLOperator::isStretchWidthLocked const):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::toHorizontalStretchyOperator):
        (WebCore::fixLayoutAfterStretch):
        (WebCore::RenderMathMLUnderOver::stretchHorizontalOperatorsAndLayoutChildren):

2017-12-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, follow-up patch after r225470
        https://bugs.webkit.org/show_bug.cgi?id=180308

        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):
        Use consistent operands.

        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        Use class field initializer.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):
        Use consistent operands.

2017-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Crash in Document::updateLayout() via Document::processViewport
        https://bugs.webkit.org/show_bug.cgi?id=180619
        <rdar://problem/35717575>

        Reviewed by Zalan Bujtas.

        The crash is caused by modern media controls updating the layout in the middle of insertedIntoAncestor
        via HTMLMediaElement::setControllerJSProperty inside Document::pageScaleFactorChangedAndStable.

        Fixed the crash by delaying the work to update the viewport configuration until didFinishInsertingNode
        since updating the viewport configuration results in a lot of related code running in response,
        and making sure all that code never tries to execute an author script is not attainable in the short term,
        and a maintenance nightmare in the long term.

        Test: media/ios/viewport-change-with-video.html

        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::insertedIntoAncestor):
        (WebCore::HTMLMetaElement::didFinishInsertingNode): Added.
        * html/HTMLMetaElement.h:

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

        Document::updateLayout() could destroy current frame.
        https://bugs.webkit.org/show_bug.cgi?id=180525
        <rdar://problem/35906836>

        Reviewed by Simon Fraser.

        Early return when Document::updateLayout() triggers Frame destruction.

        Test: fast/frames/crash-when-iframe-is-remove-in-eventhandler.html

        * dom/TreeScope.cpp:
        (WebCore::absolutePointIfNotClipped):

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

        ServiceWorkerGlobalScope is a global object and should be marked as [ImplicitThis] in the IDL
        https://bugs.webkit.org/show_bug.cgi?id=180615

        Reviewed by Brady Eidson.

        ServiceWorkerGlobalScope is a global object and should be marked as [ImplicitThis] in the IDL, similarly to what we do for Window.
        This allows a getter to be fallback to the global object as ThisValue when the cast of the ThisValue to the expected type fails.

        No new tests, rebaselined existing test.

        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/service/ServiceWorkerGlobalScope.idl:

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

        Delay some service worker operations until after the database import completes.
        https://bugs.webkit.org/show_bug.cgi?id=180573

        Reviewed by Chris Dumez.

        No new tests (Not testable yet).

        Right after the storage process launches it starts importing registration records.
        During this time, a lot of the decisions we make regarding registrations, fetch, etc.
        are invalid, as they rely on those in-memory records being in place.
        
        This patch delays certain things until after the initial origin table import is complete.
        
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::databaseOpenedAndRecordsImported):

        * workers/service/server/SWOriginStore.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registrationStoreImportComplete): Tell the origin store the initial
          import was completed.
        (WebCore::SWServer::addRegistrationFromStore):
        * workers/service/server/SWServer.h:

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

        Service Worker should use a correct user agent
        https://bugs.webkit.org/show_bug.cgi?id=180566
        <rdar://problem/35926295>

        Reviewed by Chris Dumez.

        Test: http/wpt/service-workers/useragent.https.html

        Make ServiceWorkerFrameLoaderClient return a valid UserAgent.
        Pass user agent to ServiceWorkerThread so that navigation.userAgent is correctly initialized.
        Allow ServiceWorkerFrameLoaderClient to clean itself when no longer needed.

        * loader/EmptyFrameLoaderClient.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::frameLoaderClient):
        * workers/service/context/ServiceWorkerThreadProxy.h:

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

        Wrong caret position for input field inside a fixed position parent on iOS 11
        https://bugs.webkit.org/show_bug.cgi?id=176896
        rdar://problem/33726145

        Reviewed by Tim Horton.

        In r219668 I added code to compute a layout viewport rect in the web process, so that
        after programmatic scrolling, getBoundingClientRect() would return the correct values.
        However, that computation sometimes used a different visual viewport than the UI process,
        resulting in a different layout viewport being set. This would happen when the keyboard
        was visible, and the combination of this and zooming when focusing an input would result
        in a state where the scrolling tree contained notes computed with the bad layout viewport.
        This could cause apparently offset fixed elements, and bad caret positioning if those fixed
        elements contained the focused input.

        Fix by passing to the web process the same visual viewport rect that the UI process is using,
        namely "unobscuredContentRectRespectingInputViewBounds". This was already being set in
        VisibleContentRectUpdateInfo but wasn't encoded/decoded, so fix that. Set it as an optional<>
        on FrameView when different from the normal visual viewport, and return it from
        visualViewportRect().

        Some other minor logging changes.

        Test: fast/visual-viewport/ios/caret-after-focus-in-fixed.html

        * page/FrameView.cpp:
        (WebCore::FrameView::setVisualViewportOverrideRect):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::visualViewportRect const):
        * page/FrameView.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):

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

        Make inline box objects IsoHeap allocated.
        https://bugs.webkit.org/show_bug.cgi?id=180556
        <rdar://problem/35923629>

        Reviewed by Filip Pizlo.

        * rendering/EllipsisBox.cpp:
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        * rendering/InlineElementBox.cpp:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGRootInlineBox.h:

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

        Clearing all Website Data should remove service worker registrations on disk
        https://bugs.webkit.org/show_bug.cgi?id=180558

        Reviewed by Youenn Fablet.

        Clear service worker registrations on disk in addition to the ones in memory.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::v1RecordsTableSchema):
        (WebCore::v1RecordsTableSchemaAlternate):
        (WebCore::databaseFilename):
        Make sure these always get called from the background thread since they use
        a static string.

        (WebCore::RegistrationDatabase::RegistrationDatabase):
        Call importRecordsIfNecessary() instead of openSQLiteDatabase(). importRecordsIfNecessary()
        only calls openSQLiteDatabase() if the database file exists, to avoid creating a database
        file unnecessarily.

        (WebCore::RegistrationDatabase::databasePath const):
        New method which returns the database file path.

        (WebCore::RegistrationDatabase::openSQLiteDatabase):

        (WebCore::RegistrationDatabase::importRecordsIfNecessary):
        New methods which imports records if the database file exist. It the database file does
        not exist, it does not create it.

        (WebCore::RegistrationDatabase::pushChanges):
        Call completion handler when changes are pushed.

        (WebCore::RegistrationDatabase::clearAll):
        Close the database if it is open, then remove the database files.

        (WebCore::RegistrationDatabase::doPushChanges):
        If the database is not already open, we now open it when trying to write changes for
        the first time.

        * workers/service/server/RegistrationDatabase.h:
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::clearAll):
        (WebCore::RegistrationStore::flushChanges):
        * workers/service/server/RegistrationStore.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::clear):
        Also clear the database.

        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::terminate):
        Only call SWServer::terminateWorker() if the worker is running. Otherwise, we hit
        an assertion when clearing a registration would worker was already terminated.

2017-12-08  Joseph Pecoraro  <pecoraro@apple.com>

        ServiceWorker Inspector: Various issues inspecting service worker on mobile.twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=180520
        <rdar://problem/35900764>

        Reviewed by Brian Burg.

        * inspector/agents/worker/ServiceWorkerAgent.cpp:
        (WebCore::ServiceWorkerAgent::getInitializationInfo):
        * inspector/agents/worker/ServiceWorkerAgent.h:
        Add initial script content to initialization so we always at least have main resource content.

2017-12-08  Joseph Pecoraro  <pecoraro@apple.com>

        ServiceWorker Inspector: Should be able to see image content from CacheStorage.add(url) network request
        https://bugs.webkit.org/show_bug.cgi?id=180506

        Reviewed by Brian Burg.

        No test as this only happens inside a ServiceWorker inspector which
        we don't yet have a way to test. In a Page Inspector, the
        CacheStorage.add network request already behaves as expected.

        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::responseReceived):
        (WebCore::shouldBufferResourceData):
        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::forceBufferData const):
        (WebCore::NetworkResourcesData::ResourceData::setForceBufferData):
        Provide a way to force buffering in NetworkResourceData.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/page/PageNetworkAgent.h:
        * inspector/agents/worker/WorkerNetworkAgent.h:
        Enable force buffering in a Worker Network Agent.

2017-12-08  Daniel Bates  <dabates@apple.com>

        Remove unnecessary prefix from AutoFillButtonType enumerators
        https://bugs.webkit.org/show_bug.cgi?id=180512

        Reviewed by Tim Horton.

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

2017-12-08  Dean Jackson  <dino@apple.com>

        Implement transferToImageBitmap for WebGL offscreen canvas objects
        https://bugs.webkit.org/show_bug.cgi?id=180603
        <rdar://problem/34147143>

        Reviewed by Sam Weinig.

        Implement the basic version of creating an ImageBitmap from an
        OffscreenCanvas that is using a WebGL context.

        Tests: http/wpt/offscreen-canvas/transferToImageBitmap-empty.html
               http/wpt/offscreen-canvas/transferToImageBitmap-webgl.html

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::create): Add a new constructor to be used by OffscreenCanvas.
        Creates a blank ImageBitmap.
        * html/ImageBitmap.h:

        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::transferToImageBitmap): Create a new ImageBitmap
        and paint the current canvas into it.

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

        WebServiceWorkerProvider should use Cancellation error to notify DTL that it cannot handle a fetch
        https://bugs.webkit.org/show_bug.cgi?id=180584

        Reviewed by Alex Christensen.

        Previously, for each cross origin fetch that is going through a service worker and service worker is not handling the fetch,
        we return an AccessControl error so that DocumentThreadableLoader will do preflight and regular load through the network.
        This error is wrongly logged in the Inspector.
        Change error type to Cancellation so that the Inspector does not log it.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFail):

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

        Service Worker should use a correct SessionID
        https://bugs.webkit.org/show_bug.cgi?id=180585

        Reviewed by Alex Christensen.

        Test: http/tests/workers/service/serviceworker-private-browsing.https.html

        Store SessionID in SWServer and send it as part of service worker instantiation.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorker):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.h:

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

        FetchResponse should keep unfiltered ResourceResponse so that it can be used in Service Worker
        https://bugs.webkit.org/show_bug.cgi?id=179641
        <rdar://problem/35923570>

        Reviewed by Alex Christensen.

        Covered by existing rebased tests.

        FetchResponse will now store an unfiltered response.
        If it needs to expose it to JavaScript, it will create a filtered response lazily.
        This allows service worker to send back to web pages, opaque responses containing every information.

        Updating Document::initSecurityContext so that any document loaded with a response whose tainting is Opaque gets a unique origin.
        This ensures cross-origin checks to work if service worker returns such a response on a same origin URL.

        Updated SubresourceLoader to check cross origin service worker responses based on their tainting.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):
        (WebCore::FetchResponse::error):
        (WebCore::FetchResponse::redirect):
        (WebCore::FetchResponse::FetchResponse):
        (WebCore::FetchResponse::clone):
        (WebCore::FetchResponse::url const):
        (WebCore::FetchResponse::filteredResponse const):
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse):
        (WebCore::FetchResponse::resourceResponse const):
        * Modules/fetch/FetchResponse.h:
        (WebCore::FetchResponse::create): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::checkResponseCrossOriginAccessControl):

2017-12-08  David Quesada  <david_quesada@apple.com>

        ApplicationManifestParser should strip whitespace from the raw input
        https://bugs.webkit.org/show_bug.cgi?id=180539
        rdar://problem/35915075

        Reviewed by Joseph Pecoraro.

        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parseManifest):

2017-12-08  Eric Carlson  <eric.carlson@apple.com>

        Move Logger from PAL to WTF so it can be used outside of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=180561

        Reviewed by Alex Christensen.

        No new tests, existing API test updated.

        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (PAL::LogArgument<webrtc::RTCStats>::toString): Deleted.
        * dom/Document.cpp:
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (PAL::LogArgument<WebCore::URL>::toString): Deleted.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElementEnums.h:
        (PAL::LogArgument<WebCore::HTMLMediaElementEnums::ReadyState>::toString): Deleted.
        (PAL::LogArgument<WebCore::HTMLMediaElementEnums::NetworkState>::toString): Deleted.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::logger const):
        * html/MediaElementSession.h:
        * html/track/DataCue.h:
        (PAL::LogArgument<WebCore::DataCue>::toString): Deleted.
        * html/track/TextTrackCue.h:
        (PAL::LogArgument<WebCore::TextTrackCue>::toString): Deleted.
        * html/track/TextTrackCueGeneric.h:
        (PAL::LogArgument<WebCore::TextTrackCueGeneric>::toString): Deleted.
        * html/track/TrackBase.cpp:
        (WebCore::nullLogger):
        (WebCore::TrackBase::TrackBase):
        * html/track/TrackBase.h:
        * html/track/VTTCue.h:
        (PAL::LogArgument<WebCore::VTTCue>::toString): Deleted.
        * platform/graphics/InbandTextTrackPrivate.h:
        * platform/graphics/InbandTextTrackPrivateClient.h:
        (PAL::LogArgument<WebCore::GenericCueData>::toString): Deleted.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::nullLogger):
        (WebCore::MediaPlayer::mediaPlayerLogger):
        * platform/graphics/MediaPlayer.h:
        (WTF::LogArgument<MediaTime>::toString):
        (PAL::LogArgument<WTF::MediaTime>::toString): Deleted.
        * platform/graphics/MediaPlayerEnums.h:
        (PAL::LogArgument<WebCore::MediaPlayerEnums::ReadyState>::toString): Deleted.
        (PAL::LogArgument<WebCore::MediaPlayerEnums::NetworkState>::toString): Deleted.
        * platform/graphics/TrackPrivateBase.cpp:
        (WebCore::TrackPrivateBase::setLogger):
        * platform/graphics/TrackPrivateBase.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/mediastream/RTCIceConnectionState.h:
        (PAL::LogArgument<WebCore::RTCIceConnectionState>::toString): Deleted.
        * platform/mediastream/RTCIceGatheringState.h:
        (PAL::LogArgument<WebCore::RTCIceGatheringState>::toString): Deleted.
        * platform/mediastream/RTCPeerConnectionState.h:
        (PAL::LogArgument<WebCore::RTCPeerConnectionState>::toString): Deleted.
        * platform/mediastream/RTCSignalingState.h:
        (PAL::LogArgument<WebCore::RTCSignalingState>::toString): Deleted.
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:

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

        Remove pthread_once in favor of dispatch_once
        https://bugs.webkit.org/show_bug.cgi?id=180591

        Reviewed by Saam Barati.

        No behavior change.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::allCharactersInIDNScriptWhiteList):
        (WebCore::readIDNScriptWhiteList): Deleted.

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

        Improve error handling in RegistrationDatabase
        https://bugs.webkit.org/show_bug.cgi?id=180587

        Reviewed by Brady Eidson.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::doPushChanges):

2017-12-07  Darin Adler  <darin@apple.com>

        Simplify and streamline some Color-related code to prepare for some Color/ExtendedColor work
        https://bugs.webkit.org/show_bug.cgi?id=180569

        Reviewed by Sam Weinig.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::colorValue const): Use valueAsColor instead of
        having custom code here to parse the color string.

        * css/CSSGradientValue.cpp:
        (WebCore::interpolate): Deleted.
        (WebCore::CSSGradientValue::computeStops): Call blend instead of interpolate. The only
        difference is that the interpolate function truncated when converting from floating point
        to integer, and the blend function rounds instead.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::colorFromPrimitiveValue const): Removed unneeded special case
        for identifier of 0, since StyleColor::colorFromKeyword already handles that correctly.
        Also got rid of unneded local variable "state".

        * html/ColorInputType.cpp:
        (WebCore::isValidSimpleColor): Rewrote to take a StringView instead of a String and
        to stay with a single loop since this does not need the extra efficiency of a separate
        8-bit and 16-bit character version. Renamed to more closely match what the specification
        calls this algorithm.
        (WebCore::parseSimpleColorValue): Added. To be used instead of relying on the behavior of
        the Color constructor that takes a String, so we can remove that later.
        (WebCore::ColorInputType::sanitizeValue const): Updated for name change.
        (WebCore::ColorInputType::valueAsColor const): Use parseSimpleColorValue instead of the
        Color constructor that takes a string.
        (WebCore::ColorInputType::typeMismatchFor const): Updated for name change.
        (WebCore::ColorInputType::selectColor): Updated to take a StringView instead of a Color.
        Note that this function is used for testing only.

        * html/ColorInputType.h: Marked everything final instead of override. Updated the
        selectColor function to take a StringView instead of a Color.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selectColor): Take a StringView instead of a Color.
        * html/HTMLInputElement.h: Ditto.

        * html/InputType.cpp:
        (WebCore::InputType::selectColor): Take a StringView instead of a Color.
        * html/InputType.h: Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::selectColorInColorChooser): Pass the string directly instead of
        constructing a Color with it.
        (WebCore::Internals::setViewBaseBackgroundColor): Instead of pasring the passed in string
        with the Color constructor, implemented the two names that are actually used with this
        function in tests: "transparent" and "white".

2017-12-08  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, fix wrong letter case in #import HTMLIframeElement.h

        * editing/cocoa/WebContentReaderCocoa.mm:

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

        Use WTF::RecursiveLockAdapter instead of using pthread_mutex_t with recursive lock option
        https://bugs.webkit.org/show_bug.cgi?id=180449

        Reviewed by Mark Lam.

        Use WTF::RecursiveLockAdapter<StaticLock> instead. We can remove pthread_mutex_xxx,
        pthread_once and FontLocker wrapper.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::fontForPlatformData):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::inactiveFontCount):
        (initFontCacheLockOnce): Deleted.
        (FontLocker::FontLocker): Deleted.
        (FontLocker::~FontLocker): Deleted.

2017-12-07  Eric Carlson  <eric.carlson@apple.com>

        Simplify log channel configuration UI
        https://bugs.webkit.org/show_bug.cgi?id=180527
        <rdar://problem/35908382>

        Reviewed by Joseph Pecoraro.

        No new tests, updated existing test.

        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels):
        (WebCore::channelConfigurationForString):

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

        Use StaticLock instead of NeverDestroyed<Lock>
        https://bugs.webkit.org/show_bug.cgi?id=180507

        Reviewed by Saam Barati.

        StaticLock can be used instead of using NeverDestroyed<Lock>.

        No behavior change.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::scheduleForNotification):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):
        (WebCore::notificationMutex): Deleted.
        * Modules/webdatabase/DatabaseTracker.h:
        * platform/URL.cpp:
        (WebCore::registerDefaultPortForProtocolForTesting):
        (WebCore::clearDefaultPortForProtocolMapForTesting):
        (WebCore::defaultPortForProtocol):
        (WebCore::defaultPortForProtocolMapForTestingLock): Deleted.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::resetMediaEngines):
        (WebCore::mediaEngineVectorLock): Deleted.
        * platform/ios/QuickLook.mm:
        (WebCore::removeQLPreviewConverterForURL):
        (WebCore::addQLPreviewConverterWithFileForURL):
        (WebCore::qlPreviewConverterDictionaryMutex): Deleted.
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        (+[WebDatabaseTransactionBackgroundTaskController startBackgroundTask]):
        (+[WebDatabaseTransactionBackgroundTaskController endBackgroundTask]):
        (transactionBackgroundTaskIdentifierLock): Deleted.
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlShareHandle::lockCallback):
        (WebCore::CurlShareHandle::unlockCallback):
        (WebCore::CurlShareHandle::mutexFor):
        * platform/network/curl/CurlContext.h:

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

        Read registrations in from disk.
        https://bugs.webkit.org/show_bug.cgi?id=180543

        Reviewed by Andy Estes.

        No new tests (Not testable quite yet)

        On launch, read through the database.

        Set up enough objects in the SWServer necessary to cause fetches and postMessages to
        go to a worker that has never run before.

        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::toDatabaseKey const):
        (WebCore::ServiceWorkerRegistrationKey::fromDatabaseKey):
        * workers/service/ServiceWorkerRegistrationKey.h:

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::stringToUpdateViaCache):
        (WebCore::stringToWorkerType):
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        (WebCore::RegistrationDatabase::addRegistrationToStore):
        * workers/service/server/RegistrationDatabase.h:

        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::RegistrationStore):
        (WebCore::RegistrationStore::addRegistrationFromDatabase):
        * workers/service/server/RegistrationStore.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::tryInstallContextData):
        (WebCore::SWServer::installContextData):
        (WebCore::generateServiceWorkerIdentifier): Deleted.
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerRegistration.h:

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextData const):

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

        Use WTF Locking primitives in WebThread and drop pthread_xxx use
        https://bugs.webkit.org/show_bug.cgi?id=180445

        Reviewed by Saam Barati.

        We remove use of pthread locking primitives from WebThread implementation,
        and use WTF Lock and Condition instead.

        No behavior change.

        * platform/ios/wak/WebCoreThread.mm:
        (HandleDelegateSource):
        (SendDelegateMessage):
        (WebThreadRunOnMainThread):
        (WebThreadAdoptAndRelease):
        (WebCoreObjCDeallocOnWebThreadImpl):
        (WebCoreObjCDeallocWithWebThreadLockImpl):
        (HandleWebThreadReleaseSource):
        (_WebThreadAutoLock):
        (WebRunLoopLockInternal):
        (CurrentThreadContext):
        Use WTF::ThreadSpecific.

        (StartWebThread):
        (_WebThreadLock):
        Remove `shouldTry` parameter since it is always `false`. We clean up code based on `shouldTry = false`,
        and rename it from _WebTryThreadLock to _WebThreadLock since it does not try now.

        (_WebThreadLockFromAnyThread):
        (WebThreadUnlockFromAnyThread):
        (_WebThreadUnlock):
        (lockWebCoreReleaseLock): Deleted.
        (unlockWebCoreReleaseLock): Deleted.
        (WebTimedConditionLock): Deleted.
        (_WebTryThreadLock): Deleted.

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

        Fix API test after r225645.
        https://bugs.webkit.org/show_bug.cgi?id=180544

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        The API test WebKitLegacy.FragmentNavigation started failing after r225645.
        It does call the completion handler with ignore to cancel fragment navigation.
        To make this work and increase compatibility, only synchronously continue with
        fragment navigations if we haven't received a synchronous answer to the
        decidePolicyForNavigationAction callback.

2017-12-07  Oleksandr Skachkov  <gskachkov@gmail.com>

        WebAssembly: sending module to iframe fails
        https://bugs.webkit.org/show_bug.cgi?id=179263

        Reviewed by JF Bastien.

        Allow use WebAssembly.Module as input parameters for postMessage 
        in window and iframe object.

        Tests: wasm/iframe-postmessage.html
               wasm/window-postmessage.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        * bindings/js/SerializedScriptValue.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

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

        Web Inspector: Fix style in remote inspector classes
        https://bugs.webkit.org/show_bug.cgi?id=180545

        Reviewed by Youenn Fablet.

        * page/PageDebuggable.h:
        * workers/service/context/ServiceWorkerDebuggable.h:

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

        Move security origin filtering for getMatchedCSSRules out of StyleResolver
        https://bugs.webkit.org/show_bug.cgi?id=180468

        Reviewed by Zalan Bujtas.

        The non-standard getMatchedCSSRules API should not return rules from stylesheets in different security origins.
        To implement this we currently have lots of invasive code in StyleResolver, RuleSets and ElementRuleCollector
        basically passing around a bit. This also makes RuleSets document specific blocking optimizations.

        This patches replaces the mechanism with a bit in StyleRule which is much simpler.

        * css/DocumentRuleSets.cpp:
        (WebCore::makeRuleSet):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::setPseudoStyleRequest):
        (WebCore::ElementRuleCollector::setSameOriginOnly): Deleted.
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::collectFeatures):
        * css/RuleFeature.h:
        (WebCore::RuleFeature::RuleFeature):
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        (WebCore::RuleSet::addStyleRule):
        * css/RuleSet.h:
        (WebCore::RuleData::linkMatchType const):
        (WebCore::RuleData::hasDocumentSecurityOrigin const): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::createForSplitting):
        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount const):
        (WebCore::StyleRule::create): Deleted.
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::StyleRuleBase):
        (WebCore::StyleRuleBase::hasDocumentSecurityOrigin const):

            Add a bit.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):

            Include hasDocumentSecurityOrigin bit to parser context. This means that a stylesheet data structures
            can't be shared between a contexts where this differs. This likely very rare in practice.

        (WebCore::operator==):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeStyleRule):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeStyleFromRules):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules const):

            Filter out rules from different security origin after getting them from style resolver.

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

        AX: Document::existingAXObjectCache() should always return the existing AXObjectCache.
        https://bugs.webkit.org/show_bug.cgi?id=180548
        <rdar://problem/35917755>

        Reviewed by Chris Fleizach.

        Currently the AX cache becomes unreachable through Document::existingAXObjectCache soon after the render tree is destroyed.
        From this point, the Node objects can't deregister themselves from the AX cache anymore. In some cases, it's
        redundant/not advised to notify the cache about certain changes when the document is being destroyed, but the
        callsites should make that decision.

        Covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::existingAXObjectCacheSlow const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::takeChildInternal):

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

        Fix erroneous ASSERT in DocumentThreadableLoader::didFail
        https://bugs.webkit.org/show_bug.cgi?id=180549

        Reviewed by Alex Christensen.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFail): ASSERT was checking whether the optional was null.
        This could never be the case since we move the value of the optional, not the optional itself.
        Ensure that the optional value is null so that we are sure request is being loaded and make the optional null just after that.

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

        iOS: Many AMP pages crash inside Document::updateStyleIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=180550
        <rdar://problem/35410390>

        Reviewed by Zalan Bujtas.

        The crash was caused when updatign the layout of an non-flattened frame inside a flattened frame.
        In those cases, isInChildFrameWithFrameFlattening is false on the inner frame.

        No new tests for now.

        * dom/NoEventDispatchAssertion.h:
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::performLayoutWithFlattening): Disable the assertion temporarily here.
        In theory, we should be able to remove the check for isInChildFrameWithFrameFlattening but we err
        on the safer side for now.

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

        Always synchronously continue with fragment navigations
        https://bugs.webkit.org/show_bug.cgi?id=180544
        <rdar://problem/34815986> and <rdar://problem/35126690>

        Reviewed by Geoffrey Garen.

        Test: http/tests/dom/document-fragment.html

        When a decidePolicyForNavigationAction completionHandler is called asynchronously,
        the document's URL has not changed yet when JavaScript execution continues.  This causes
        significant web incompatibility because all browsers change the document's URL immediately
        during fragment navigations.  In order to make WebKit applications more web compatible,
        we now immediately continue to have the state consistent.  To keep compatibility with any
        WebView, UIWebView, or WKWebView applications that use these delegate callbacks to update
        state, we still call decidePolicyForNavigationAction.  This would break a theoretical app
        that would cancel fragment navigations, but it fixes apps that continue fragment navigations
        asynchronously.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):

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

        Activate IDB and WebSockets in service workers
        https://bugs.webkit.org/show_bug.cgi?id=180534

        Reviewed by Brady Eidson.

        Tests: http/tests/workers/service/serviceworker-idb.https.html
               http/tests/workers/service/serviceworker-websocket.https.html

        Using the dummy document used for loading to also fuel IDB and WebSocket.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::idbConnectionProxy):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):

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

        Unreviewed, rolling out r225634.

        This caused layout tests to time out.

        Reverted changeset:

        "Simplify log channel configuration UI"
        https://bugs.webkit.org/show_bug.cgi?id=180527
        https://trac.webkit.org/changeset/225634

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

        [EME] Support the 'encrypted' event for FPS encrypted streams
        https://bugs.webkit.org/show_bug.cgi?id=180480

        Reviewed by Eric Carlson.

        Test: platform/mac/media/encrypted-media/fps-encrypted-event.html

        Pass initData and initDataType up to HTMLMediaElement from SourceBufferPrivateAVFObjC.

        Drive-by fix: initialize the initData and initDataType values of MediaEncryptedEvent from
        values in its initializer struct.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered):
        * html/MediaEncryptedEvent.cpp:
        (WebCore::MediaEncryptedEvent::MediaEncryptedEvent):
        (WebCore::MediaEncryptedEvent::initDataType): Deleted.
        (WebCore::MediaEncryptedEvent::initData): Deleted.
        * html/MediaEncryptedEvent.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cdmInstanceAttached):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):

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

        [Cocoa] Add SPI to disallow user-installed fonts
        https://bugs.webkit.org/show_bug.cgi?id=180062
        <rdar://problem/35042408>

        Reviewed by Simon Fraser.

        This hooks up a WK2 preference, ShouldDisallowUserInstalledFonts, to our font selection
        code. This preference works by specifying an attribute to our font selection code which
        will prohibit user-installed fonts from ever being selected. This works both to disallow
        newly installed fonts, as well as disallowing user-installed fonts which "shadow" (or
        have the same name as) existing fonts, so that the existing font is selected instead.

        The goal of this setting is to decrease the fingerprinting surface area which trackers
        can use to identify users on the open Web.

        Tests: fast/text/user-installed-font.html
               fast/text/user-installed-fonts/disable.html
               fast/text/user-installed-fonts/shadow-disable.html
               fast/text/user-installed-fonts/shadow-family-disable.html
               fast/text/user-installed-fonts/shadow-family.html
               fast/text/user-installed-fonts/shadow-postscript-disable.html
               fast/text/user-installed-fonts/shadow-postscript-family-disable.html
               fast/text/user-installed-fonts/shadow-postscript-family.html
               fast/text/user-installed-fonts/shadow-postscript.html
               fast/text/user-installed-fonts/shadow.html

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initializeFontStyle):
        * page/Settings.yaml:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::mayRepresentUserInstalledFont const):
        (WebCore::FontDescription::setMayRepresentUserInstalledFont):
        (WebCore::FontDescription::operator== const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::singleton):
        (WebCore::FontDatabase::singletonAllowingUserInstalledFonts):
        (WebCore::FontDatabase::singletonDisallowingUserInstalledFonts):
        (WebCore::FontDatabase::collectionForFamily):
        (WebCore::FontDatabase::fontForPostScriptName):
        (WebCore::FontDatabase::FontDatabase):
        (WebCore::FontCache::getFontSelectionCapabilitiesInFamily):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::invalidateFontCache):
        (WebCore::fontWithFamily):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldDisallowUserInstalledFonts):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-12-07  David Quesada  <david_quesada@apple.com>

        [Web App Manifest] Support display-mode media feature
        https://bugs.webkit.org/show_bug.cgi?id=180376
        rdar://problem/35837993

        Reviewed by Geoffrey Garen.

        Tests: applicationmanifest/display-mode-subframe.html
               applicationmanifest/display-mode.html

        * Modules/applicationmanifest/ApplicationManifest.h:
        (WebCore::ApplicationManifest::encode const):
        (WebCore::ApplicationManifest::decode):
        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parseManifest):
        (WebCore::ApplicationManifestParser::parseDisplay):
        * Modules/applicationmanifest/ApplicationManifestParser.h:
            Add a 'display' property to ApplicationManifest and have ApplicationManifestParser
            populate it by parsing the 'display' property from the raw manifest.

        * css/CSSValueKeywords.in:
        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::displayModeEvaluate):
            To evaluate whether a display-mode query matches, compare the parameter to the
            display mode of the manifest applied to the main frame. If there is no manifest,
            use the fallback display mode 'browser' - the spec mandates that display-mode
            must be exposed even if there is no applied manifest.
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent):
        (WebCore::isFeatureValidWithoutValue):

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

        Creating a second AVPlayerItemVideoOutput causes flakey failures
        https://bugs.webkit.org/show_bug.cgi?id=177119
        <rdar://problem/34507977>

        Reviewed by Dean Jackson.

        Rather than having two concurrent AVPlayerItemVideoOutputs when painting to OpenGL,
        use only one, but with the OpenGL compatibility flags enabled, for both 3D and 2D
        canvas painting.

        Of course, once this is fixed, the test breaks again because VideoTextureCopierCV is
        stomping on top of some WebGL state set by the test. Rather than expand the
        VideoTextureCopierCV's GraphicsStateSaver, use a totally separate (but shared) GL context to
        implement the texture copy, so that its own state will not affect the state of the WebGL
        context.

        This necessitates adding a new createShared() factory for GraphicsContext3D. Since this is only
        used on Cocoa platforms (for now), make it platform specific, and modify the other implementations
        only so far as to throw assertions if somehow a shared context pointer is passed into their
        constructors.

        Drive-by fixes: 

        - These changes exposed some test failures, which were off-by-1-or-2 errors in the color
        output of videos painted into WebGL contexts. The Y' parameter needs to be scaled by 16/255
        for video-range conversions and the CbCr vales by 128/255 (rather than just 0.5). Make the
        color transforms a full 4x4 matrix and do the scaling in the matrix rather than tracked by a
        separate uniform.

        - There was a slight error in WebCoreDecompressionSession that could cause seeks to never
        complete because incoming frames would be skipped if their startTime was in the past
        (rather than their startTime + duration being in the past).

        - The matrix name comparison should use CFEqual rather than pointer equality to test.

        - iOS currently has a bug where the red and green color channels will be reversed when
        uploading BGRA pixel formatted data to a texture; work around this bug for now.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoOutputHasAvailableFrame):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::createShared):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::VideoTextureCopierCV):
        (WebCore::VideoTextureCopierCV::~VideoTextureCopierCV):
        (WebCore::transferFunctionFromString):
        (WebCore::YCbCrToRGBMatrixForRangeAndTransferFunction):
        (WebCore::VideoTextureCopierCV::initializeUVContextObjects):
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture):
        * platform/graphics/cv/VideoTextureCopierCV.h:
        (WebCore::VideoTextureCopierCV::context):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

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

        [EME] Support generateRequest() in CDMFairPlayStreaming
        https://bugs.webkit.org/show_bug.cgi?id=179752

        Reviewed by Eric Carlson.

        Tests: platform/mac/media/encrypted-media/fps-createSession.html
               platform/mac/media/encrypted-media/fps-generateRequest.html

        Add support for generating license requests from initialization data in
        CDMFairPlayStreaming. To do so, add explicit checks for FairPlay Steraming requirements:
        reqests will fail if no server certificate exists, and will fail if no content key id exists
        in the initialization data.

        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::extractKeyIDsSinf):
        (WebCore::CDMPrivateFairPlayStreaming::sanitizeSinf):
        (WebCore::CDMFactory::platformRegisterFactories):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::requestLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequest):

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

        [EME] Possible deadlock when aborting a SourceBufferPrivateAVFObjC append operation
        https://bugs.webkit.org/show_bug.cgi?id=180486

        Reviewed by Eric Carlson.

        It's possible that an abort() operation which is blocked on the ongoing appendBuffer()
        operation completing will deadlock forever, with either the willProvideContentKeyRequest
        or didProvideContentKeyRequest callbacks blocking waiting to be run on the main thread
        (which is itself blocked waiting for the append operation to complete).

        To break this deadlock, add a new abortSemaphore which is signaled in the abort() method
        and have the willProvide... and didProvide... methods block both on their own semaphores
        as well as the abortSemaphore, allowing them to break out even if their main thread calls
        never get a chance to execute.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParserWillProvideContentKeyRequestInitializationData:forTrackID:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::abort):

2017-12-07  Eric Carlson  <eric.carlson@apple.com>

        Simplify log channel configuration UI
        https://bugs.webkit.org/show_bug.cgi?id=180527
        <rdar://problem/35908382>

        Reviewed by Joseph Pecoraro.

        No new tests -- no change in functionality.

        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels):
        (WebCore::channelConfigurationForString):

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

        ServiceWorker Inspector: Use the SW's scope url for the remote inspection target metadata
        https://bugs.webkit.org/show_bug.cgi?id=180519

        Reviewed by Youenn Fablet.

        * workers/service/context/ServiceWorkerDebuggable.cpp:
        (WebCore::ServiceWorkerDebuggable::ServiceWorkerDebuggable):
        * workers/service/context/ServiceWorkerDebuggable.h:
        Switch to the scope URL for the remote inspector target info.

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

        Unreviewed Windows build fix.

        * PlatformWin.cmake:

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

        [WPE][GTK] Freeze WebKit version in user agent
        https://bugs.webkit.org/show_bug.cgi?id=180475

        Reviewed by Carlos Garcia Campos.

        Apple has frozen the WebKit version in its user agent, so we should too, at the same point.

        * platform/glib/UserAgentGLib.cpp:
        (WebCore::versionForUAString):

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

        [WPE][GTK] Update user agent quirk version strings
        https://bugs.webkit.org/show_bug.cgi?id=180474

        Reviewed by Carlos Garcia Campos.

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

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

        We should be able to recover after a Service Worker process crash
        https://bugs.webkit.org/show_bug.cgi?id=180477

        Reviewed by Brady Eidson and Youenn Fablet.

        Test: http/tests/workers/service/postmessage-after-sw-process-crash.https.html

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::serverToContextConnectionCreated):
        Once the connection with the context process is established, process "run service worker"
        requests that ocurred while establishing the connection.

        (WebCore::SWServer::runServiceWorkerIfNecessary):
        Take in a lambda function that gets called after the "run service worker" request
        is processed. We used to assert that we had a connection to the context process.
        We now wait for the connection to be established to process the request, thus
        making the operation asynchronous.

        (WebCore::SWServer::runServiceWorker):
        Split some logic out of runServiceWorkerIfNecessary() to reuse in serverToContextConnectionCreated().

        (WebCore::SWServer::markAllWorkersAsTerminated):
        Add method to mark all service workers as terminated. This is called when the Service
        Worker process crashes.

        * workers/service/server/SWServer.h:

2017-12-06  Saam Barati  <sbarati@apple.com>

        Unreviewed. Fix iOS (and maybe other platform) build

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):

2017-12-02  Darin Adler  <darin@apple.com>

        Modernize some aspects of text codecs, eliminate WebKit use of strcasecmp
        https://bugs.webkit.org/show_bug.cgi?id=180009

        Reviewed by Alex Christensen.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeAsStream): Update to use size since the result of
        encode is now Vector rather than CString. And for the new UnencodableHandling.
        (WebCore::FetchBody::consumeText): Removed now-unneeded type cast. Ditto.
        (WebCore::FetchBody::bodyAsFormData const): Ditto.
        (WebCore::FetchBody::take): Pass result of encode directly to SharedBuffer::create.

        * Modules/websockets/WebSocketDeflater.cpp: Removed include of StringExtras.h.
        * bridge/IdentifierRep.h: Ditto.
        * bridge/c/c_instance.cpp: Ditto.

        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::append): Updated for CString to Vector change and
        for UnencodableHandling.

        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset): Call the decode function
        with all the arguments since there is only one decode function now.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::computeContentSecurityPolicySHA256Hash): Updated for CString to Vector
        change and for UnencodableHandling.

        * loader/ResourceCryptographicDigest.cpp:
        (WebCore::cryptographicDigestForBytes): Changed argument type to const void*.
        * loader/ResourceCryptographicDigest.h: Ditto.

        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::TextResourceDecoder): Moved initialization of data
        members to class definition.
        (WebCore::TextResourceDecoder::create): Moved function body here from the header.
        (WebCore::TextResourceDecoder::setEncoding): Use equalLettersIgnoringASCIICase.
        (WebCore::TextResourceDecoder::shouldAutoDetect const): Updated for name change
        to m_parentFrameAutoDetectedEncoding, which obviates a comment.
        (WebCore::TextResourceDecoder::flush): Ditto.
        * loader/TextResourceDecoder.h: Moved initialization here from constructor.
        Moved function bodies out of the class. Renamed m_hintEncoding to
        m_parentFrameAutoDetectedEncoding since that is a more accurate description.

        * loader/appcache/ApplicationCacheStorage.cpp: Removed include of StringExtras.h.
        * page/FrameTree.cpp: Ditto.
        * page/PageSerializer.cpp: Ditto.
        (WebCore::PageSerializer::serializeFrame): Pass result of encode directly to
        StringBuffer::create and update for UnencodableHandling.
        (WebCore::PageSerializer::serializeCSSStyleSheet): Ditto.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::findHashOfContentInPolicies const): Ditto.

        * platform/FileHandle.cpp: Removed include of StringExtras.h.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::create): Added an overload that takes Vector<uint8_t>.
        * platform/SharedBuffer.h: Ditto.

        * platform/URLParser.cpp:
        (WebCore::URLParser::encodeQuery): Updated since encode returns a Vector instead
        of a CString now and for UnencodableHandling.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource): Ditto.

        * platform/graphics/ca/PlatformCALayer.cpp: Removed include of StringExtras.h.

        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::handleDataURL): Updated for Vector instead
        of CString.

        * platform/network/FormData.cpp:
        (WebCore::FormData::create): Added new overload, and simplified some existing ones.
        (WebCore::normalizeStringData): Changed return type to Vector<uint8_t> and updated
        for UnencodableHandling.
        (WebCore::FormData::appendMultiPartStringValue): Updated for change in type of
        result of normalizeStringData.
        * platform/network/FormData.h: Updated for the above and updated comments.

        * platform/network/FormDataBuilder.cpp: Made this a namespace instead of a class.
        (WebCore::FormDataBuilder::append): Added an overload for Vector<uint8_t>.
        (WebCore::FormDataBuilder::appendQuoted): Renamed from appendQuotedString and
        changed the argument type.
        (WebCore::FormDataBuilder::appendFormURLEncoded): Moved logic up from the
        encodeStringAsFormData function into a new separate helper.
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader): Updated for change to
        UnencodableHandling.
        (WebCore::FormDataBuilder::beginMultiPartHeader): Changed argument type.
        (WebCore::FormDataBuilder::addKeyValuePairAsFormData): Ditto.
        (WebCore::FormDataBuilder::encodeStringAsFormData): Updated to call helper.
        * platform/network/FormDataBuilder.h: Updated for the above.

        * platform/text/DecodeEscapeSequences.h: Use Vector<uint8_t> instead of
        Vector<char>, also updated the code that calls encode for the new return type
        and updated for change to UnencodableHandler.

        * platform/text/TextCodec.cpp:
        (WebCore::TextCodec::getUnencodableReplacement): Updated since we are using
        std::array now, so the out argument is easier to understand, also updated for
        change to UnencodablaHandler.
        * platform/text/TextCodec.h: Use std::array for the UnencodableReplacementArray
        type, removed the overload of decode so there is only one decode function.

        * platform/text/TextCodecICU.cpp:
        (WebCore::ICUConverterWrapper::~ICUConverterWrapper): Deleted.
        Not needed any more since we use ICUConverterPtr instead now.
        (WebCore::cachedConverterICU): Deleted.
        (WebCore::TextCodecICU::create): Deleted. Callers just use make_unique
        directly now.
        (WebCore::TextCodecICU::registerCodecs): Rewrote to use lambdas instead
        of functions with void* pointers.
        (WebCore::TextCodecICU::TextCodecICU): Moved initializers into the header.
        (WebCore::TextCodecICU::~TextCodecICU): Moved the body of releaseICUConverter
        in here. Also greatly simplified it now that ICUConverterPtr handles closing
        it as needed.
        (WebCore::TextCodecICU::releaseICUConverter const): Deleted.
        (WebCore::TextCodecICU::createICUConverter const): Rewrote to simplfy now that
        we can use ICUConverterPtr.
        (WebCore::ErrorCallbackSetter::ErrorCallbackSetter): Take a reference instead
        of a pointer.
        (WebCore::ErrorCallbackSetter::~ErrorCallbackSetter): Ditto.
        (WebCore::TextCodecICU::decode): Use equalLettersIgnoringASCIICase instead of
        strcasecmp.
        (WebCore::TextCodecICU::encode): Return a Vector instead of a CString.
        Take a StringView instead of a pointer and length. Simplified
        the backslash-as-currency-symbol code by using String::replace.
        * platform/text/TextCodecICU.h: Updated for above. Fixed indentation.
        Added a new ICUConverterPtr typedef that uses std::unique_ptr to close the
        converter; combined with move semantics it simplifies things so we don't have
        to be so careful about calling ucnv_close.

        * platform/text/TextCodecLatin1.cpp: Renamed the Latin-1 to Unicode table from
        "table" to latin1ConversionTable.
        (WebCore::TextCodecLatin1::registerCodecs): Use a lambda.
        (WebCore::encodeComplexWindowsLatin1): Return a Vector instad of CString.
        Also use StringView::codePoints instead of our own U16_NEXT.
        (WebCore::TextCodecLatin1::encode): More of the same.
        * platform/text/TextCodecLatin1.h: Updated for the above.

        * platform/text/TextCodecReplacement.cpp:
        (WebCore::TextCodecReplacement::create): Deleted.
        (WebCore::TextCodecReplacement::TextCodecReplacement): Deleted.
        (WebCore::TextCodecReplacement::registerCodecs): Use a lambda.
        * platform/text/TextCodecReplacement.h: Updated for the above.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::newStreamingTextDecoderUTF16LE): Deleted.
        (WebCore::newStreamingTextDecoderUTF16BE): Deleted.
        (WebCore::TextCodecUTF16::registerCodecs): Use lambdas.
        (WebCore::TextCodecUTF16::encode): Return a Vector.
        * platform/text/TextCodecUTF16.h: Updated for the above.

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::registerCodecs): Use a lambda.
        (WebCore::TextCodecUTF8::encode): Return a Vector.
        * platform/text/TextCodecUTF8.h: Updated for the above.

        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::newStreamingTextDecoderUserDefined): Deleted.
        (WebCore::TextCodecUserDefined::registerCodecs): Use a lambda.
        (WebCore::encodeComplexUserDefined): Return a Vector.
        (WebCore::TextCodecUserDefined::encode): Ditto.
        * platform/text/TextCodecUserDefined.h: Updated for the above.

        * platform/text/TextEncoding.cpp: Changed TextCodecMap to just hold a
        WTF::Function instead of holding a function and an additional data pointer.
        (WebCore::TextEncoding::TextEncoding): Use equalLettersIgnoringASCIICase
        instead of a special isReplacementEncoding function.
        (WebCore::TextEncoding::encode const): Return a Vector instead of a CString.
        Pass StringView instead of a pointer and length.
        * platform/text/TextEncoding.h: Updated for the above.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::addToTextCodecMap): Removed the additionalData pointer and used
        WTFMove since NewTextCodecFunction is now a WTF::Function rather than a C
        function pointer.
        (WebCore::isReplacementEncoding): Deleted.
        (WebCore::newTextCodec): Use find instead of get now that the fucntions in
        the map are WTF::Function and can't be copied.
        (WebCore::dumpTextEncodingNameMap): Deleted.
        * platform/text/TextEncodingRegistry.h: Updated for the above.

        * platform/text/win/TextCodecWin.cpp:
        (WebCore::TextCodecWin::encode): Updated comment.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send): Updated for change to UnencodableHandling.

        * xml/XSLTUnicodeSort.cpp: Removed include of StringExtras.h.
        * xml/parser/XMLDocumentParser.cpp: Ditto.
        * xml/parser/XMLDocumentParserLibxml2.cpp: Ditto.

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

        Support the decoding="sync/async" syntax for image async attribute
        https://bugs.webkit.org/show_bug.cgi?id=179432

        Reviewed by Darin Adler.

        Support the HTMLElementImage decoding attribute to allow controlling the
        decoding of an image as per:
                https://github.com/whatwg/html/pull/3221
                https://whatpr.org/html/3221/images.html#decoding-images

        Tests: fast/images/decode-decoding-attribute-async-large-image.html
               fast/images/decoding-attribute-async-small-image.html
               fast/images/decoding-attribute-dynamic-async-small-image.html
               fast/images/decoding-attribute-sync-large-image.html

        * html/HTMLAttributeNames.in:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::decodingMode const):
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::internalStartAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        * platform/graphics/DecodingOptions.h:
        (WebCore::DecodingOptions::DecodingOptions):
        (WebCore::DecodingOptions::isAuto const):
        (WebCore::DecodingOptions::isAsynchronousCompatibleWith const):
        (WebCore::DecodingOptions::isNone const): Deleted.
        * platform/graphics/ImageDecoder.h:
        * platform/graphics/ImageFrame.cpp:
        (WebCore::ImageFrame::clearImage):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameAtIndexCacheIfNeeded):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/image-decoders/ScalableImageDecoder.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw const):
        The element attributes and the document settings should be checked before
        checking our heuristics. And since the "decoding" attribute is per an image
        and isLargeImageAsyncDecodingEnabledForTesting() is a global setting, the
        decoding attribute should be checked first.

2017-12-06  David Quesada  <david_quesada@apple.com>

        [Web App Manifest] Add SPI for applying a manifest to a top-level browsing context
        https://bugs.webkit.org/show_bug.cgi?id=180368
        rdar://problem/34748067

        Reviewed by Geoffrey Garen.

        Support applying a manifest to a top-level browsing context by adding a manifest
        property on PageConfiguration to be stored on MainFrame instances created from the
        configuration.

        No new tests, no change in behavior.

        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame):
        * page/MainFrame.h:
        * page/PageConfiguration.h:

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

        Remove nodes from AXObjectCache when the associated subframe document is getting destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=180503
        <rdar://problem/35891328

        Reviewed by Chris Fleizach.

        While AXObjectCache lives on the mainframe's document, it caches nodes from every subframe document.
        When a node is being destroyed, we deregister it from the AX cache through the Node's destructor.
        Soon after the document is detached from the frame/frame is detached from the frame tree, this codepath
        is no longer available (no access to the AXObjectCache object) and from this point we are unable to deregister
        nodes associated with the current document.
        In AXObjectCache::prepareForDocumentDestruction(), we preemptively remove all the cached nodes associated
        with the about-to-be-destroyed document.

        Covered by existing tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::filterForRemoval):
        (WebCore::AXObjectCache::prepareForDocumentDestruction): Collecting the nodes and removing them later is
        not the most performant way but in order to have a single code path for the de-registration (AXObjectCache::remove)
        I think it's worth going down the slower path -which should not really be that slower anyway since those
        lists tend to stay small.
        (WebCore::AXObjectCache::clearTextMarkerNodesInUse): Deleted.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::removeNodeForUse):
        (WebCore::AXObjectCache::remove):
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * dom/Node.cpp:
        (WebCore::Node::willBeDeletedFrom):
        (WebCore::Node::moveNodeToNewDocument):

2017-12-06  Brady Eidson  <beidson@apple.com>

        Start writing ServiceWorker registrations to disk.
        https://bugs.webkit.org/show_bug.cgi?id=180488

        Reviewed by Chris Dumez.

        No new tests (No observable behavior change).

        As registrations changes occurs, we now write them to disk.
        We don't re-read them in yet.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * workers/service/ServiceWorkerRegistrationData.cpp:
        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::encode const):
        (WebCore::ServiceWorkerRegistrationData::decode):

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::toDatabaseKey const):
        * workers/service/ServiceWorkerRegistrationKey.h:

        * workers/service/server/RegistrationDatabase.cpp: Added.
        (WebCore::v1RecordsTableSchema):
        (WebCore::v1RecordsTableSchemaAlternate):
        (WebCore::databaseFilename):
        (WebCore::RegistrationDatabase::RegistrationDatabase):
        (WebCore::RegistrationDatabase::~RegistrationDatabase):
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::ensureValidRecordsTable):
        (WebCore::updateViaCacheToString):
        (WebCore::workerTypeToString):
        (WebCore::RegistrationDatabase::pushChanges):
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        (WebCore::RegistrationDatabase::databaseFailedToOpen):
        (WebCore::RegistrationDatabase::databaseOpenedAndRecordsImported):
        * workers/service/server/RegistrationDatabase.h: Copied from Source/WebCore/workers/service/ServiceWorkerRegistrationData.cpp.
        (WebCore::RegistrationDatabase::isClosed const):

        * workers/service/server/RegistrationStore.cpp: Added.
        (WebCore::RegistrationStore::RegistrationStore):
        (WebCore::RegistrationStore::~RegistrationStore):
        (WebCore::RegistrationStore::scheduleDatabasePushIfNecessary):
        (WebCore::RegistrationStore::pushChangesToDatabase):
        (WebCore::RegistrationStore::updateRegistration):
        (WebCore::RegistrationStore::removeRegistration):
        (WebCore::RegistrationStore::databaseFailedToOpen):
        (WebCore::RegistrationStore::databaseOpenedAndRecordsImported):
        * workers/service/server/RegistrationStore.h: Copied from Source/WebCore/workers/service/ServiceWorkerRegistrationData.cpp.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::installContextData):
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::data const):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::setLastUpdateTime):

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

        Unreviewed, fix build after r225577.

        * bindings/js/JSDOMGlobalObject.cpp:

2017-12-06  David Quesada  <david_quesada@apple.com>

        [Web App Manifest] Add SPI for fetching the manifest
        https://bugs.webkit.org/show_bug.cgi?id=180294
        rdar://problem/34747968

        Reviewed by Geoffrey Garen.

        Test: applicationmanifest/developer-warnings.html

        * Modules/applicationmanifest/ApplicationManifest.h:
        (WebCore::ApplicationManifest::encode const):
        (WebCore::ApplicationManifest::decode):
        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::logManifestPropertyNotAString):
        (WebCore::ApplicationManifestParser::logManifestPropertyInvalidURL):
            Drive-by wording changes. Since the warning is prefixed with "parsing
            application manifest:", remove a redundant use of "application manifest".

2017-12-06  Per Arne Vollan  <pvollan@apple.com>

        The WebProcess should use the NSRunLoop runloop type.
        https://bugs.webkit.org/show_bug.cgi?id=179804
        <rdar://problem/14012823>

        Reviewed by Brent Fulgham.

        No new tests.

        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle):

2017-12-06  Antti Koivisto  <antti@apple.com>

        Prefer ids and classes over tag names in selector filter
        https://bugs.webkit.org/show_bug.cgi?id=180433
        <rdar://problem/35859103>

        Reviewed by Zalan Bujtas.

        There are only four slots in the filter and currently we just pick whatever identifiers we find traversing the selector
        from right to left. More specific selector types are on average more valuable (id > class > tag) so we should prefer them.

        This appears to be 4-5% StyleBench progression.

        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        * css/SelectorFilter.cpp:
        (WebCore::collectSimpleSelectorHash):
        (WebCore::collectSelectorHashes):

            This function collects all hashes from the selector.

        (WebCore::chooseSelectorHashesForFilter):

            This function chooses the most valuable hashes to use with the filter.

        (WebCore::SelectorFilter::collectHashes):

            Factor into two separate steps.

        (WebCore::collectDescendantSelectorIdentifierHashes): Deleted.
        (WebCore::SelectorFilter::collectIdentifierHashes): Deleted.
        * css/SelectorFilter.h:
        (WebCore::SelectorFilter::fastRejectSelector const):

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

        [EME] Make CDMInstance& parameter passed through MediaPlayer non-const
        https://bugs.webkit.org/show_bug.cgi?id=180484

        Reviewed by Jon Lee.

        One can only call const methods on const references, and the obvious intent
        of these methods is for the callee to call non-const methods on the parameters.

        * Modules/encryptedmedia/MediaKeys.h:
        (WebCore::MediaKeys::cdmInstance):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::cdmInstanceAttached):
        (WebCore::MediaPlayer::cdmInstanceDetached):
        (WebCore::MediaPlayer::attemptToDecryptWithInstance):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateInterface::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateInterface::attemptToDecryptWithInstance):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateGStreamerBase::attemptToDecryptWithInstance):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithInstance):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

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

        Preflight should bypass service worker
        https://bugs.webkit.org/show_bug.cgi?id=180463

        Reviewed by Alex Christensen.

        Covered by updated test.

        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::startPreflight): Ensure service worker is not used.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFail): Tighten check and clear resource proactively to not hit loadRequest ASSERT.

2017-12-06  John Wilander  <wilander@apple.com>

        Storage Access API: Make document.hasStorageAccess a function and always allow access for same-origin iframes
        https://bugs.webkit.org/show_bug.cgi?id=176944
        <rdar://problem/34440658>

        Reviewed by Brent Fulgham.

        Test: http/tests/storageAccess/request-storage-access-cross-origin-sandboxed-iframe-without-user-gesture.html

        This change introduces document.hasStorageAccess() as a function which
        returns a promise instead of being a property. Since cookie access can
        be due to both a granted request and recent user interaction as first
        party, the WebKit::WebResourceLoadStatisticsStore needs to be consulted.

        * dom/Document.cpp:
        (WebCore::Document::hasStorageAccess):
        (WebCore::Document::requestStorageAccess):
            Removed check of the previous m_hasStorageAccess member.
            Same-origin check done earlier. This was a request/suggestion
            from Mozilla.
        * dom/Document.h:
        (WebCore::Document::hasStorageAccess const): Deleted.
            Now uses a promise.
        * dom/Document.idl:
        * page/ChromeClient.h:

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

        REGRESSION (r225537): Crash in WebCore::SWServerWorker::setHasPendingEvents(bool) + 68
        https://bugs.webkit.org/show_bug.cgi?id=180481

        Reviewed by Chris Dumez.

        Replacing ASSERT by if null check since there is no strong guarantee right now that there is a registration
        in SWServer registration map associated to a SWServerWorker.

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::setHasPendingEvents):

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

        ServiceWorkers API should reject promises when calling objects inside detached frames
        https://bugs.webkit.org/show_bug.cgi?id=180444

        Reviewed by Youenn Fablet.

        ServiceWorkers API should reject promises when calling objects inside detached frames.

        No new tests, rebaselined existing test.

        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::callPromiseFunction):
        Use the caller's globalObject instead of the lexicalGlobalObject when constructing the
        deferred promise. The bug became visible when working on this service worker bug since
        rejecting the promise when the frame is detached did not actually work. The issue is
        that since the promise was created with the detached frame's globalObject, then it was
        suspended and would not run script.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::callerGlobalObject):
        (WebCore::incumbentDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        Add convenience function to get the caller's globalObject. It was carved out of
        incumbentDOMWindow().

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::update):
        (WebCore::ServiceWorkerRegistration::unregister):
        Reject the promise when m_isStopped flag is set (i.e. ActiveDOMObject::stop()
        has been called).

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

        [Mac] REGRESSION (r224527): Drawing a path with box-shadow takes double the blur-radius on Retina display
        https://bugs.webkit.org/show_bug.cgi?id=180460
        <rdar://problem/35869866>

        Reviewed by Daniel Bates.

        Disable using CGContextDrawPathDirect() for macOS High Sierra or earlier.
        This API has a bug when drawing a path with a shadow on Retina display.
        This bug is tracked internally by <rdar://problem/35620690>.


        * platform/graphics/cg/GraphicsContextCG.cpp:

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

        Service Worker fetch should filter HTTP headers that are added by CachedResourceLoader/CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=180462

        Reviewed by Geoffrey Garen.

        Coved by rebased test.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::cleanRedirectedRequestForAccessControl): Accept header is a safe header so it is fine to keep it.
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent): Cleaning headers added by CachedResourceLoader/CachedResource.

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

        [CoordGraphics] Introduce Nicosia::PaintingContext, add Cairo implementation
        https://bugs.webkit.org/show_bug.cgi?id=180239

        Reviewed by Michael Catanzaro.

        As the next step in the Nicosia abstraction formation, we introduce
        Nicosia::PaintingContext. Implementations of this class will leverage a
        chosen 2D graphics library to paint (through GraphicsContext) into the
        memory area that's specified by a given Nicosia::Buffer object.

        Nicosia::Buffer is slimmed down to only control the memory that's
        required for rasterization of an RGBA32 painting output. It mimics the
        Cairo ImageBuffer implementation by using FastMalloc to allocate the
        necessary memory. In the future this class might become an interface of
        which different implementations will be providing memory that's
        allocated through different ways. For instance, when GLES3 is available,
        it would be possible to map GPU memory into the process memory space and
        rasterize into that, effectively eliminating need for GPU uploads.

        Since the ImageBuffer use in Nicosia::Buffer is dropped, the context()
        and uploadImage() methods are also removed. The functionality of
        ImageBuffer that was leveraged for CoordinatedGraphics rasterization
        still remains used through the PaintingContextCairo implementation. In
        the constructor of that class, with the target Nicosia::Buffer provided,
        we construct the cairo_surface_t and cairo_t objects that are necessary
        to create a combination of PlatformContextCairo and GraphicsContext
        objects that we can then use for rasterization.

        Reference of the passed-in Nicosia::Buffer object is increased for the
        lifetime of the cairo_surface_t object that will be drawing into that
        buffer's memory area. This ensures the memory area doesn't disappear
        from a live cairo_surface_t. Still, the expectation is that the
        cairo_surface_t object won't outlive the PaintingContextCairo object's
        lifetime, since the cairo_t object is also managed here and deleted in
        the destructor. To test that, we use a cairo_surface_t user data key
        that in its destroy callback dereferences the Nicosia::Buffer object and
        also marks the deletion process for the related PaintingContextCairo
        object as complete. This m_deletionComplete value is tested in the
        destructor of the class, once all the Cairo references are nulled out.

        The PaintingContext objects should be limited to a single scope,
        enabling the implementation resources to assume that the lifetime of the
        implementation object won't extend outside of the scope where it was
        created. To ensure that, the PaintingContext::paint() static function is
        added that creates the PaintingContext object and then executes the
        passed-in functor, passing it the GraphicsContext that should be used
        for drawing. Drawing is thus limited to that functor only, and the
        PaintingContext's create() function and the virtual graphicsContext()
        are not made public in the class.

        No new tests -- no change in functionality.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaBuffer.cpp:
        (Nicosia::Buffer::Buffer):
        (Nicosia::Buffer::context): Deleted.
        (Nicosia::Buffer::uploadImage): Deleted.
        * platform/graphics/nicosia/NicosiaBuffer.h:
        (Nicosia::Buffer::stride const):
        (Nicosia::Buffer::data const):
        * platform/graphics/nicosia/NicosiaPaintingContext.cpp: Copied from Source/WebCore/platform/graphics/nicosia/NicosiaBuffer.cpp.
        (Nicosia::PaintingContext::create):
        * platform/graphics/nicosia/NicosiaPaintingContext.h: Copied from Source/WebCore/platform/graphics/nicosia/NicosiaBuffer.cpp.
        (Nicosia::PaintingContext::paint):
        * platform/graphics/nicosia/NicosiaPaintingContextCairo.cpp: Added.
        (Nicosia::PaintingContextCairo::PaintingContextCairo):
        (Nicosia::PaintingContextCairo::~PaintingContextCairo):
        (Nicosia::PaintingContextCairo::graphicsContext):
        * platform/graphics/nicosia/NicosiaPaintingContextCairo.h: Copied from Source/WebCore/platform/graphics/nicosia/NicosiaBuffer.h.
        * platform/graphics/nicosia/NicosiaPaintingEngineBasic.cpp:
        (Nicosia::PaintingEngineBasic::paint):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::update):

2017-12-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] Layout test media/track/track-in-band-duplicate-tracks-when-source-changes.html crashes and times out
        https://bugs.webkit.org/show_bug.cgi?id=160131

        Reviewed by Eric Carlson.

        Null dereference can be happen if VideoTrack and AudioTrack are
        disconnected from its media element.

        No new tests, no behavior change.

        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::willRemove): Null-check mediaElement.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::setLanguage): Ditto.

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

        ServiceWorkerGlobalScope prototype chain should be immutable
        https://bugs.webkit.org/show_bug.cgi?id=180450

        Reviewed by Youenn Fablet.

        ServiceWorkerGlobalScope prototype chain should be immutable, similarly
        to what we do for DOMWindow. This is covered by a web-platform-test
        which was timing out because it was successfuly overwriting the
        ServiceWorkerGlobalScope prototype.

        No new tests, rebaselined existing test.

        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/service/ServiceWorkerGlobalScope.idl:

2017-12-05  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        Fast binding generation by batching several files at once
        https://bugs.webkit.org/show_bug.cgi?id=179958

        Reviewed by Alex Christensen.

        Passing several files to the sub process at once and reducing the total cost of
        process generation. Especially Windows port has great speed improvement because
        its implementation of fork/exec is terrible.

        * bindings/scripts/generate-bindings-all.pl:
        (spawnGenerateBindingsIfNeeded):
        * bindings/scripts/generate-bindings.pl:
        (generateBindings):

2017-12-05  David Quesada  <david_quesada@apple.com>

        [Web App Manifest] Support fetching the app manifest 
        https://bugs.webkit.org/show_bug.cgi?id=180292

        Reviewed by Geoffrey Garen.

        Add support in WebCore for loading and parsing application manifests. This functionality
        is currently exposed with two methods: DocumentLoader::loadApplicationManifest() to call
        to start loading the manifest, and FrameLoaderClient::finishedLoadingApplicationManifest()
        for clients to override in order to be notified of the loaded manifest.

        No new tests, since no functionality is exposed to web content or embedders yet. The
        needed SPI will be added in an upcoming patch.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
            Added CachedApplicationManifest and ApplicationManifestLoader.
        * html/HTMLLinkElement.h:
        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::LinkRelAttribute):
        (WebCore::LinkRelAttribute::isSupported):
            Add "manifest" as a supported 'rel' type for links.
        * html/LinkRelAttribute.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJSON):
        (WebCore::InspectorPageAgent::inspectorResourceType):
        * inspector/agents/InspectorPageAgent.h:
        * loader/ApplicationManifestLoader.cpp: Added.
            Added a class ApplicationManifestLoader which handles creating a ResourceRequest,
            loading the resource from the CachedResourceLoader, and parsing the resulting text.
            This class and its relation to DocumentLoader are roughly based on that of IconLoader,
            which serves a similar purpose - requesting a resource on the page and ultimately
            providing it to the embedder.
        (WebCore::ApplicationManifestLoader::ApplicationManifestLoader):
        (WebCore::ApplicationManifestLoader::~ApplicationManifestLoader):
        (WebCore::ApplicationManifestLoader::startLoading):
        (WebCore::ApplicationManifestLoader::stopLoading):
        (WebCore::ApplicationManifestLoader::processManifest):
        (WebCore::ApplicationManifestLoader::notifyFinished):
        * loader/ApplicationManifestLoader.h: Copied from Source/WebCore/page/csp/ContentSecurityPolicyDirectiveNames.h.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        (WebCore::DocumentLoader::loadApplicationManifest):
        (WebCore::DocumentLoader::finishedLoadingApplicationManifest):
        (WebCore::DocumentLoader::notifyFinishedLoadingApplicationManifest):
        * loader/DocumentLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):
        (WebCore::LinkLoader::isSupportedType):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        * loader/cache/CachedApplicationManifest.cpp: Added.
        (WebCore::CachedApplicationManifest::CachedApplicationManifest):
        (WebCore::CachedApplicationManifest::finishLoading):
        (WebCore::CachedApplicationManifest::setEncoding):
        (WebCore::CachedApplicationManifest::encoding const):
        (WebCore::CachedApplicationManifest::process):
            Add a method to process the fetched text into an ApplicationManifest. CachedApplicationManifest
            does not store the resulting ApplicationManifest because the text of an application
            manifest can yield a different ApplicationManifest depending on the URL of the document
            processing it.
        * loader/cache/CachedApplicationManifest.h: Copied from Source/WebCore/page/csp/ContentSecurityPolicyDirectiveNames.h.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestApplicationManifest):
        (WebCore::contentTypeFromResourceType):
        (WebCore::CachedResourceLoader::checkInsecureContent const):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        * loader/cache/CachedResourceLoader.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::applicationManifestKey):
        * page/DiagnosticLoggingKeys.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowManifestFromSource const):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForManifest const):
        (WebCore::ContentSecurityPolicyDirectiveList::addDirective):
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        * page/csp/ContentSecurityPolicyDirectiveNames.cpp:
        * page/csp/ContentSecurityPolicyDirectiveNames.h:

2017-12-05  Stephan Szabo  <stephan.szabo@sony.com>

        Switch windows build to Visual Studio 2017
        https://bugs.webkit.org/show_bug.cgi?id=172412

        Reviewed by Per Arne Vollan.

        Only changes proj file to update generator

        * WebCore.vcxproj/WebCore.proj:

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

        Limit user agent versioning to an upper bound
        https://bugs.webkit.org/show_bug.cgi?id=180365
        <rdar://problem/34550617>

        Reviewed by Joseph Pecoraro.

        Freeze the version reported as User Agent to OS 10.13.4 (OS 11.3 on iOS) and WebKit 605.1.15
        for User Agent purposes.

        Test: fast/dom/navigator-userAgent-frozen.html

        * page/cocoa/UserAgent.h:
        * page/cocoa/UserAgent.mm:
        (WebCore::versionPredatesFreeze): Helper function. Returns true for Version 10.13.3 or older.
        (WebCore::systemMarketingVersionForUserAgentString):
        (WebCore::userAgentBundleVersion):
        (WebCore::userVisibleWebKitBundleVersionFromFullVersion): Deleted.
        (WebCore::userAgentBundleVersionFromFullVersionString): Deleted.
        * page/ios/UserAgentIOS.mm:
        (WebCore::standardUserAgentWithApplicationName): Don't take the WebKit bundle version
        as an argument, or pass it to the user agent string generator.
        * page/mac/UserAgentMac.mm:
        (WebCore::standardUserAgentWithApplicationName): Ditto. 

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

        Unreviewed, rolling out r225430.

        This caused an API failure on release.

        Reverted changeset:

        "Move DateComponents into WTF"
        https://bugs.webkit.org/show_bug.cgi?id=180211
        https://trac.webkit.org/changeset/225430

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

        Composited frames incorrectly get requestAnimationFrame throttled
        https://bugs.webkit.org/show_bug.cgi?id=178396

        Reviewed by Zalan Bujtas.

        If a composited iframe was inside overflow:scroll, and the overflow was scrolled to the left
        further than the window width, then RenderLayer::childrenClipRect() would return an empty rectangle
        and we'd incorrectly consider the iframe out of view, and thus throttle its requestAnimationFrame.

        childrenClipRect() was taking unscaledDocumentRect(), applying the clip, and then mapping the result
        from local to absolute coordinates (which mapped it through the overflow scroll offset). This is incorrect
        because it considers the unscaledDocumentRect() to be in local coordinates, which it is not.

        Instead, start with the infinite rect, which essentially tells us if we have any clipping, and then
        intersect that with the document rect at the end. Something similar is done in other places that call.
        calculateRects().

        Test: fast/animation/request-animation-frame-throttle-inside-overflow-scroll.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):

2017-12-05  Michael Saboff  <msaboff@apple.com>

        Make WebKit build for ARM64_32
        https://bugs.webkit.org/show_bug.cgi?id=180447

        Reviewed by Mark Lam.

        No new test as this isn't a change to functionality.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply): Fallback to the C++ version for
        ARM64_32.

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

        XMLHttpRequest should not be exposed to service workers
        https://bugs.webkit.org/show_bug.cgi?id=180446

        Reviewed by Youenn Fablet.

        Stop exposing XMLHttpRequest to service workers, as per:
        - https://xhr.spec.whatwg.org/#interface-xmlhttprequest

        * xml/XMLHttpRequest.idl:

2017-12-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: content views for resources loaded through XHR do not reflect declared mime-type
        https://bugs.webkit.org/show_bug.cgi?id=141389
        <rdar://problem/19767070>

        Reviewed by Brian Burg.

        Updated: http/tests/inspector/network/xhr-response-body.html:
                 http/tests/inspector/network/fetch-response-body.html:

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading): Deleted.
        Remove special handling of XHR content that decoded output as text.

        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::requestId const):
        (WebCore::NetworkResourcesData::ResourceData::loaderId const):
        (WebCore::NetworkResourcesData::ResourceData::frameId const):
        (WebCore::NetworkResourcesData::ResourceData::url const):
        (WebCore::NetworkResourcesData::ResourceData::content const):
        (WebCore::NetworkResourcesData::ResourceData::isContentEvicted const):
        (WebCore::NetworkResourcesData::ResourceData::textEncodingName const):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::ResourceData):
        (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent):
        (WebCore::NetworkResourcesData::responseReceived):
        (WebCore::NetworkResourcesData::setResourceContent):
        (WebCore::shouldBufferResourceData):
        (WebCore::NetworkResourcesData::maybeAddResourceData):
        (WebCore::NetworkResourcesData::maybeDecodeDataToContent):

        Make NetworkResourcesData only create a text decoder for resources we
        really think are text, and buffer resource data if it is text data
        or if it is a resource that would otherwise not be buffered by WebCore
        (such as XHRs with a DoNotBufferData policy). This ensures that the
        Inspector will have data to show for resources that won't be cached.

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::sourceMapURLForResource):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::hasTextContent): Deleted.
        (WebCore::InspectorPageAgent::cachedResourceContent): Deleted.
        (WebCore::InspectorPageAgent::createTextDecoder): Deleted.
        (WebCore::textContentForCachedResource): Deleted.
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveData):
        (WebCore::InspectorNetworkAgent::willDestroyCachedResource):
        (WebCore::InspectorNetworkAgent::getResponseBody):
        (WebCore::InspectorNetworkAgent::shouldTreatAsText):
        (WebCore::InspectorNetworkAgent::createTextDecoder):
        (WebCore::InspectorNetworkAgent::textContentForCachedResource):
        (WebCore::InspectorNetworkAgent::cachedResourceContent):
        (WebCore::textContentForResourceData):
        (WebCore::InspectorNetworkAgent::searchOtherRequests):
        (WebCore::isErrorStatusCode): Deleted.
        (WebCore::InspectorNetworkAgent::didFinishXHRLoading): Deleted.
        * inspector/agents/InspectorNetworkAgent.h:
        Move static PageAgent functions related to the generic data tuple
        (content, base64Encoded) to NetworkAgent. Also generalize it to
        not rely on the CachedResourceType, but instead rely on the MIME type.
        This has a few changes in behavior:

            - Images, may now be text if they have a text mime type (image/svg+xml).
            - XHR / Fetch / Other may be sent as text if they have a text mime type.
            - XHR / Fetch / Other are not assumed to be text, and may be sent as base64 encoded.
        
        For this to be useful the frontend should also check the mime type and
        display an appropriate ContentView.

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

        Implement https://w3c.github.io/ServiceWorker/#clients-claim
        https://bugs.webkit.org/show_bug.cgi?id=180261

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/serviceworkerclients-claim.https.html

        Implement claim by going to the storage process and then iterate over clients to see whether active worker can be set.
        Update SWServerWorker to call registration tryClear/tryActivate whenever a service worker has no pending event.

        * workers/service/ServiceWorkerClients.cpp:
        (WebCore::ServiceWorkerClients::claim):
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::claim):
        (WebCore::SWServer::doRegistrationMatching):
        (WebCore::SWServer::doRegistrationMatching const): Deleted.
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::doRegistrationMatching):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::controlClient):
        * workers/service/server/SWServerRegistration.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::claim):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::claim):
        * workers/service/server/SWServerWorker.h:

2017-12-05  Per Arne Vollan  <pvollan@apple.com>

        [Win] Scrollbars are sometimes not rendered in accelerated compositing mode.
        https://bugs.webkit.org/show_bug.cgi?id=180431
        <rdar://problem/34531264>

        Reviewed by Simon Fraser.

        No new tests, covered by existing tests.

        When a scroll layer is required, we will create an overflow control hosts layer.
        In this case the method RenderLayerCompositor::shouldCompositeOverflowControls()
        should return true, otherwise the scrollbars will not be rendered.
 
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls const):

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

        Call "Terminate Service Worker" on all workers when all their clients are gone
        https://bugs.webkit.org/show_bug.cgi?id=179552
        <rdar://problem/35836323>

        Unreviewed.

        * workers/service/server/SWServer.cpp: Reducing from 60_s to 10_s based on bugzilla comment.

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

        Add support for ServiceWorkerContainer.prototype.ready
        https://bugs.webkit.org/show_bug.cgi?id=180383

        Reviewed by Youenn Fablet.

        Add support for ServiceWorkerContainer.prototype.ready:
        - https://w3c.github.io/ServiceWorker/#navigator-service-worker-ready

        No new tests, rebaselined existing test.

        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::ready):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistrationKey.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::resolveRegistrationReadyRequests):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::activate):
        (WebCore::SWServerRegistration::setIsUninstalling):
        * workers/service/server/SWServerRegistration.h:

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

        Modernize WebThread code for further refactoring
        https://bugs.webkit.org/show_bug.cgi?id=180344

        Reviewed by Alex Christensen.

        When touching Thread and its initialization component, we need to touch
        web thread initialization code too. However, since web thread code is old,
        it's style is not following to WebKit coding style guidelines.

        This patch first modernizes WebThread code for further refactoring.

        1. `Type*` instead of `Type *`.
        2. Use std::call_once instead of pthread_once.
        3. Use static_cast instead of C-cast.
        4. Use nullptr instead of NULL.
        5. Use `ret` or `!ret` instead of `ret != 0` or `ret == 0`.
        6. Do not use #pragma unused.
        7. if-else with one statement should not have braces.

        In this patch, we do not change pthread_condition_t to WTF::Condition and
        pthread_mutex_t to WTF::Lock since web thread code requires extra care about
        threading.

        No behavior change.

        * platform/ios/wak/WebCoreThread.mm:
        (-[NSObject releaseOnMainThread]):
        (SendMessage):
        (HandleDelegateSource):
        (SendDelegateMessage):
        (WebThreadAdoptAndRelease):
        (lockWebCoreReleaseLock):
        (unlockWebCoreReleaseLock):
        (WebCoreObjCDeallocOnWebThreadImpl):
        (WebCoreObjCDeallocWithWebThreadLockImpl):
        (HandleWebThreadReleaseSource):
        (WebThreadCallDelegate):
        (WebThreadPostNotification):
        (WebThreadCallDelegateAsync):
        (WebThreadMakeNSInvocation):
        (MainRunLoopAutoUnlock):
        (_WebThreadAutoLock):
        (WebRunLoopLock):
        (WebRunLoopUnlock):
        (MainRunLoopUnlockGuard):
        (CurrentThreadContext):
        (RunWebThread):
        (StartWebThread):
        (WebTimedConditionLock):
        (_WebTryThreadLock):
        (WebThreadUnlockFromAnyThread):
        (WebThreadUnlockGuardForMail):
        (_WebThreadUnlock):
        (WebThreadIsLocked):
        (WebThreadLockPopModal):
        (WebThreadCurrentContext):
        (WebThreadEnable):
        (FreeThreadContext): Deleted.
        (InitThreadContextKey): Deleted.

2017-12-05  Alex Christensen  <achristensen@webkit.org>

        Fix non-unified build after r225381
        https://bugs.webkit.org/show_bug.cgi?id=180434

        Reviewed by Keith Miller.

        * loader/ResourceTimingInformation.cpp:
        FrameLoader.h is included in other files that are combined with this file in unified builds,
        but we need to merge r225381 to a branch that doesn't use unified builds.  This build failure
        would've come up randomly in the future when we add files, too.

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

        Remove webkitGetImageDataHD and webkitPutImageDataHD from canvas API
        https://bugs.webkit.org/show_bug.cgi?id=180387

        Reviewed by Dean Jackson.

        CanvasRenderingContext2D.webkitGetImageDataHD and webkitPutImageDataHD were never standardized,
        and Blink removed support in 2014 (https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/FOPH5dloGG8).

        Since our canvas backing store is always 1x, they have no use anyway, so remove them.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::webkitGetImageDataHD const): Deleted.
        (WebCore::CanvasRenderingContext2D::webkitPutImageDataHD): Deleted.
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

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

        Implement setting of service worker to client in SWServer without going to WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=180382

        Reviewed by Chris Dumez.

        No change of behavior.

        This patch removes the notification of active worker setting from ScriptExecution/WebProcess up to SWServer/StorageProcess.
        Instead, active worker setting is fully done/controlled in SWServer.
        Whenever there is a change, SWServer notifies WebProcess and ScriptExecutionContext gets updated accordingly.

        * dom/Document.cpp:
        (WebCore::Document::setServiceWorkerConnection):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::setActiveServiceWorker):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * workers/service/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::setClientActiveWorker):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::registrationFromServiceWorkerIdentifier):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::Connection::serviceWorkerStartedControllingClient): Deleted.
        (WebCore::SWServer::Connection::serviceWorkerStoppedControllingClient): Deleted.
        (WebCore::SWServer::serviceWorkerStartedControllingClient): Deleted.
        (WebCore::SWServer::serviceWorkerStoppedControllingClient): Deleted.
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::activate):

2017-12-01  Filip Pizlo  <fpizlo@apple.com>

        GC constraint solving should be parallel
        https://bugs.webkit.org/show_bug.cgi?id=179934

        Reviewed by JF Bastien.

        No new tests because no change in behavior. This change is best tested using DOM-GC-intensive
        benchmarks like Speedometer and Dromaeo.
        
        This parallelizes the DOM's output constraint, and makes some small changes to make this more
        scalable.

        * ForwardingHeaders/heap/SimpleMarkingConstraint.h: Added.
        * ForwardingHeaders/heap/VisitingTimeout.h: Removed.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMGCOutputConstraint.cpp: Added.
        (WebCore::DOMGCOutputConstraint::DOMGCOutputConstraint):
        (WebCore::DOMGCOutputConstraint::~DOMGCOutputConstraint):
        (WebCore::DOMGCOutputConstraint::executeImpl):
        (WebCore::DOMGCOutputConstraint::doParallelWorkImpl):
        (WebCore::DOMGCOutputConstraint::finishParallelWorkImpl):
        * bindings/js/DOMGCOutputConstraint.h: Added.
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::initNormalWorld):
        * dom/Node.cpp:
        (WebCore::Node::eventTargetDataConcurrently):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::clearEventTargetData):

2017-12-05  Antoine Quint  <graouts@apple.com>

        <video> and scale() transforms yield shrunk small or clipped controls
        https://bugs.webkit.org/show_bug.cgi?id=180358
        <rdar://problem/34436124>

        Unreviewed.

        Use DOMMatrix vs. WebKitCSSMatrix per Simon's post-commit review feedback.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsSize):

2017-12-04  Chris Dumez  <cdumez@apple.com>

        Support container.getRegistration() / getRegistrations() inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180360

        Reviewed by Youenn Fablet.

        Support container.getRegistration() / getRegistrations() inside service workers
        by making sure we hop to the right thread when needed.

        Test: http/tests/workers/service/ServiceWorkerGlobalScope_getRegistration.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::postTaskTo):
        * dom/ScriptExecutionContext.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::jobRejectedInServer):
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        (WebCore::SWClientConnection::clearPendingJobs):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::didFinishGetRegistrationRequest):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::didFinishGetRegistrationsRequest):
        (WebCore::ServiceWorkerContainer::stop):
        * workers/service/ServiceWorkerContainer.h:

2017-12-04  Simon Fraser  <simon.fraser@apple.com>

        Cleanup code that computes iframe content offsets in FrameView
        https://bugs.webkit.org/show_bug.cgi?id=180385

        Reviewed by Zalan Bujtas.

        The coordinate conversion functions in FrameView explicitly added borderLeft/paddingLeft
        and borderTop/paddingTop to compute the offset from the contents of a frame to its parent renderer.
        
        This is equivalent to the call to contextBoxRect() that RenderWidget::updateWidgetGeometry() does,
        which also takes left-side scrollbars into account.
        
        Coordinate offsets don't need height and width, so add RenderBox::contentBoxLocation() that just
        computes the top left, and use it in FrameView.

        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::convertToContainingView const):
        (WebCore::FrameView::convertFromContainingView const):
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::scaled const):
        (WebCore::FloatPoint::scaled): Deleted.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::contentBoxLocation const):
        * rendering/RenderBox.h:

2017-12-04  Nan Wang  <n_wang@apple.com>

        AX: AOM: Implement relation type properties
        https://bugs.webkit.org/show_bug.cgi?id=179500

        Reviewed by Ryosuke Niwa.

        Accessibility Object Model
        Explainer: https://wicg.github.io/aom/explainer.html
        Spec: https://wicg.github.io/aom/spec/

        Implemented the AOM support for activeDescendant, details and errorMessage.
        The corresponding ARIA attributes all take IDREFs, and the AOM properties
        take references to AccessibleNodes instead.

        Test: accessibility/mac/AOM-relation-property.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::getAttribute const):
        (WebCore::AccessibilityObject::hasProperty const):
        (WebCore::AccessibilityObject::stringValueForProperty const):
        (WebCore::AccessibilityObject::boolValueForProperty const):
        (WebCore::AccessibilityObject::intValueForProperty const):
        (WebCore::AccessibilityObject::unsignedValueForProperty const):
        (WebCore::AccessibilityObject::doubleValueForProperty const):
        (WebCore::AccessibilityObject::elementValueForProperty const):
        (WebCore::AccessibilityObject::supportsARIAAttributes const):
        (WebCore::AccessibilityObject::elementsFromProperty const):
        (WebCore::AccessibilityObject::elementsReferencedByProperty const):
        (WebCore::AccessibilityObject::ariaActiveDescendantReferencingElements const):
        (WebCore::AccessibilityObject::ariaDetailsElements const):
        (WebCore::AccessibilityObject::ariaDetailsReferencingElements const):
        (WebCore::AccessibilityObject::ariaErrorMessageElements const):
        (WebCore::AccessibilityObject::ariaErrorMessageReferencingElements const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::activeDescendant const):
        * accessibility/AccessibleNode.cpp:
        (WebCore::ariaAttributeMap):
        (WebCore::isPropertyValueRelation):
        (WebCore::AccessibleNode::attributeFromAXPropertyName):
        (WebCore::AccessibleNode::setRelationProperty):
        (WebCore::AccessibleNode::singleRelationValueForProperty):
        (WebCore::AccessibleNode::activeDescendant const):
        (WebCore::AccessibleNode::setActiveDescendant):
        (WebCore::AccessibleNode::details const):
        (WebCore::AccessibleNode::setDetails):
        (WebCore::AccessibleNode::errorMessage const):
        (WebCore::AccessibleNode::setErrorMessage):
        * accessibility/AccessibleNode.h:
        * accessibility/AccessibleNode.idl:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2017-12-04  Simon Fraser  <simon.fraser@apple.com>

        Minor DisplayRefreshMonitor-related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179802

        Reviewed by Sam Weinig.

        New trace point for when the CVDisplayLink fires on its own thread.

        Some #pragma once, and put all the WellKnownRunLoopOrders in one place.

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart):
        * platform/cf/RunLoopObserver.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/ca/LayerFlushScheduler.h:
        * platform/graphics/ca/cocoa/LayerFlushSchedulerMac.cpp:
        (WebCore::LayerFlushScheduler::LayerFlushScheduler):

2017-12-04  David Quesada  <david_quesada@apple.com>

        Add a class for parsing application manifests
        https://bugs.webkit.org/show_bug.cgi?id=177973
        rdar://problem/34747949

        Reviewed by Geoffrey Garen.

        Add a new struct ApplicationManifest, along with ApplicationManifestParser to initialize
        ApplicationManifests from JSON data, according to the App Manifest spec. Just a basic subset
        of the manifests's properties are implemented to start with.

        ApplicationManifestParser is tested by new unit tests in TestWebKitAPI.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_APPLICATION_MANIFEST feature flag.
        * Modules/applicationmanifest/ApplicationManifest.h: Added.
        * Modules/applicationmanifest/ApplicationManifestParser.cpp: Added.
        (WebCore::ApplicationManifestParser::parse):
        The main entry point for eventual clients (and currently the unit tests) to invoke
        ApplicationManifestParser. There is a variant that accepts a ScriptExecutionContext that
        uses the context exclusively for logging console warnings while parsing the manifest, and
        not for actually executing any scripts.
        (WebCore::ApplicationManifestParser::ApplicationManifestParser):
        (WebCore::ApplicationManifestParser::parseManifest):
        (WebCore::ApplicationManifestParser::logManifestPropertyNotAString):
        (WebCore::ApplicationManifestParser::logManifestPropertyInvalidURL):
        (WebCore::ApplicationManifestParser::logDeveloperWarning):
        (WebCore::ApplicationManifestParser::parseStartURL):
        (WebCore::ApplicationManifestParser::parseName):
        (WebCore::ApplicationManifestParser::parseDescription):
        (WebCore::ApplicationManifestParser::parseShortName):
        (WebCore::isInScope):
        (WebCore::ApplicationManifestParser::parseScope):
        (WebCore::ApplicationManifestParser::parseGenericString):
        * Modules/applicationmanifest/ApplicationManifestParser.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * features.json: Change the Web App Manifest feature status to "In Development"

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

        RenderMultiColumnFlow::fragmentedFlowDescendantInserted should not destroy incoming newDescendant
        https://bugs.webkit.org/show_bug.cgi?id=180181

        Reviewed by Antti Koivisto.

        This is in preparation for having all multicolumn related tree mutation in RenderTreeUpdaterMultiColumn.

        Covered by fast/multicol/column-span-range-crash.html

        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        * rendering/RenderMultiColumnFlow.h:
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::destroyFragmentedFlow):

2017-12-04  JF Bastien  <jfbastien@apple.com>

        Update std::expected to match libc++ coding style
        https://bugs.webkit.org/show_bug.cgi?id=180264

        Reviewed by Alex Christensen.

        Update various uses of Expected, mostly renaming valueOr and
        hasValue to the STL naming convention.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::retrieveRecords):
        (WebCore::DOMCache::batchDeleteOperation):
        (WebCore::DOMCache::batchPutOperation):
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::retrieveCaches):
        (WebCore::DOMCacheStorage::open):
        (WebCore::DOMCacheStorage::remove):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::doRemove):
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        (WebCore::recordsDataOrErrorFromRecords):
        (WebCore::recordsOrErrorFromRecordsData):
        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestScriptWithCache const):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getDomainList):
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::loadBestFitImage):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::loadImage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * dom/CallbackResult.h:
        (WebCore::CallbackResult<ReturnType>::type const):
        (WebCore::CallbackResult<ReturnType>::releaseReturnValue):
        * dom/Element.cpp:
        (WebCore::Element::getIntegralAttribute const):
        (WebCore::Element::getUnsignedIntegralAttribute const):
        * dom/ExceptionOr.h:
        (WebCore::ExceptionOr<ReturnType>::hasException const):
        (WebCore::ExceptionOr<void>::hasException const):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::maxLengthAttributeChanged):
        (WebCore::HTMLInputElement::minLengthAttributeChanged):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::maxLengthAttributeChanged):
        (WebCore::HTMLTextAreaElement::minLengthAttributeChanged):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLNonNegativeInteger):
        * html/parser/HTMLParserIdioms.h:
        (WebCore::limitToOnlyHTMLNonNegative):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::startPreflight):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadMainResource):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        (WebCore::LinkLoader::loadLink):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::load):
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::load):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/URLParser.cpp:
        (WebCore::URLParser::parseIPv4Host):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::startLoading):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateExternalDocument):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):

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

        REGRESSION (r211531): Text flow changes and overlaps other text after double-click selecting paragraph
        https://bugs.webkit.org/show_bug.cgi?id=180377
        <rdar://problem/34337967>

        Reviewed by Antti Koivisto.

        Take floats into account when computing the available width for a certain vertical position.

        Test: fast/block/float/simple-line-layout-float-shrink-line.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::updateLineConstrains):

2017-12-04  Antoine Quint  <graouts@apple.com>

        <video> and scale() transforms yield shrunk small or clipped controls
        https://bugs.webkit.org/show_bug.cgi?id=180358
        <rdar://problem/34436124>

        Reviewed by Dean Jackson.

        To compute the bounds of the media controls, we would call getBoundingClientRect()
        on the root-most element in the shadow root, which is styled to have width and height
        set to 100%, which allows to match the metrics of the host media element, without
        the borders.

        However, if the host media element has CSS transforms applied, these would be factored
        into calls to getBoundingClientRect() and the controls would be too large and clipped,
        in case the scale was more than 1, or shrunk, in case the scale was less than 1.

        To obtain correct metrics, we computed the complete transformation matrix applied to
        the host media element, and apply its inverted matrix to each corner point of the
        bounds returned for the root-most container element in the shadow root.

        Then we compute the width and height of this transformed rectangle and set those to
        be our media controls' metrics.

        Test: media/modern-media-controls/css/transformed-media.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._updateControlsSize):
        (MediaController.prototype._controlsWidth): Deleted.

2017-12-04  Antoine Quint  <graouts@apple.com>

        Cursor is not visible after exiting full screen video
        https://bugs.webkit.org/show_bug.cgi?id=180247
        <rdar://problem/33885922>

        Reviewed by Dean Jackson.

        There is a dedicated NSCursor method to temporarily hide the mouse cursor while the mouse is idle,
        so we use this platform functionality, already exposed through the page chrome, instead which
        implements the expected behavior. Now, the mouse cursor is hidden while the mouse is stationary
        when a <video> is fullscreen, as before, but as soon as the user exits fullscreen, the mouse cursor
        reappears.

        No test provided as I don't believe this platform behavior can be tested, there is no API to query
        whether the cursor is visible.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::cancelAutoHideCursorTimer):
        (WebCore::EventHandler::autoHideCursorTimerFired):

2017-12-04  Chris Dumez  <cdumez@apple.com>

        ServiceWorkerGlobalScope::skipWaiting(Ref<DeferredPromise>&&) is unsafe
        https://bugs.webkit.org/show_bug.cgi?id=180372

        Reviewed by Youenn Fablet.

        Ref the WorkerThread and capture it in the lambda. Keep the pending promises in
        a HashMap on the ServiceWorkerGlobalScope so that they stay on the worker thread.

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::skipWaiting):
        * workers/service/ServiceWorkerGlobalScope.h:

2017-12-04  Brady Eidson  <beidson@apple.com>

        Get a directory path to SWServers for storing ServiceWorker registrations.
        https://bugs.webkit.org/show_bug.cgi?id=180362

        Reviewed by Chris Dumez.

        No new tests (No observable behavior change yet).

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

2017-12-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: provide method for recording CanvasRenderingContext2D from JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=175166
        <rdar://problem/34040740>

        Reviewed by Joseph Pecoraro.

        No new tests, updated existing tests.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::resetRecordingData):

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):

        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::consoleStartRecordingCanvas):
        (WebCore::InspectorInstrumentation::consoleStartRecordingCanvasImpl):

        * page/PageConsoleClient.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::record):
        (WebCore::PageConsoleClient::recordEnd):

        * workers/WorkerConsoleClient.h:
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::record):
        (WebCore::WorkerConsoleClient::recordEnd):

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

        Call "Terminate Service Worker" on all workers when all their clients are gone
        https://bugs.webkit.org/show_bug.cgi?id=179552

        Reviewed by Chris Dumez.

        Tested manually.

        When SWServer detects that there is no longer any client for a given client origin,
        it iterates through the running workers to terminate them if they have the given client origin.
        A timer of 60 seconds is used in case a user closes a tab or a window, and reopens one with the same origin shortly after.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::findClientByIdentifier):
        (WebCore::SWServer::matchAll):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        * workers/service/server/SWServer.h:

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

        Enable selector filtering for ::before and ::after pseudo element resolution
        https://bugs.webkit.org/show_bug.cgi?id=180364

        Reviewed by Ryosuke Niwa.

        Since these pseudo elements are now resolved by TreeResolver we can use selector filter for them.

        This is 10%+ progression in StyleBench pseudo element subtest.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pseudoStyleForElement):
        * css/StyleResolver.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

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

        Add support https://w3c.github.io/ServiceWorker/#on-client-unload-algorithm
        https://bugs.webkit.org/show_bug.cgi?id=180359

        Reviewed by Chris Dumez.

        This algorithm is needed for implementation of claim.
        As per specification, it is run for every client unload, hence why this is put in removeClientUsingRegistration.

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::removeClientUsingRegistration):
        (WebCore::SWServerRegistration::handleClientUnload):
        * workers/service/server/SWServerRegistration.h:

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

        Remove duplicates from selector filter hashes
        https://bugs.webkit.org/show_bug.cgi?id=180354

        Reviewed by Simon Fraser.

        We have only four slots for hashes in RuleSet and adding more regresses performance. To use the limited slots
        better we should eliminate duplicates.

        This patch also switches to using std::array instead of a C array for the hashes.

        The patch reduces the number of selectors passing through the selector filter in StyleBench by ~0.4%.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        * css/RuleSet.h:
        (WebCore::RuleData::descendantSelectorIdentifierHashes const):
        * css/SelectorFilter.cpp:
        (WebCore::collectDescendantSelectorIdentifierHashes):
        (WebCore::SelectorFilter::collectIdentifierHashes):
        * css/SelectorFilter.h:
        (WebCore::SelectorFilter::fastRejectSelector const):

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

        WorkerCacheStorageConnection should handle the case of terminated workers
        https://bugs.webkit.org/show_bug.cgi?id=180304

        Reviewed by Chris Dumez.

        No web page observable change of behavior.

        Reworked WorkerCacheStorageConnection hopping.
        Instead of refing/unrefing itself, it refs the worker thread and the main thread connection.
        This worker thread is then used on the way back from the main thread.

        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::create):
        (WebCore::WorkerCacheStorageConnection::WorkerCacheStorageConnection):
        (WebCore::WorkerCacheStorageConnection::doOpen):
        (WebCore::WorkerCacheStorageConnection::doRemove):
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        (WebCore::WorkerCacheStorageConnection::reference):
        (WebCore::WorkerCacheStorageConnection::dereference):
        (WebCore::WorkerCacheStorageConnection::doRetrieveRecords):
        (WebCore::WorkerCacheStorageConnection::doBatchDeleteOperation):
        (WebCore::WorkerCacheStorageConnection::doBatchPutOperation):
        * Modules/cache/WorkerCacheStorageConnection.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::cacheStorageConnection):
        * workers/WorkerGlobalScope.h:

2017-12-04  Frederic Wang  <fwang@igalia.com>

        Make ScrollingTreeNode::enclosingFrameNode return the node itself for frame nodes
        https://bugs.webkit.org/show_bug.cgi?id=180353

        Reviewed by Antonio Gomes.

        This function was introduced in bug 175135 to solve a rendering bug with fixed positioned
        nodes in overflow nodes. For a frame node, the reference frame to use for fixed nodes is
        actually the frame node itself or otherwise we will get the same rendering bug. This patch
        makes enclosingFrameNode return the node itself when it is a frame node and renames it to
        clarify this behavior. Currently, enclosingFrameNode is not used for frame nodes so the
        behavior is unchanged.

        No new tests, behavior is unchanged.

        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::enclosingFrameNodeIncludingSelf): Start the search from a frame
        scrolling node from the node itself. Renamed to make explicit that this function may include
        the node itself.
        * page/scrolling/ScrollingTreeNode.h: Renamed.

2017-12-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Implement PAL::SleepDisabler
        https://bugs.webkit.org/show_bug.cgi?id=178485

        Reviewed by Carlos Garcia Campos.

        Add a comment to warn about some odd use of SleepDisabler in HTMLMediaElement.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldDisableSleep const):

2017-12-04  Frederic Wang  <fwang@igalia.com>

        Bug 161300 - Move RenderMathMLRoot:RootType and RenderMathMLScripts:ScriptsType to element classes
        https://bugs.webkit.org/show_bug.cgi?id=161300

        Reviewed by Darin Adler.

        RenderMathMLRoot::m_kind and RenderMathMLScripts::m_scriptType are initialized in the
        constructors of the renderer classes from the tag name of the corresponding elements.
        This patch moves them into the corresponding element classes and makes them const members
        parsed in the constructors. It also introduces a MathMLRootElement class deriving from
        MathMLRowElement to store the new member. Finally, the types are redefined as enum classes.

        No new tests, behavior unchanged and already covered by existing tests.

        * Sources.txt: Add MathMLRootElement files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * mathml/MathMLAllInOne.cpp: Ditto.
        * mathml/MathMLRootElement.cpp:
        (WebCore::element): Override this function to downcast to MathMLRootElement.
        (WebCore::rootTypeOf): Helper function to parse the root type, moved from RenderMathMLRoot.
        (WebCore::MathMLRootElement::MathMLRootElement): Initialize the root type.
        (WebCore::MathMLRootElement::create):
        (WebCore::MathMLRootElement::createElementRenderer): Moved from MathMLRowElement.
        * mathml/MathMLRootElement.h: New class deriving from MathMLRowElement, with a RootType
        member exposed to the renderer class.
        * mathml/MathMLRowElement.cpp: Remove header for RenderMathMLRoot.h.
        (WebCore::MathMLRowElement::createElementRenderer): Moved to MathMLRootElement.
        * mathml/MathMLScriptsElement.cpp: Introduce a script type.
        (WebCore::scriptTypeOf): Helper function to parse the script type, moved from
        RenerMathMLScripts.
        (WebCore::MathMLScriptsElement::MathMLScriptsElement): Initialize the script type.
        * mathml/MathMLScriptsElement.h: Add new script type member.
        (WebCore::MathMLScriptsElement::scriptType const): Expose the script type to the renderer
        class.
        * mathml/mathtags.in: Map <msqrt> and <mroot> to MathMLRootElement.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::RenderMathMLRoot): Use MathMLRootElement and remove parsing of
        the root type.
        (WebCore::RenderMathMLRoot::rootType const): Helper function to access the root type from
        the element class.
        (WebCore::RenderMathMLRoot::isValid const): Use rootType() and add prefix for enum class
        values.
        (WebCore::RenderMathMLRoot::getBase const): Ditto.
        (WebCore::RenderMathMLRoot::getIndex const): Ditto.
        (WebCore::RenderMathMLRoot::horizontalParameters): Ditto.
        (WebCore::RenderMathMLRoot::verticalParameters): Ditto.
        (WebCore::RenderMathMLRoot::computePreferredLogicalWidths): Ditto.
        (WebCore::RenderMathMLRoot::layoutBlock): Ditto.
        (WebCore::RenderMathMLRoot::paint): Ditto.
        * rendering/mathml/RenderMathMLRoot.h: Define root type as an enum class, replace
        MathMLRowElement with MathMLRootElement, declare and use new rootType() function and remove
        the m_kind member.
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::RenderMathMLScripts): Remove parsing of script type.
        (WebCore::RenderMathMLScripts::scriptType const): Helper function to access the script type
        from the element class.
        (WebCore::RenderMathMLScripts::validateAndGetReferenceChildren): Use scriptType() and add
        prefix for enum class values.
        (WebCore::RenderMathMLScripts::computePreferredLogicalWidths): Ditto.
        (WebCore::RenderMathMLScripts::verticalMetrics): Ditto.
        (WebCore::RenderMathMLScripts::layoutBlock): Ditto.
        * rendering/mathml/RenderMathMLScripts.h: Define root type as an enum class, declare the
        scriptType() function and remove the m_scriptType member.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::isValid const): Use scriptType() and add prefix for enum
        class values.
        (WebCore::RenderMathMLUnderOver::under const): Ditto.
        (WebCore::RenderMathMLUnderOver::over const): Ditto.
        (WebCore::RenderMathMLUnderOver::computePreferredLogicalWidths): Ditto.
        (WebCore::RenderMathMLUnderOver::hasAccent const): Ditto.
        (WebCore::RenderMathMLUnderOver::layoutBlock): Ditto.

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

        [GStreamer] More leaks in TextCombinerGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=180331

        Reviewed by Michael Catanzaro.

        I've noticed more leaks reading the code, but I couldn't check them with valgrind, because I don't know how to
        trigger that code path. This patch cleans up the file using smart pointer everywhere.

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkit_text_combiner_pad_init):
        (webkitTextCombinerPadEvent):
        (webkitTextCombinerReleasePad):

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

        Include 'video/*' in image request Accept header if browser supports video media in image contexts.
        https://bugs.webkit.org/show_bug.cgi?id=179178

        Reviewed by Alex Christensen.

        Test: http/tests/images/image-supports-video.html

        Ensure that 'video/*' is included in the Accept header by asking the ImageDecoder whether "Video"
        media is supported. The ImageDecoder will ask all it's constituent decoders, which aside from
        ImageDecoderAVFObjC will say only support the "Image" media type.

        Drive-by fix: Make sure the MIMETypeRegistry includes all the types supported by AVFoundation when
        ImageDecoderAVFObjC is enabled. Also, now that Image reports it can support video mime types, check
        whether MediaDocument can support a given mime type before asking ImageDocument.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::isSupportedType):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::acceptHeaderValueFromType):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageOrSVGMIMEType): Deleted.
        * platform/MIMETypeRegistry.h:
        * platform/graphics/ImageDecoder.cpp:
        (WebCore::ImageDecoder::supportsMediaType):
        * platform/graphics/ImageDecoder.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        (WebCore::ImageDecoderAVFObjC::supportsMediaType):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::supportsContentType):
        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/image-decoders/ScalableImageDecoder.h:
        (WebCore::ScalableImageDecoder::supportsMediaType):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):

2017-12-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        WTF shouldn't have both Thread and ThreadIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=180308

        Reviewed by Darin Adler.

        No behavior change.

        * Modules/indexeddb/IDBActiveDOMObject.h:
        (WebCore::IDBActiveDOMObject::originThread const):
        (WebCore::IDBActiveDOMObject::performCallbackOnOriginThread):
        (WebCore::IDBActiveDOMObject::callFunctionOnOriginThread):
        (WebCore::IDBActiveDOMObject::originThreadID const): Deleted.
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::~IDBCursor):
        (WebCore::IDBCursor::sourcesDeleted const):
        (WebCore::IDBCursor::transaction const):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::advance):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::uncheckedIterateCursor):
        (WebCore::IDBCursor::deleteFunction):
        (WebCore::IDBCursor::setGetResult):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::~IDBDatabase):
        (WebCore::IDBDatabase::hasPendingActivity const):
        (WebCore::IDBDatabase::name const):
        (WebCore::IDBDatabase::version const):
        (WebCore::IDBDatabase::objectStoreNames const):
        (WebCore::IDBDatabase::renameObjectStore):
        (WebCore::IDBDatabase::renameIndex):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::transaction):
        (WebCore::IDBDatabase::deleteObjectStore):
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::connectionToServerLost):
        (WebCore::IDBDatabase::maybeCloseInServer):
        (WebCore::IDBDatabase::activeDOMObjectName const):
        (WebCore::IDBDatabase::canSuspendForDocumentSuspension const):
        (WebCore::IDBDatabase::stop):
        (WebCore::IDBDatabase::startVersionChangeTransaction):
        (WebCore::IDBDatabase::didStartTransaction):
        (WebCore::IDBDatabase::willCommitTransaction):
        (WebCore::IDBDatabase::didCommitTransaction):
        (WebCore::IDBDatabase::willAbortTransaction):
        (WebCore::IDBDatabase::didAbortTransaction):
        (WebCore::IDBDatabase::didCommitOrAbortTransaction):
        (WebCore::IDBDatabase::fireVersionChangeEvent):
        (WebCore::IDBDatabase::dispatchEvent):
        (WebCore::IDBDatabase::didCreateIndexInfo):
        (WebCore::IDBDatabase::didDeleteIndexInfo):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::IDBIndex):
        (WebCore::IDBIndex::~IDBIndex):
        (WebCore::IDBIndex::name const):
        (WebCore::IDBIndex::setName):
        (WebCore::IDBIndex::objectStore):
        (WebCore::IDBIndex::keyPath const):
        (WebCore::IDBIndex::unique const):
        (WebCore::IDBIndex::multiEntry const):
        (WebCore::IDBIndex::rollbackInfoForVersionChangeAbort):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::doCount):
        (WebCore::IDBIndex::doGet):
        (WebCore::IDBIndex::doGetKey):
        (WebCore::IDBIndex::getAll):
        (WebCore::IDBIndex::getAllKeys):
        (WebCore::IDBIndex::markAsDeleted):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::~IDBObjectStore):
        (WebCore::IDBObjectStore::name const):
        (WebCore::IDBObjectStore::setName):
        (WebCore::IDBObjectStore::keyPath const):
        (WebCore::IDBObjectStore::indexNames const):
        (WebCore::IDBObjectStore::transaction):
        (WebCore::IDBObjectStore::autoIncrement const):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::getKey):
        (WebCore::IDBObjectStore::putOrAdd):
        (WebCore::IDBObjectStore::doDelete):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::doCount):
        (WebCore::IDBObjectStore::getAll):
        (WebCore::IDBObjectStore::getAllKeys):
        (WebCore::IDBObjectStore::markAsDeleted):
        (WebCore::IDBObjectStore::rollbackForVersionChangeAbort):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::~IDBOpenDBRequest):
        (WebCore::IDBOpenDBRequest::onError):
        (WebCore::IDBOpenDBRequest::versionChangeTransactionDidFinish):
        (WebCore::IDBOpenDBRequest::fireSuccessAfterVersionChangeCommit):
        (WebCore::IDBOpenDBRequest::fireErrorAfterVersionChangeCompletion):
        (WebCore::IDBOpenDBRequest::dispatchEvent):
        (WebCore::IDBOpenDBRequest::onSuccess):
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore::IDBOpenDBRequest::onDeleteDatabaseSuccess):
        (WebCore::IDBOpenDBRequest::requestCompleted):
        (WebCore::IDBOpenDBRequest::requestBlocked):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore:: const):
        (WebCore::IDBRequest::setSource):
        (WebCore::IDBRequest::setVersionChangeTransaction):
        (WebCore::IDBRequest::transaction const):
        (WebCore::IDBRequest::sourceObjectStoreIdentifier const):
        (WebCore::IDBRequest::sourceIndexIdentifier const):
        (WebCore::IDBRequest::requestedObjectStoreRecordType const):
        (WebCore::IDBRequest::requestedIndexRecordType const):
        (WebCore::IDBRequest::eventTargetInterface const):
        (WebCore::IDBRequest::activeDOMObjectName const):
        (WebCore::IDBRequest::canSuspendForDocumentSuspension const):
        (WebCore::IDBRequest::hasPendingActivity const):
        (WebCore::IDBRequest::stop):
        (WebCore::IDBRequest::enqueueEvent):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        (WebCore::IDBRequest::setResult):
        (WebCore::IDBRequest::setResultToStructuredClone):
        (WebCore::IDBRequest::setResultToUndefined):
        (WebCore::IDBRequest::resultCursor):
        (WebCore::IDBRequest::willIterateCursor):
        (WebCore::IDBRequest::didOpenOrIterateCursor):
        (WebCore::IDBRequest::completeRequestAndDispatchEvent):
        (WebCore::IDBRequest::onError):
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::~IDBTransaction):
        (WebCore::IDBTransaction::objectStoreNames const):
        (WebCore::IDBTransaction::db):
        (WebCore::IDBTransaction::error const):
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::abortDueToFailedRequest):
        (WebCore::IDBTransaction::transitionedToFinishing):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::internalAbort):
        (WebCore::IDBTransaction::abortOnServerAndCancelRequests):
        (WebCore::IDBTransaction::activeDOMObjectName const):
        (WebCore::IDBTransaction::canSuspendForDocumentSuspension const):
        (WebCore::IDBTransaction::hasPendingActivity const):
        (WebCore::IDBTransaction::stop):
        (WebCore::IDBTransaction::isActive const):
        (WebCore::IDBTransaction::isFinishedOrFinishing const):
        (WebCore::IDBTransaction::addRequest):
        (WebCore::IDBTransaction::removeRequest):
        (WebCore::IDBTransaction::scheduleOperation):
        (WebCore::IDBTransaction::schedulePendingOperationTimer):
        (WebCore::IDBTransaction::pendingOperationTimerFired):
        (WebCore::IDBTransaction::operationCompletedOnServer):
        (WebCore::IDBTransaction::scheduleCompletedOperationTimer):
        (WebCore::IDBTransaction::completedOperationTimerFired):
        (WebCore::IDBTransaction::commit):
        (WebCore::IDBTransaction::commitOnServer):
        (WebCore::IDBTransaction::finishAbortOrCommit):
        (WebCore::IDBTransaction::didStart):
        (WebCore::IDBTransaction::notifyDidAbort):
        (WebCore::IDBTransaction::didAbort):
        (WebCore::IDBTransaction::didCommit):
        (WebCore::IDBTransaction::fireOnComplete):
        (WebCore::IDBTransaction::fireOnAbort):
        (WebCore::IDBTransaction::enqueueEvent):
        (WebCore::IDBTransaction::dispatchEvent):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::createObjectStoreOnServer):
        (WebCore::IDBTransaction::didCreateObjectStoreOnServer):
        (WebCore::IDBTransaction::renameObjectStore):
        (WebCore::IDBTransaction::renameObjectStoreOnServer):
        (WebCore::IDBTransaction::didRenameObjectStoreOnServer):
        (WebCore::IDBTransaction::createIndex):
        (WebCore::IDBTransaction::createIndexOnServer):
        (WebCore::IDBTransaction::didCreateIndexOnServer):
        (WebCore::IDBTransaction::renameIndex):
        (WebCore::IDBTransaction::renameIndexOnServer):
        (WebCore::IDBTransaction::didRenameIndexOnServer):
        (WebCore::IDBTransaction::requestOpenCursor):
        (WebCore::IDBTransaction::doRequestOpenCursor):
        (WebCore::IDBTransaction::openCursorOnServer):
        (WebCore::IDBTransaction::didOpenCursorOnServer):
        (WebCore::IDBTransaction::iterateCursor):
        (WebCore::IDBTransaction::iterateCursorOnServer):
        (WebCore::IDBTransaction::didIterateCursorOnServer):
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::requestGetAllIndexRecords):
        (WebCore::IDBTransaction::getAllRecordsOnServer):
        (WebCore::IDBTransaction::didGetAllRecordsOnServer):
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestGetValue):
        (WebCore::IDBTransaction::requestGetKey):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::getRecordOnServer):
        (WebCore::IDBTransaction::didGetRecordOnServer):
        (WebCore::IDBTransaction::requestCount):
        (WebCore::IDBTransaction::getCountOnServer):
        (WebCore::IDBTransaction::didGetCountOnServer):
        (WebCore::IDBTransaction::requestDeleteRecord):
        (WebCore::IDBTransaction::deleteRecordOnServer):
        (WebCore::IDBTransaction::didDeleteRecordOnServer):
        (WebCore::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBTransaction::clearObjectStoreOnServer):
        (WebCore::IDBTransaction::didClearObjectStoreOnServer):
        (WebCore::IDBTransaction::requestPutOrAdd):
        (WebCore::IDBTransaction::putOrAddOnServer):
        (WebCore::IDBTransaction::didPutOrAddOnServer):
        (WebCore::IDBTransaction::deleteObjectStore):
        (WebCore::IDBTransaction::deleteObjectStoreOnServer):
        (WebCore::IDBTransaction::didDeleteObjectStoreOnServer):
        (WebCore::IDBTransaction::deleteIndex):
        (WebCore::IDBTransaction::deleteIndexOnServer):
        (WebCore::IDBTransaction::didDeleteIndexOnServer):
        (WebCore::IDBTransaction::operationCompletedOnClient):
        (WebCore::IDBTransaction::establishOnServer):
        (WebCore::IDBTransaction::activate):
        (WebCore::IDBTransaction::deactivate):
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::removeItemsMatchingCurrentThread):
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::~TransactionOperation):
        (WebCore::IDBClient::TransactionOperation::perform):
        (WebCore::IDBClient::TransactionOperation::transitionToCompleteOnThisThread):
        (WebCore::IDBClient::TransactionOperation::transitionToComplete):
        (WebCore::IDBClient::TransactionOperation::doComplete):
        (WebCore::IDBClient::TransactionOperation::originThread const):
        (WebCore::IDBClient::TransactionOperation::originThreadID const): Deleted.
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::lock):
        (WebCore::AudioContext::tryLock):
        (WebCore::AudioContext::unlock):
        (WebCore::AudioContext::isAudioThread const):
        (WebCore::AudioContext::isGraphOwner const):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::setAudioThread):
        (WebCore::AudioContext::audioThread const):
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::render):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performClose):
        (WebCore::Database::securityOrigin):
        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::operator=):
        (WebCore::DatabaseDetails::thread const):
        (WebCore::DatabaseDetails::threadID const): Deleted.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        * Modules/webdatabase/DatabaseThread.h:
        (WebCore::DatabaseThread::getThread):
        (WebCore::DatabaseThread::getThreadID): Deleted.
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        (WebCore::JSCallbackData::~JSCallbackData):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::createdMessagePort):
        (WebCore::ScriptExecutionContext::destroyedMessagePort):
        * page/ResourceUsageOverlay.h:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::isCurrentThread):
        * platform/Supplementable.h:
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::removeSupplement):
        (WebCore::Supplementable::requireSupplement):
        (WebCore::Supplementable::Supplementable): Deleted.
        * platform/Timer.cpp:
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::start):
        (WebCore::TimerBase::stop):
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:
        (WebCore::TimerBase::isActive const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::shouldAutoActivateFontIfNeeded):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::activateOnCompositingThread):
        (WebCore::TextureMapperPlatformLayerProxy::invalidate):
        (WebCore::TextureMapperPlatformLayerProxy::getAvailableBuffer):
        (WebCore::TextureMapperPlatformLayerProxy::appendToUnusedBuffers):
        (WebCore::TextureMapperPlatformLayerProxy::swapBuffer):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        (): Deleted.
        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread):
        (StartWebThread):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::close):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle const):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::isContextThread const):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::~WorkerMessagingProxy):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::runCleanupTasks):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::thread const):
        (WebCore::WorkerThread::threadID const): Deleted.
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireUpdateFoundEvent):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireControllerChangeEvent):
        (WebCore::ServiceWorkerContainer::contextIdentifier):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::~ServiceWorkerJob):
        (WebCore::ServiceWorkerJob::failedWithException):
        (WebCore::ServiceWorkerJob::resolvedWithRegistration):
        (WebCore::ServiceWorkerJob::resolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerJob::startScriptFetch):
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        (WebCore::ServiceWorkerJob::notifyFinished):
        * workers/service/ServiceWorkerJob.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::matchFunc):
        (WebCore::openFunc):
        (WebCore::initializeXMLParser):
        (WebCore::XMLParserContext::createStringParser):
        (WebCore::XMLParserContext::createMemoryParser):

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

        WebSocketChannel should ensure its client is live when calling it in error case
        https://bugs.webkit.org/show_bug.cgi?id=180285

        Reviewed by Darin Adler.

        No observable change of behavior.
        This makes it consistent with other calls of didReceiveMessageError.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):

2017-12-03  Alexey Proskuryakov  <ap@apple.com>

        WebArchiveResourceWebResourceHandler leaks when pasting
        https://bugs.webkit.org/show_bug.cgi?id=180339

        Reviewed by Joseph Pecoraro.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attributesForAttributedStringConversion):

2017-12-03  Chris Dumez  <cdumez@apple.com>

        Support serviceWorker.postMessage() inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180328

        Reviewed by Darin Adler.

        Support serviceWorker.postMessage() inside service workers.

        No new tests, unskipped and rebaselined existing test that is
        now passing.

        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorker):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::fireMessageEvent):
        (WebCore::ServiceWorkerThread::postMessageToServiceWorker):
        * workers/service/context/ServiceWorkerThread.h:

2017-12-03  Chris Dumez  <cdumez@apple.com>

        Implement self.skipWaiting() inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180329

        Reviewed by Darin Adler.

        Implement self.skipWaiting() inside service workers:
        - https://w3c.github.io/ServiceWorker/#service-worker-global-scope-skipwaiting

        Also fixes a bug where tryActivate() was calling activate() even though the
        registration's active worker was "in use":
        - https://w3c.github.io/ServiceWorker/#try-activate-algorithm

        No new tests, rebaselined existing tests.

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::skipWaiting):
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::tryActivate):
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::skipWaiting):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::skipWaiting):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::isSkipWaitingFlagSet const):

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

        [GStreamer] GstPad leaked in WebKitTextCombiner
        https://bugs.webkit.org/show_bug.cgi?id=180314

        Reviewed by Michael Catanzaro.

        gst_element_get_static_pad() returns a full reference that si never freed, because gst_ghost_pad_new doesn't
        take the ownership of the given pad.

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkit_text_combiner_init):

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

        [GStreamer] GstCaps leaked in MediaPlayerPrivateGStreamer::createGSTPlayBin
        https://bugs.webkit.org/show_bug.cgi?id=180311

        Reviewed by Michael Catanzaro.

        gst_caps_new_empty_simple() is passed directly to g_object_set(). The returned caps should be freed with
        gst_caps_unref().

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

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

        Move registration activation and clearing from SWServerJobQueue to SWServerRegistration
        https://bugs.webkit.org/show_bug.cgi?id=180325

        Reviewed by Chris Dumez.

        No change of behavior.

        These algorithms fit naturally in SWServerRegistration and will be used as part of clients.claim.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::didFinishActivation):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::didFinishInstall):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        (WebCore::SWServerJobQueue::tryActivate): Deleted.
        (WebCore::SWServerJobQueue::activate): Deleted.
        (WebCore::SWServerJobQueue::didFinishActivation): Deleted.
        (WebCore::SWServerJobQueue::tryClearRegistration): Deleted.
        (WebCore::clearRegistrationWorker): Deleted.
        (WebCore::SWServerJobQueue::clearRegistration): Deleted.
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::tryClear):
        (WebCore::clearRegistrationWorker):
        (WebCore::SWServerRegistration::clear):
        (WebCore::SWServerRegistration::tryActivate):
        (WebCore::SWServerRegistration::activate):
        (WebCore::SWServerRegistration::didFinishActivation):
        * workers/service/server/SWServerRegistration.h:

2017-12-02  Chris Dumez  <cdumez@apple.com>

        Support container.register() / registration.unregister() /  inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180326

        Reviewed by Youenn Fablet.

        Support container.register() / registration.unregister() /  inside service workers.
        This is mostly about removing the is<Document>() checks and adding testing given
        that most of the work was done in r225455.

        Test: http/tests/workers/service/ServiceWorkerGlobalScope_register.html

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::update):
        (WebCore::ServiceWorkerRegistration::unregister):

2017-12-02  Chris Dumez  <cdumez@apple.com>

        Support serviceWorkerRegistration.update() inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180215

        Reviewed by Darin Adler.

        Support serviceWorkerRegistration.update() inside service workers. The code paths
        for job scheduling and resolution have been made thread safe by hopping to the right
        thread when necessary. In particular, ServiceWorkerContainer always makes sure to to
        a callOnMainThread() before calling methods on the SWClientConnection. Also, the
        SWClientConnection relies on a new postTaskTo() method before calling methods on the
        job.

        Test: http/tests/workers/service/self_registration_update.html

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::finishedFetchingScript):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::jobRejectedInServer):
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::updateWorkerState):
        (WebCore::SWClientConnection::fireUpdateFoundEvent):
        (WebCore::SWClientConnection::notifyClientsOfControllerChange):
        (WebCore::SWClientConnection::clearPendingJobs):
        (WebCore::SWClientConnection::postTaskTo):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireUpdateFoundEvent):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireControllerChangeEvent):
        (WebCore::ServiceWorkerContainer::contextIdentifier):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::ServiceWorkerJob):
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::contextIdentifier):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::update):
        * workers/service/ServiceWorkerTypes.h:

2017-12-02  Simon Fraser  <simon.fraser@apple.com>

        Make IOSurface::Locker and use it in ImageBufferDataCG
        https://bugs.webkit.org/show_bug.cgi?id=180317

        Reviewed by Zalan Bujtas.

        Add an RAII IOSurface::Locker which can lock readonly or readwrite. Access
        to the IOSurface base address is through the locker.
        
        Add IOSurface::bytesPerRow() to wrap IOSurfaceGetBytesPerRow().
        
        After this, there is only one location where we access the IOSurfaceRef
        directly, in WebGL code.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::toBGRAData const):
        (WebCore::ImageBufferData::getData const):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::bytesPerRow const):

2017-12-02  Simon Fraser  <simon.fraser@apple.com>

        Add an AlphaPremultiplication enum and use it consistently
        https://bugs.webkit.org/show_bug.cgi?id=180316

        Reviewed by Zalan Bujtas.

        ImageBuffer-related code sometimes used the 'Multiply' enum, and sometimes
        a bool to represent alpha premultiplication. Make an enum class and use it
        everywhere. Re-order and rename some parameters to clarify the meaning of this
        argument.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::putImageData):
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::operator<<):
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::genericConvertToLuminanceMask):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurShadowBuffer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData const):
        (WebCore::ImageBuffer::getPremultipliedImageData const):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData const):
        (WebCore::ImageBuffer::getPremultipliedImageData const):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData const):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::imageBufferResult):
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData const):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/win/ImageBufferDataDirect2D.h:
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData const):
        (WebCore::ImageBuffer::getPremultipliedImageData const):
        (WebCore::ImageBuffer::putByteArray):

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

        Implement https://w3c.github.io/ServiceWorker/#clients-getall
        https://bugs.webkit.org/show_bug.cgi?id=180276

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/serviceworkerclients-matchAll.https.html

        Move Clients QueryOptions to its own class since it is used by various parties.
        Add encoder/decoder routines.

        Add a ServieWorkerClientInformation which replaces SWServer::ClientInformation structure.
        This is what is sent back as a result to matchAll requests.
        Add encoder/decoder routines.

        Implement matchAll by hopping to the main thread, making IPC to the storage process.
        SWServer in storage process then iterates through the relevant service workers and does some filtering.
        Additional filtering and information should be gathered in future patches to fully implement the algorithm.

        Add to SWServer a HashMap to easily identify by which service worker a client is controlled, if any.
        This map is updated at the same time registrations are updated.

        matchAll is given a callback as in the future, window client information will be retrieved asynchronously.

        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorkerClientInformation.h: Added.
        (WebCore::ServiceWorkerClientInformation::isolatedCopy const):
        (WebCore::ServiceWorkerClientInformation::encode const):
        (WebCore::ServiceWorkerClientInformation::decode):
        * workers/service/ServiceWorkerClientQueryOptions.h: Added.
        (WebCore::ServiceWorkerClientQueryOptions::encode const):
        (WebCore::ServiceWorkerClientQueryOptions::decode):
        * workers/service/ServiceWorkerClients.cpp:
        (WebCore::ServiceWorkerClients::matchAll):
        * workers/service/ServiceWorkerClients.h:
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::matchAll):
        (WebCore::SWServer::registerServiceWorkerClient):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::matchAll):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::matchAll):
        * workers/service/server/SWServerWorker.h:

2017-12-02  Brady Eidson  <beidson@apple.com>

        Factor out the "databaseTaskQueue" parts of IDBServer into something reusable.
        https://bugs.webkit.org/show_bug.cgi?id=180298

        Reviewed by Chris Dumez.

        No new tests (Refactor only).

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::IDBServer):
        (WebCore::IDBServer::IDBServer::postDatabaseTask):
        (WebCore::IDBServer::IDBServer::postDatabaseTaskReply):
        (WebCore::IDBServer::IDBServer::databaseRunLoop): Deleted.
        (WebCore::IDBServer::IDBServer::handleTaskRepliesOnMainThread): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        (): Deleted.

2017-12-02  Simon Fraser  <simon.fraser@apple.com>

        Add a log channel for viewports
        https://bugs.webkit.org/show_bug.cgi?id=180295

        Reviewed by Zalan Bujtas.

        Add a "Viewports" log channel to log viewport scaling information, and enhance the
        WebKit "VisibleRects" channel to log additional data for the same reason.

        * dom/Document.cpp:
        (WebCore::Document::processViewport):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::completed):
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbarsAndClearContentsSize):
        (WebCore::FrameView::scrollToAnchor):
        (WebCore::FrameView::maintainScrollPositionAtAnchor):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::autoSizeIfEnabled):
        (WebCore::FrameView::setWasScrolledByUser):
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layout):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setContentsSize):
        (WebCore::ViewportConfiguration::setViewportArguments):
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::operator<<):
        (WebCore::ViewportConfiguration::description const):
        (WebCore::ViewportConfiguration::dump const):
        * page/ViewportConfiguration.h:
        * platform/Logging.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFixedLayoutSize):

2017-12-01  Alicia Boya García  <aboya@igalia.com>

        [MSE] Use correct range end checks in sourceBufferPrivateDidReceiveSample()
        https://bugs.webkit.org/show_bug.cgi?id=179690

        Reviewed by Jer Noble.

        The Coded Frame Processing algorithm as defined in
        https://www.w3.org/TR/media-source/#sourcebuffer-coded-frame-processing states:

        1.14. Remove existing coded frames in track buffer:
         -> If highest end timestamp for track buffer is not set:
               [...]
         -> If highest end timestamp for track buffer is set and less than or
            equal to presentation timestamp:
               Remove all coded frames from track buffer that have a
               presentation timestamp greater than or equal to highest end
               timestamp and less than frame end timestamp.

        Note the removal range is closed-open [a, b). WebKit is actually removing
        frames using an open-closed range (a, b], which causes frames not to be removed
        in situations where they should and frames to be removed in situations when
        they should not.

        Tests: media/media-source/media-source-range-end-frame-not-removed.html
               media/media-source/media-source-range-start-frame-replaced.html

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::PresentationOrderSampleMap::findSamplesBetweenPresentationTimesFromEnd):
        * Modules/mediasource/SampleMap.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2017-12-01  Simon Fraser  <simon.fraser@apple.com>

        Reduce the number of calls to ViewportConfiguration::updateConfiguration()
        https://bugs.webkit.org/show_bug.cgi?id=180299

        Reviewed by Zalan Bujtas.

        There are several calls to ViewportConfiguration::setDefaultConfiguration() during loading
        with the same arguments. We can avoid unnecessary calls to updateConfiguration() by returning
        early if the configuration hasn't changed.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setDefaultConfiguration):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::Parameters::operator== const):

2017-12-01  Aishwarya Nirmal  <anirmal@apple.com>

        [Touch Bar Web API] Object representing Touch Bar Menu to send between Web and UI Processes
        https://bugs.webkit.org/show_bug.cgi?id=179714

        Reviewed by Wenson Hsieh.

        These changes allow the HTMLMenuElement and HTMLMenuItemElement to parse attributes relating
        to the touch bar and convey changes to the elements that will eventually be propogated to the
        UI process.

        No new tests at this point because the changes to HTMLMenuElement and HTMLMenuItemElement are
        new properties, which might not be worth testing, and overriden methods for insertedIntoAncestor
        and removedFromAncestor, which are involved in sending a message to a UI process but might be
        difficult to test at this point since the UI process only receives (and does not yet process)
        the message.

        * html/HTMLMenuElement.cpp:
        (WebCore::HTMLMenuElement::insertedIntoAncestor):
        (WebCore::HTMLMenuElement::removedFromAncestor):
        (WebCore::HTMLMenuElement::parseAttribute):
        * html/HTMLMenuElement.h:
        * html/HTMLMenuItemElement.cpp:
        (WebCore::HTMLMenuItemElement::insertedIntoAncestor):
        (WebCore::HTMLMenuItemElement::removedFromAncestor):
        * html/HTMLMenuItemElement.h:
        * page/ChromeClient.h:

2017-12-01  Daniel Bates  <dabates@apple.com>

        AlternativePresentationButtonSubstitution::unapply() may not undo substitution
        https://bugs.webkit.org/show_bug.cgi?id=180279
        <rdar://problem/35800599>

        Reviewed by Simon Fraser.

        Fixes an issue where removing an alternative presentation button substituted for a non-HTML input
        element did not restore the original appearance of the element before the substitution.

        To substitute the alternative presentation button for a non-HTML input element we attach a
        user-agent shadow root to it. Adding a shadow root, including a user-agent shadow root,
        tears down the existing renderers for the element. Currently when we unapply such a substitution
        we ultimately just remove the shadow root and do not create new renderers for the subtree
        that the shadow root was removed from. We need to create new renderers for this subtree
        to restore the original appearance of the element before the substitution.

        * editing/cocoa/AlternativePresentationButtonSubstitution.cpp:
        (WebCore::AlternativePresentationButtonSubstitution::unapply):

2017-12-01  Christopher Reid  <chris.reid@sony.com>

        Move DateComponents into WTF
        https://bugs.webkit.org/show_bug.cgi?id=180211

        Reviewed by Myles C. Maxfield.

        No new tests no change in behavior.

        Moved DateComponents from platform into WTF.

        * Sources.txt: Removed DateComponents
        * WebCore.xcodeproj/project.pbxproj: Removed DateComponents
        * dom/Document.cpp:
        * html/BaseDateAndTimeInputType.h:
        * html/DateTimeInputType.h: Fixed a call to the wrong parent constructor
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        * html/InputType.h:
        * platform/text/PlatformLocale.cpp:
        * platform/text/PlatformLocale.h:
        * platform/text/ios/LocalizedDateCache.h:
        * platform/text/mac/LocaleMac.h:
        * platform/text/win/LocaleWin.cpp:
        * platform/text/win/LocaleWin.h:
        * rendering/RenderThemeIOS.mm:

2017-12-01  Daniel Bates  <dabates@apple.com>

        Alternative Presentation Button: Provide a way to query for the replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=180114
        <rdar://problem/35710539>

        Reviewed by Tim Horton.

        Add SPI to query for the elements that were replaced by an Alternative Presentation Button.

        Test: fast/forms/alternative-presentation-button/replaced-elements.html

        * editing/Editor.cpp:
        (WebCore::Editor::elementsReplacedByAlternativePresentationButton): Added.
        * editing/Editor.h:
        * editing/cocoa/AlternativePresentationButtonSubstitution.cpp:
        (WebCore::AlternativePresentationButtonSubstitution::replacedElements): Added.
        * editing/cocoa/AlternativePresentationButtonSubstitution.h:
        * testing/Internals.cpp:
        (WebCore::Internals::elementsReplacedByAlternativePresentationButton): Added.
        * testing/Internals.h:
        * testing/Internals.idl: Expose internals function elementsReplacedByAlternativePresentationButton()
        so as to test Editor::elementsReplacedByAlternativePresentationButton().

2017-12-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rename ImageFrameCache to ImageSource
        https://bugs.webkit.org/show_bug.cgi?id=180172

        Reviewed by Per Arne Vollan.

        This is a follow-up for r225300. ImageSource is the intended name after
        merging ImageFrameCache and ImageSource.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageFrame.h:
        * platform/graphics/ImageFrameCache.cpp: Removed.
        * platform/graphics/ImageFrameCache.h: Removed.
        * platform/graphics/ImageSource.cpp: Added.
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::~ImageSource):
        (WebCore::ImageSource::ensureDecoderAvailable):
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::resetData):
        (WebCore::ImageSource::dataChanged):
        (WebCore::ImageSource::isAllDataReceived):
        (WebCore::ImageSource::destroyDecodedData):
        (WebCore::ImageSource::destroyIncompleteDecodedData):
        (WebCore::ImageSource::clearFrameBufferCache):
        (WebCore::ImageSource::decodedSizeChanged):
        (WebCore::ImageSource::decodedSizeIncreased):
        (WebCore::ImageSource::decodedSizeDecreased):
        (WebCore::ImageSource::decodedSizeReset):
        (WebCore::ImageSource::didDecodeProperties):
        (WebCore::ImageSource::growFrames):
        (WebCore::ImageSource::setNativeImage):
        (WebCore::ImageSource::cacheMetadataAtIndex):
        (WebCore::ImageSource::cacheNativeImageAtIndex):
        (WebCore::ImageSource::cacheNativeImageAtIndexAsync):
        (WebCore::ImageSource::decodingQueue):
        (WebCore::ImageSource::frameRequestQueue):
        (WebCore::ImageSource::canUseAsyncDecoding):
        (WebCore::ImageSource::startAsyncDecodingQueue):
        (WebCore::ImageSource::requestFrameAsyncDecodingAtIndex):
        (WebCore::ImageSource::isAsyncDecodingQueueIdle const):
        (WebCore::ImageSource::stopAsyncDecodingQueue):
        (WebCore::ImageSource::frameAtIndexCacheIfNeeded):
        (WebCore::ImageSource::clearMetadata):
        (WebCore::ImageSource::sourceURL const):
        (WebCore::ImageSource::mimeType const):
        (WebCore::ImageSource::expectedContentLength const):
        (WebCore::ImageSource::metadata):
        (WebCore::ImageSource::frameMetadataAtIndex):
        (WebCore::ImageSource::frameMetadataAtIndexCacheIfNeeded):
        (WebCore::ImageSource::encodedDataStatus):
        (WebCore::ImageSource::frameCount):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::uti):
        (WebCore::ImageSource::filenameExtension):
        (WebCore::ImageSource::hotSpot):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::sizeRespectingOrientation):
        (WebCore::ImageSource::singlePixelSolidColor):
        (WebCore::ImageSource::maximumSubsamplingLevel):
        (WebCore::ImageSource::frameIsBeingDecodedAndIsCompatibleWithOptionsAtIndex):
        (WebCore::ImageSource::frameDecodingStatusAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSource::frameHasFullSizeNativeImageAtIndex):
        (WebCore::ImageSource::frameHasDecodedNativeImageCompatibleWithOptionsAtIndex):
        (WebCore::ImageSource::frameSubsamplingLevelAtIndex):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::frameBytesAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameOrientationAtIndex):
        (WebCore::ImageSource::setTargetContext):
        (WebCore::ImageSource::createFrameImageAtIndex):
        (WebCore::ImageSource::frameImageAtIndex):
        (WebCore::ImageSource::frameImageAtIndexCacheIfNeeded):
        (WebCore::ImageSource::dump):
        * platform/graphics/ImageSource.h: Added.
        (WebCore::ImageSource::create):
        (WebCore::ImageSource::decodedSize const):
        (WebCore::ImageSource::destroyAllDecodedData):
        (WebCore::ImageSource::destroyAllDecodedDataExcludeFrame):
        (WebCore::ImageSource::destroyDecodedDataBeforeFrame):
        (WebCore::ImageSource::clearImage):
        (WebCore::ImageSource::requestFrameAsyncDecodingAtIndex):
        (WebCore::ImageSource::hasAsyncDecodingQueue const):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::isDecoderAvailable const):
        (WebCore::ImageSource::frameAtIndexCacheIfNeeded):
        (WebCore::ImageSource::ImageFrameRequest::operator== const):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

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

        Implement https://w3c.github.io/ServiceWorker/#clients-get
        https://bugs.webkit.org/show_bug.cgi?id=180167

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/serviceworkerclients-get.https.html

        Implement clients get by having service worker clients do the following:
        - Go to main thread to query the SWClientConnection for getting the client.
        - SWClientConnection requests it through IPC to StorageProcess SWServer.
        - SWServer looks at its client map and returns client data based on the given identifier.
        - SWClientConnection sends it back to the right clients for resolving the promise.

        Identifier is parsed at service worker process level.

        Made ServiceWorkerClients no longer an ActiveDOMObject since it is owned by ServiceWorkerGlobalScope
        and is only exposed in service workers.

        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::fromString):
        * workers/service/ServiceWorkerClients.cpp:
        (WebCore::ServiceWorkerClients::ServiceWorkerClients):
        (WebCore::ServiceWorkerClients::get):
        * workers/service/ServiceWorkerClients.h:
        (WebCore::ServiceWorkerClients::create):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postTaskToServiceWorker):
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::getClientFromId):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::findClientByIdentifier):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::origin const):
        (WebCore::SWServerWorker::findClientByIdentifier):
        * workers/service/server/SWServerWorker.h:

2017-12-01  Brian Burg  <bburg@apple.com>

        Web Inspector: move Inspector::Protocol::Array<T> to JSON namespace
        https://bugs.webkit.org/show_bug.cgi?id=173662

        Reviewed by Joseph Pecoraro.

        Adopt new type names.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::releaseFrames):
        (WebCore::InspectorCanvas::releaseData):
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::buildArrayForAffineTransform):
        (WebCore::buildArrayForVector):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        (WebCore::InspectorCanvas::buildArrayForImageData):
        (WebCore::InspectorCanvas::buildArrayForImageBitmap):
        * inspector/InspectorCanvas.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::buildObjectForHighlightedNodes const):
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForHighlight):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::buildArrayForRendererFragments):
        (WebCore::buildObjectForElementData):
        (WebCore::InspectorOverlay::buildHighlightObjectForNode const):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNodes const):
        * inspector/InspectorOverlay.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::buildArrayForComputedStyle const):
        (WebCore::InspectorStyle::styleWithProperties const):
        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        * inspector/InspectorStyleSheet.h:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::getSupportedSystemFontFamilyNames):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/agents/InspectorCSSAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes):
        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        (WebCore::InspectorDOMAgent::processAccessibilityChildren):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/agents/InspectorDatabaseAgent.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::Inspector::keyPathFromIDBKeyPath):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        * inspector/agents/InspectorLayerTreeAgent.h:
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::collectSample):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::searchOtherRequests):
        (WebCore::InspectorNetworkAgent::searchInRequest):
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels):
        * inspector/agents/WebConsoleAgent.h:

2017-12-01  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Implement SPI for clients to update a given attachment's data
        https://bugs.webkit.org/show_bug.cgi?id=180184
        <rdar://problem/35355731>

        Reviewed by Tim Horton.

        Add native API support for Mail to update the data (and optionally, the name and type) of a given attachment
        element. See per-method comments below for more detail.

        Test: WKAttachmentTests.ChangeAttachmentDataAndFileInformation
              WKAttachmentTests.ChangeAttachmentDataUpdatesWithInPlaceDisplay

        * editing/Editor.cpp:
        (WebCore::Editor::insertAttachment):
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFile):
        (WebCore::HTMLAttachmentElement::invalidateShadowRootChildrenIfNecessary):

        Pull out logic to hide and reset shadow DOM state into a separate helper, and additionally hide both the image
        and video child elements if they exist. This prevents us from getting into a state where both image and video
        elements may appear side-by-side when changing data from an image to a video or vice versa.

        (WebCore::HTMLAttachmentElement::updateFileWithData):

        Add a new helper to update the backing File of an attachment element from data, optionally updating the filename
        and content type as well.

        (WebCore::HTMLAttachmentElement::populateShadowRootIfNecessary):
        * html/HTMLAttachmentElement.h:

2017-12-01  Chris Dumez  <cdumez@apple.com>

        Get rid of microtask in ServiceWorkerContainer::jobResolvedWithRegistration()
        https://bugs.webkit.org/show_bug.cgi?id=180263

        Reviewed by Youenn Fablet.

        Get rid of microtask in ServiceWorkerContainer::jobResolvedWithRegistration(). It
        is no longer needed and MicrotaskQueue::mainThreadQueue() is only safe to use from
        the main thread, as its name suggest. ServiceWorkerContainer are also instantiated
        in Service worker threads nowadays.

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::resolvedWithRegistration):
        * workers/service/ServiceWorkerJob.h:
        * workers/service/ServiceWorkerJobClient.h:

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

        Free FontFaceSets may include fonts that were never actually added to them
        https://bugs.webkit.org/show_bug.cgi?id=180164

        Reviewed by Simon Fraser.

        There are two circumstances where this can occur:

        - If script makes a so-called "free" FontFaceSet, by using "new FontFaceSet". This object is not
        associated with the document, and should therefore only include fonts which have been manually
        added to it from script. However, today, this object includes preinstalled fonts which have the
        same names as any fonts manually added to it. (So, if you manually add "Helvetica", the object
        would have two objects - the one you just added and the preinstalled version too).

        - For the document's FontFaceSet, the same thing would happen. This one is a little trickier
        because the spec is not clear whether or not the document's FontFaceSet should include these
        preinstalled fonts. However, running this test in Firefox and Chrome, they both agree that 
        preinstalled fonts should not be present, so this patch adheres to this behavior.

        We can't actually remove the preinstalled fonts from the document's FontFaceSet (because that's
        how normal font lookups are performed), but we can filter them out at the point they meet the
        Javascript API. And, for "free" FontFaceSets, we can avoid adding them in the first place for
        performance.

        Test: fast/text/font-face-api-preinstalled.html

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::CSSFontFaceSet):
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        (WebCore::CSSFontFaceSet::addToFacesLookupTable):
        (WebCore::CSSFontFaceSet::matchingFacesExcludingPreinstalledFonts):
        (WebCore::CSSFontFaceSet::check):
        (WebCore::CSSFontFaceSet::matchingFaces): Deleted.
        * css/CSSFontFaceSet.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::load):

2017-12-01  Dean Jackson  <dino@apple.com>

        Attempted build fix.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

2017-12-01  Dean Jackson  <dino@apple.com>

        Use SH_INITIALIZE_UNINITIALIZED_LOCALS now that ANGLE has been updated
        https://bugs.webkit.org/show_bug.cgi?id=177929
        <rdar://problem/34866210>

        Reviewed by Sam Weinig.

        Test: fast/canvas/webgl/uninitialized-locals.html

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

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

        Many imported/w3c/web-platform-tests/service-workers/ test are failing together intermittently
        https://bugs.webkit.org/show_bug.cgi?id=180227

        Reviewed by Mark Lam.

        No observable change.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::callFunction):

2017-12-01  Brady Eidson  <beidson@apple.com>

        Add Internals.terminateServiceWorker, and the ability to restart service workers for postMessage.
        https://bugs.webkit.org/show_bug.cgi?id=180170

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/postmessage-after-terminate.https.html

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::~ActiveDOMObject):

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

        * workers/service/SWClientConnection.h:

        * workers/service/ServiceWorker.idl:

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorkerGlobalScope):
        (WebCore::SWContextManager::terminateWorker):
        * workers/service/context/SWContextManager.h:

        * workers/service/context/ServiceWorkerThreadProxy.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::workerByID const):
        (WebCore::SWServer::Connection::syncTerminateWorker):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::invokeRunServiceWorker):
        (WebCore::SWServer::terminateWorker):
        (WebCore::SWServer::syncTerminateWorker):
        (WebCore::SWServer::terminateWorkerInternal):
        (WebCore::SWServer::workerContextTerminated):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::workerByID const): Deleted.

        * workers/service/server/SWServerToContextConnection.h:

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextData const):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::isRunning const):
        (WebCore::SWServerWorker::isTerminating const):
        (WebCore::SWServerWorker::setState):
        (WebCore::SWServerWorker::server):

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

        Nullptr deref in WebCore::RenderTableCaption::containingBlockLogicalWidthForContent
        https://bugs.webkit.org/show_bug.cgi?id=180251
        <rdar://problem/34138562>

        Reviewed by Simon Fraser.

        containingBlockLogicalWidthForContent should check whether the renderer is actually
        attached to the tree.

        Test: fast/table/caption-crash-when-layer-backed.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::containingBlockLogicalWidthForContent const):
        * rendering/RenderTableCaption.h:
        (WebCore::RenderTableCaption::containingBlockLogicalWidthForContent const):

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

        Clear WebSWClientConnection in case storage process IPC connection is closing
        https://bugs.webkit.org/show_bug.cgi?id=180210

        Reviewed by Chris Dumez.

        No observable change of behavior.

        * dom/Document.h: Keeping a ref since object may be deleted otherwise.

2017-12-01  Chris Dumez  <cdumez@apple.com>

        Drop clientCreationURL from ServiceWorkerRegistrationKey
        https://bugs.webkit.org/show_bug.cgi?id=180255

        Reviewed by Youenn Fablet.

        Drop clientCreationURL from ServiceWorkerRegistrationKey. It is not needed and leads to
        wrong behavior when using the Service Worker API from inside service workers.

        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::registrationKey const):
        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::ServiceWorkerRegistrationKey):
        (WebCore::ServiceWorkerRegistrationKey::hash const):
        (WebCore::ServiceWorkerRegistrationKey::operator== const):
        (WebCore::ServiceWorkerRegistrationKey::isolatedCopy const):
        (WebCore::ServiceWorkerRegistrationKey::loggingString const):
        * workers/service/ServiceWorkerRegistrationKey.h:
        (WebCore::ServiceWorkerRegistrationKey::scope const):
        (WebCore::ServiceWorkerRegistrationKey::setScope):
        (WebCore::ServiceWorkerRegistrationKey::encode const):
        (WebCore::ServiceWorkerRegistrationKey::decode):
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::isDeletedValue):
        (WebCore::ServiceWorkerRegistrationKey::clientCreationURL const): Deleted.
        (WebCore::ServiceWorkerRegistrationKey::setClientCreationURL): Deleted.

2017-12-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Wrongly placed scroll bars in HiDPI
        https://bugs.webkit.org/show_bug.cgi?id=180066

        Reviewed by Žan Doberšek.

        PlatformContextCairo wasn't properly initialized. It should have a
        pointer to GraphicsContextPrivate in WinCairo port to paint
        controls in right places.

        No new tests, no behavior change.

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::platformInit): Call PlatformContextCairo::setGraphicsContextPrivate.

2017-12-01  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Use CaptureDevice instead of device ID to identify devices
        https://bugs.webkit.org/show_bug.cgi?id=180206
        <rdar://problem/35775758>

        Reviewed by Youenn Fablet.

        No new tests, no change in behavior.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::allowedAudioDeviceUID const): Deleted.
        (WebCore::UserMediaRequest::allowedVideoDeviceUID const): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::createMediaStream):
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mock/MockRealtimeAudioSource.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:

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

        Extra PerformanceEntryList entry after iframe navigation
        https://bugs.webkit.org/show_bug.cgi?id=178433

        Reviewed by Joseph Pecoraro.

        Test: http/tests/security/PerformanceEntryList-parent-only-first-navigation.html

        When an iframe is loaded, its main resource load should be reported to the parent frame's PerformanceEntryList.
        Subsequent main resource loads should not.

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::shouldReportResourceTimingToParentFrame):
        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::addResourceTiming):

2017-11-30  Zalan Bujtas  <zalan@apple.com>

        [Simple line layout] Incorrect repaint rect with vertically shrinking content and bottom-padding.
        https://bugs.webkit.org/show_bug.cgi?id=180223
        <rdar://problem/34122210>

        Reviewed by Simon Fraser.

        Repaint rect should be extended all the way to bottom border/padding.

        Test: fast/repaint/simple-line-layout-shrinking-content.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutSimpleLines):

2017-11-30  Stephan Szabo  <stephan.szabo@sony.com>

        Make LegacyCustomProtocolManager optional for network process
        https://bugs.webkit.org/show_bug.cgi?id=176230

        Reviewed by Alex Christensen.

        No new tests, only sets up feature define

        * Configurations/FeatureDefines.xcconfig:

2017-11-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] Fix CVPixelBuffer leak
        https://bugs.webkit.org/show_bug.cgi?id=180224

        Reviewed by Youenn Fablet.

        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.cpp:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        Adopt the newly created pixel buffer.

        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        Release the format description as soon as we are done with it. Otherwise
        we could have bailed before releasing it.

2017-11-30  Simon Fraser  <simon.fraser@apple.com>

        Improve filter logging
        https://bugs.webkit.org/show_bug.cgi?id=180182

        Reviewed by Sam Weinig.

        Add a parameter to FilterEffect::externalRepresentation() so that we can log extra
        data without breaking layout tests.

        Add TextStream output for ColorSpace.
        
        Improve logging of FEComponentTransfer ComponentTransferFunctions by logging the data
        that's appropriate for the function type, and rebaseline affected tests.

        * platform/graphics/Color.cpp:
        (WebCore::operator<<):
        * platform/graphics/Color.h:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::externalRepresentation const):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::externalRepresentation const):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::operator<<):
        (WebCore::FEComponentTransfer::externalRepresentation const):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::externalRepresentation const):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::externalRepresentation const):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::externalRepresentation const):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::externalRepresentation const):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::externalRepresentation const):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::externalRepresentation const):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::externalRepresentation const):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::externalRepresentation const):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::externalRepresentation const):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::externalRepresentation const):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::externalRepresentation const):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::externalRepresentation const):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::externalRepresentation const):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::externalRepresentation const):
        (WebCore::operator<<):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::externalRepresentation const):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::externalRepresentation const):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::externalRepresentation const):
        * svg/graphics/filters/SVGFEImage.h:

2017-11-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix, removed unused lambda captures.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):

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

        Move SWClientConnection class out of server/ folder
        https://bugs.webkit.org/show_bug.cgi?id=180217

        Reviewed by Brady Eidson.

        Move SWClientConnection class out of server/ folder since the client connection
        lives in the WebProcess, not the Storage process.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/SWClientConnection.cpp: Renamed from Source/WebCore/workers/service/server/SWClientConnection.cpp.
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::finishedFetchingScript):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::jobRejectedInServer):
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        (WebCore::SWClientConnection::forEachContainer):
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::updateWorkerState):
        (WebCore::SWClientConnection::fireUpdateFoundEvent):
        (WebCore::SWClientConnection::notifyClientsOfControllerChange):
        * workers/service/SWClientConnection.h: Renamed from Source/WebCore/workers/service/server/SWClientConnection.h.
        * workers/service/ServiceWorkerContainer.cpp:

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

        ServiceWorkerThread's m_extendedEvents gets destroyed on the wrong thread
        https://bugs.webkit.org/show_bug.cgi?id=180216

        Reviewed by Brady Eidson.

        ServiceWorkerThread's m_extendedEvents gets destroyed on the wrong thread. Those events live on the worker
        thread so we should destroy them on the worker thread, not the main thread. To address the issue, m_extendedEvents
        was moved to ServiceWorkerGlobalScope, which actually lives on the right thread.

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::updateExtendedEventsSet):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):
        (WebCore::ServiceWorkerThread::updateExtendedEventsSet): Deleted.
        * workers/service/context/ServiceWorkerThread.h:
        (WebCore::ServiceWorkerThread::hasPendingEvents const): Deleted.

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

        SWServerToContextConnection / SWServerWorker do not need to be ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=180214

        Reviewed by Brady Eidson.

        SWServerToContextConnection / SWServerWorker do not need to be ThreadSafeRefCounted.
        RefCounted is sufficient as there is no longer any multithreading on server side.

        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.h:

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

        ServiceWorkerGlobalScope::skipWaiting() should resolve its promise
        https://bugs.webkit.org/show_bug.cgi?id=180204

        Reviewed by Brady Eidson.

        ServiceWorkerGlobalScope::skipWaiting() should resolve its promise, even if it is not
        implemented yet. For now, always reject the promise.

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::skipWaiting):

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

        Mark a few heap-allocated service worker types as WTF_MAKE_FAST_ALLOCATED
        https://bugs.webkit.org/show_bug.cgi?id=180212

        Reviewed by Geoffrey Garen.

        Mark a few heap-allocated service worker types as WTF_MAKE_FAST_ALLOCATED for performance.

        * workers/service/server/SWOriginStore.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.h:

2017-11-30  Brady Eidson  <beidson@apple.com>

        Make WorkerThread lifetime much more predictable.
        https://bugs.webkit.org/show_bug.cgi?id=180203

        Reviewed by Chris Dumez.

        No new tests (Fixes flakiness in existing and future tests).

        The family of classes related to Workers has a complicated ownership model.

        For Dedicated Workers, the WorkerThread object is owned by the WorkerMessagingProxy,
        which manages its own lifetime. Additionally, other object(s) have raw C++ references
        to it, and the expected lifetimes are described in comments scattered through a few files.

        What it boils down to is that the "Worker" DOM object - which lives on the main thread - 
        is the key to the proper destruction of all of these objects.

        For ServiceWorkers running in their own context process, there is no "Worker" on the main thread.

        As a result, ServiceWorkers can get into a situation where their WorkerThread can be destroyed before
        their ServiceWorkerGlobalScope is destroyed on the running background thread.

        There's no reason to not have WorkerThread guarantee its own lifetime until its background thread
        has actually completed.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread): Protect the WorkerThread object during the entire runtime
          of the background thread itself, and release that protection on the main thread.
        * workers/WorkerThread.h:

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

        Populate self.registration.installing/waiting/active inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180168

        Reviewed by Brady Eidson.

        Populate self.registration.installing/waiting/active inside service workers.
        Also make sure the ServiceWorker's state properly gets updated inside
        service workers.

        No new tests, extended existing test for self.registration.

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::scheduleTaskToUpdateState):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::forEachServiceWorkerThread):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::fireInstallEvent):
        (WebCore::ServiceWorkerThread::fireActivateEvent):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::updateWorkerState):
        (WebCore::SWClientConnection::fireUpdateFoundEvent):
        * workers/service/server/SWClientConnection.h:

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

        Rename RegistrationOptions to ServiceWorkerRegistrationOptions
        https://bugs.webkit.org/show_bug.cgi?id=180207

        Reviewed by Geoffrey Garen.

        Rename RegistrationOptions to ServiceWorkerRegistrationOptions as the name
        RegistrationOptions is too generic and likely to conflict. Also modernize
        ServiceWorkerRegistrationOptions' IPC decoder.

        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/ServiceWorkerRegistrationOptions.cpp:
        (WebCore::ServiceWorkerRegistrationOptions::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationOptions.h:
        (WebCore::ServiceWorkerRegistrationOptions::encode const):
        (WebCore::ServiceWorkerRegistrationOptions::decode):

2017-11-30  Darin Adler  <darin@apple.com>

        [Mac] remove unneeded RetainPtr use introduced in r225142
        https://bugs.webkit.org/show_bug.cgi?id=180202

        Reviewed by Tim Horton.

        * editing/mac/DictionaryLookup.h: Changed out arguments back to NSDictionary ** instead
        of RetainPtr because these use autorelease.

        * editing/mac/DictionaryLookup.mm:
        (WebCore::tokenRange): Use NSDictionary **.
        (WebCore::DictionaryLookup::rangeForSelection): Ditto.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.
        (WebCore::DictionaryLookup::stringForPDFSelection): Ditto.

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

        Mark ServiceWorkerGlobalScope as final
        https://bugs.webkit.org/show_bug.cgi?id=180201

        Reviewed by Alex Christensen.

        * workers/service/ServiceWorkerGlobalScope.h:

2017-11-30  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Move CoordinatedGraphicsLayer painting behind Nicosia::PaintingEngine
        https://bugs.webkit.org/show_bug.cgi?id=180141

        Reviewed by Carlos Garcia Campos.

        Introduce a painting engine concept that's used to perform painting
        for a given GraphicsLayer object.

        The Nicosia::PaintingEngine object is leveraged in the
        CoordinatedGraphicsLayer::updateContentBuffers() method. It's retrieved
        through the CoordinatedGraphicsLayerClient interface, with a new method
        introduced there for this purpose.

        The Nicosia::PaintingEngine interface is kept simple for now, with only
        a single paint() method. The only current implementation is the
        PaintingEngineBasic class, which simply reuses the code that was
        previously in CoordinatedGraphicsLayer::updateContentBuffers(),
        maintaining the current functionality.

        The Nicosia::PaintingEngine::create() function returns a new
        PaintingEngine object. For now it defaults to PaintingEngineBasic, but
        it could be configured at configure-time or even runtime in the future
        to return a more advanced engine implementation.

        No new tests -- no change in behavior.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaPaintingEngine.cpp: Added.
        (Nicosia::PaintingEngine::create):
        * platform/graphics/nicosia/NicosiaPaintingEngine.h: Added.
        * platform/graphics/nicosia/NicosiaPaintingEngineBasic.cpp: Added.
        (Nicosia::PaintingEngineBasic::paint):
        * platform/graphics/nicosia/NicosiaPaintingEngineBasic.h: Added.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2017-11-30  Adrian Perez de Castro  <aperez@igalia.com>

        [GStreamer] Builds fails with ENABLE_VIDEO=OFF due to GStreamer usage
        https://bugs.webkit.org/show_bug.cgi?id=179373

        Reviewed by Xabier Rodriguez-Calvar.

        This allows to build with WebAudio enabled even if video support is
        disabled by guarding usage of HTMLMediaElement with ENABLE(VIDEO).

        No new tests needed.

        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::setGStreamerEnabled): Guard usage of HTMLMediaElement.

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

        ServiceWorker WebProcess sometimes crashes in JSVMClientData::~JSVMClientData()
        https://bugs.webkit.org/show_bug.cgi?id=180173

        Reviewed by Alex Christensen.

        The leak was caused by EventListeners remaining when destroying the VM, because
        JSEventListener refs the DOMWrapperWorld. To address the issue, we now call
        removeAllEventListeners() in the stop() method of ServiceWorkerContainer,
        ServiceWorkerRegistration and ServiceWorker. Those event listeners are no
        longer needed after ActiveDOMObject::stop() is called since the script
        execution context is about to be destroyed.

        This is the same pattern used in IDBDatabase::stop(), IDBRequest::stop().

        No new tests, already covered by existing test.

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::stop):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::stop):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::stop):

2017-11-29  Filip Pizlo  <fpizlo@apple.com>

        GC should support isoheaps
        https://bugs.webkit.org/show_bug.cgi?id=179288

        Reviewed by Saam Barati.

        No new tests because no new behavior.
        
        Adopting changes in JSC Subspace API.

        * ForwardingHeaders/runtime/JSDestructibleObjectHeapCellType.h: Added.
        * ForwardingHeaders/runtime/JSSegmentedVariableObjectHeapCellType.h: Added.
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::outputConstraintSubspaceFor):
        (WebCore::globalObjectOutputConstraintSubspaceFor):
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSVMClientData::outputConstraintSpace):
        (WebCore::JSVMClientData::globalObjectOutputConstraintSpace):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2017-11-29  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clean up audio and video capture factories
        https://bugs.webkit.org/show_bug.cgi?id=180156
        <rdar://problem/35753435>

        Reviewed by Youenn Fablet.

        No new tests, no behavior change.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::audioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::setVideoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::unsetVideoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::videoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenter::setAudioCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenter::unsetAudioCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenter::audioCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenter::setVideoCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenter::unsetVideoCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenter::videoCaptureDeviceManager): Deleted.
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        * platform/mediastream/RealtimeMediaSourceSettings.cpp:
        (WebCore::RealtimeMediaSourceSettings::facingMode):
        (WebCore::RealtimeMediaSourceSettings::videoFacingModeEnum):
        (WebCore::userFacing): Deleted.
        (WebCore::environmentFacing): Deleted.
        (WebCore::leftFacing): Deleted.
        (WebCore::rightFacing): Deleted.
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::RealtimeMediaSourceSettings): Deleted.
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::create):
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (): Deleted.
        (WebCore::AVVideoCaptureSourceFactory::setVideoCapturePageState): Deleted.
        (WebCore::avVideoCaptureSourceFactory): Deleted.
        (WebCore::AVVideoCaptureSource::factory): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::videoCaptureSourceFactory):
        (WebCore::RealtimeMediaSourceCenterMac::audioFactory):
        (WebCore::RealtimeMediaSourceCenterMac::videoFactory):
        (WebCore::RealtimeMediaSourceCenterMac::audioCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenterMac::videoCaptureDeviceManager):
        (WebCore::RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::defaultVideoFactory): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::defaultAudioCaptureDeviceManager): Deleted.
        (WebCore::RealtimeMediaSourceCenterMac::defaultVideoCaptureDeviceManager): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::startProducingData):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::~MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::startProducingData):
        * platform/mock/MockRealtimeVideoSource.h:

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

        [Attachment Support] Implement SPI for clients to make an attachment element display in-place
        https://bugs.webkit.org/show_bug.cgi?id=180153
        <rdar://problem/35735252>

        Reviewed by Tim Horton.

        Adds SPI support for inserting attachments using in-place display style, and updating display options for
        existing attachments. See comments below for more detail.

        Tests: WKAttachmentTests.InPlaceImageAttachmentToggleDisplayMode
               WKAttachmentTests.InPlaceImageAttachmentParagraphInsertion
               WKAttachmentTests.InPlaceVideoAttachmentInsertionWithinList
               WKAttachmentTests.InPlacePDFAttachmentCutAndPaste

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::insertAttachment):
        (WebCore::Editor::insertAttachmentFromFile):

        Update display options for the attachment before inserting into the document.

        * editing/Editor.h:
        * html/AttachmentTypes.h: Added.

        Add a new header to define the new attachment display types. This lets us avoid importing HTMLAttachmentElement.h
        and instead just import AttachmentTypes.h in some places in WebKit that only deal with plumbing
        AttachmentDisplayOptions to the web process.

        (WebCore::AttachmentDisplayOptions::encode const):
        (WebCore::AttachmentDisplayOptions::decode):

        Support serializing and deserializing attachment display options.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFile):

        Regenerate the shadow root if needed when setting the file.

        (WebCore::HTMLAttachmentElement::updateDisplayMode):

        Introduce a new method to update the display mode of an attachment element. This builds up the shadow root of
        the attachment if it is displayed in-place.

        (WebCore::HTMLAttachmentElement::ensureInnerImage):
        (WebCore::HTMLAttachmentElement::ensureInnerVideo):

        Helpers to insert image and video elements into the shadow root if needed, and return the image or video element.

        (WebCore::HTMLAttachmentElement::innerImage const):
        (WebCore::HTMLAttachmentElement::innerVideo const):

        Helpers to retrieve existing image and video elements in the shadow root.

        (WebCore::HTMLAttachmentElement::populateShadowRootIfNecessary):

        Appends and configures the attachment element's shadow root for inline display, initializing an image or video
        element or neither, depending on the attachment type.

        * html/HTMLAttachmentElement.h:

        Introduce an AttachmentDisplayOptions struct which mirrors _WKAttachmentDisplayOptions in the WebKit layer. For
        now, this only contains a display mode enum.

        * platform/audio/ios/AudioSessionIOS.mm:

        Avoid this AVAudioSession assertion when targeting iOS simulator. AVAudioSession always throws this error when
        setting an audio session category in the simulator, even in a basic test app, since AVFoundation doesn't support
        audio sessions in the simulator.

        (WebCore::AudioSession::setCategory):

2017-11-29  Simon Fraser  <simon.fraser@apple.com>

        Missing layer content when animating elements on-screen
        https://bugs.webkit.org/show_bug.cgi?id=180178
        rdar://problem/34923438

        Reviewed by Dean Jackson.

        If a delayed animation starts, that animates layers from offscreen, then we would fail
        to run the logic that ensures that those layers have backing store.

        Fix by ensuring that if any layer starts or ends a transform animation, we re-evaluate
        backing store attachment on all its descendants.

        I tried to make a test, but layer flushing is timing-sensitive and the test would have taken
        5s, and not been reliable. There's a manual test in the bug.

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

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

        ServiceWorkerClient objects should be reused if there is already one existing with the same identifier
        https://bugs.webkit.org/show_bug.cgi?id=180143

        Reviewed by Chris Dumez.

        Covered by updated tests.

        ServiceWorkerGlobalScope keeps a map of all live ServiceWorkerClient objects.
        Before creating a new client, it checks whether the map has one such object with the same identifier.
        If so, it reuses this object. Otherwise it creates either a ServiceWorkerWindowClient or ServiceWorkerClient.

        Add support for using a ServiceWorkerClientIdentifier as a HashMap key.

        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::ServiceWorkerClient):
        (WebCore::ServiceWorkerClient::~ServiceWorkerClient):
        * workers/service/ServiceWorkerClient.h:
        (WebCore::ServiceWorkerClient::getOrCreate):
        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::hash const):
        (WTF::ServiceWorkerClientIdentifierHash::hash):
        (WTF::ServiceWorkerClientIdentifierHash::equal):
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::emptyValue):
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ServiceWorkerClientIdentifier>::isDeletedValue):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::serviceWorkerClient):
        (WebCore::ServiceWorkerGlobalScope::addServiceWorkerClient):
        (WebCore::ServiceWorkerGlobalScope::removeServiceWorkerClient):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerWindowClient.cpp:
        (WebCore::ServiceWorkerWindowClient::ServiceWorkerWindowClient):
        * workers/service/ServiceWorkerWindowClient.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):

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

        Add missing WTF_MAKE_ISO_ALLOCATED macros
        https://bugs.webkit.org/show_bug.cgi?id=180165
        <rdar://problem/35755617>

        Reviewed by Simon Fraser.

        * rendering/RenderFrame.h:
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderIFrame.h:

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

        Remove the ImageSource from the class hierarchy that connects BitmapImage to ImageFrame
        https://bugs.webkit.org/show_bug.cgi?id=175595

        Reviewed by Darin Adler.

        The class hierarchy that connects BitmapImage to ImageFrame has been
        troublesome. ImageSource does not have a clear responsibility other than
        a bridge that connects BitmapIamge to ImageFrameCache. Sharing the 
        ImageDecoder between ImageSource and ImageFrameCache is ugly and caused
        few crashes in the past.

        This patch will do the first step for fixing this issue. First get rid of
        ImageSource by moving its APIs to ImageFrameCache and BitmapImage. Replace
        all the instances of ImageSource by ImageFrameCache. The next step will
        be to rename ImageFrameCache to ImageSource. But this will be done in a
        follow-up patch

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::~BitmapImage):
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::frameImageAtIndexCacheIfNeeded):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::canUseAsyncDecodingForLargeImages const):
        (WebCore::BitmapImage::shouldUseAsyncDecodingForAnimatedImages const):
        (WebCore::BitmapImage::subsamplingLevelForScaleFactor):
        (WebCore::BitmapImage::canDestroyDecodedData):
        (WebCore::BitmapImage::internalStartAnimation):
        (WebCore::BitmapImage::stopAnimation):
        (WebCore::BitmapImage::decode):
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):
        (WebCore::BitmapImage::dump const):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::ImageFrameCache):
        (WebCore::ImageFrameCache::ensureDecoderAvailable):
        (WebCore::ImageFrameCache::setData):
        (WebCore::ImageFrameCache::resetData):
        (WebCore::ImageFrameCache::dataChanged):
        (WebCore::ImageFrameCache::isAllDataReceived):
        (WebCore::ImageFrameCache::clearFrameBufferCache):
        (WebCore::ImageFrameCache::canUseAsyncDecoding):
        (WebCore::ImageFrameCache::maximumSubsamplingLevel):
        (WebCore::ImageFrameCache::setTargetContext):
        (WebCore::ImageFrameCache::createFrameImageAtIndex):
        (WebCore::ImageFrameCache::dump):
        (WebCore::ImageFrameCache::setDecoder): Deleted.
        (WebCore::ImageFrameCache::decoder const): Deleted.
        * platform/graphics/ImageFrameCache.h:
        (WebCore::ImageFrameCache::create):
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex):
        * platform/graphics/ImageSource.cpp: Removed.
        * platform/graphics/ImageSource.h: Removed.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::~ImageExtractor):
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/ImageSourceCG.h:

2017-11-29  Brady Eidson  <beidson@apple.com>

        When managing context startups, make ServiceWorkerJobDataIdentifier's optional.
        https://bugs.webkit.org/show_bug.cgi?id=180166

        Reviewed by Chris Dumez.

        No new tests (No behavior change).

        We'll sometimes be starting SW contexts without an associated job, so ServiceWorkerContextData
        should not required actually having a job identifier.

        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::decode):

        * workers/service/context/SWContextManager.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::scriptContextStarted):
        (WebCore::SWServer::didFinishInstall):
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::scriptContextFailedToStart):
        (WebCore::SWServerToContextConnection::scriptContextStarted):
        (WebCore::SWServerToContextConnection::didFinishInstall):
        * workers/service/server/SWServerToContextConnection.h:

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::scriptContextFailedToStart):
        (WebCore::SWServerWorker::scriptContextStarted):
        (WebCore::SWServerWorker::didFinishInstall):
        * workers/service/server/SWServerWorker.h:

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

        Add support for service worker generated redirections
        https://bugs.webkit.org/show_bug.cgi?id=179498

        Reviewed by Darin Adler.

        Test: http/tests/workers/service/service-worker-redirection-fetch.https.html

        Added redirection routines following fetch specification to:
        - check whether a response is a redirection
        - generate a redirected request from a request and its redirection response.
        Added some specific redirect request generation following existing WebKit networking code.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::redirect):
        (WebCore::isRedirectStatus): Deleted.
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::shouldUseGet):
        (WebCore::ResourceRequestBase::redirectedRequest const):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::isRedirectionStatusCode):
        (WebCore::ResourceResponseBase::isRedirection const):

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

        Start exposing self.registration inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180162

        Reviewed by Brady Eidson.

        Start exposing self.registration inside service workers as per:
        - https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope-interface

        This is very initial support:
        - The operations on the registration (such as update) will reject the promise for now.
        - The registration's service workers are not yet populated.

        This will be implemented in a follow-up.

        Tests: http/tests/workers/service/ServiceWorkerGlobalScope_registration_SameObject.html
               http/tests/workers/service/self_registration.html

        * bindings/js/JSServiceWorkerGlobalScopeCustom.cpp:
        (WebCore::JSServiceWorkerGlobalScope::visitAdditionalChildren):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        (WebCore::ServiceWorkerGlobalScope::registration):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::installContextData):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):

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

        Add support for FetchEvent.clientId
        https://bugs.webkit.org/show_bug.cgi?id=180052

        Reviewed by Chris Dumez.

        Covered by updated test.

        Add script execution context identifier as a FetchOptions parameter.
        This is then sent to the service worker process which can then set FetchEvent.clientId appropriately.
        If the fetch is for a subresource, clientId is used directly.
        If it is a navigation, clientId is set to targetClientId.

        * loader/FetchOptions.h:
        (WebCore::FetchOptions::encode const):
        (WebCore::FetchOptions::decode):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::prepareFetch):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setClientIdentifierIfNeeded):
        * loader/cache/CachedResourceRequest.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):
        * workers/service/context/ServiceWorkerThread.h:

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

        Flaky crash in WebCore::DOMGuardedObject::clear() during service worker tests
        https://bugs.webkit.org/show_bug.cgi?id=180045
        <rdar://problem/35737288>

        Reviewed by Chris Dumez.

        Manually tested by running concurrently service worker tests using FetchEvents which store promise references.

        Before the patch, on workers, clearing of DOMGuardedObjects happens at the time WorkerGlobalScope is destroyed.
        This is too late as it is expected that the JSDOMGlobalObject is still alive.

        This patch adds a clearDOMGuardedObjects method on JSWorkerGlobalScopeBase.
        It is called when stopping a WorkerThread, just before releasing the strong reference to JSWorkerGlobalScopeBase.

        * bindings/js/JSDOMGuardedObject.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::clearDOMGuardedObjects):
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * bindings/js/WorkerScriptController.cpp:

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

        Fix Mac CMake build.

        * PlatformMac.cmake:

2017-11-29  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r213590): Scrolling to anchors broken in web views when content loaded via HTML string
        https://bugs.webkit.org/show_bug.cgi?id=180155
        rdar://problem/34220827

        Reviewed by Zalan Bujtas.
        
        When content is loaded in a UIWebView or WKWebView via an HTML string, history().currentItem()
        is null so itemAllowsScrollRestoration() would return false, preventing scrolling to anchors.

        Fix by allowing scroll restoration if the the history item is null.

        Tested by WebKit.NoHistoryItemScrollToFragment API test.

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

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

        Introduce ServiceWorkerContainer::ensureSWClientConnection()
        https://bugs.webkit.org/show_bug.cgi?id=180146

        Reviewed by Youenn Fablet.

        Introduce ServiceWorkerContainer::ensureSWClientConnection() to reduce
        code duplication. Also use callOnMainThread() in preparation for this
        getting called from a service worker thread (now that ServiceWorkerContainer
        is exposed to service workers). This is needed because constructing the
        SWClientConnection initializes the IPC connection from the WebProcess to
        the StorageProcess, which involves a synchronous IPC with the UIProcess.
        Doing a synchronous IPC from a background thread is unsupported.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::ensureSWClientConnection):
        * workers/service/ServiceWorkerContainer.h:

2017-11-29  Antoine Quint  <graouts@apple.com>

        [iOS] Media controls should stop updating while media is playing in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=180144
        <rdar://problem/35060379>

        Reviewed by Eric Carlson.

        Updating inline media controls while playing media in fullscreen is useless since we're guaranteed not to
        have those controls visible, and hurtful since this has impact on battery life. To avoid this, we remove
        all media event listeners while in fullscreen on iOS, which will prevent the UI to be udpated since all
        updates are driven by media events.

        To implement this, we remove the MediaControllerSupport destroy() method and make it a disable() method,
        and factor code out of the MediaControllerSupport constructor into an enable() method that registers the
        media event listeners. Then, as we enter and exit fullscreen, we call the disable() and enable() method
        on the various MediaControllerSupport objects that were created to support the iOS inline media controls.

        Test: media/modern-media-controls/media-controller/ios/media-controller-stop-updates-in-fullscreen.html

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport):
        (ControlsVisibilitySupport.prototype.enable):
        (ControlsVisibilitySupport.prototype.disable):
        (ControlsVisibilitySupport.prototype.destroy): Deleted.
        * Modules/modern-media-controls/media/media-controller-support.js:
        (MediaControllerSupport):
        (MediaControllerSupport.prototype.enable):
        (MediaControllerSupport.prototype.disable):
        (MediaControllerSupport.prototype.destroy): Deleted.
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._updateControlsIfNeeded):
        (MediaController.prototype._updateSupportingObjectsEnabledState):
        (MediaController):

2017-11-29  Simon Fraser  <simon.fraser@apple.com>

        Viewport unit values affected by Comand-+ zoom
        https://bugs.webkit.org/show_bug.cgi?id=145614

        Reviewed by Zalan Bujtas.
        
        Don't apply zooming when resolving viewport-relative lengths, since they should not
        change based on the zoom level.

        Test: fast/css/viewport-units-zoom.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeNonCalcLengthDouble):

2017-11-29  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r225264.
        <rdar://problem/35750689>

        The changes in r225264 were meant to have no changes in behavior. However, I mistakenly
        switched to a secure coding API call in the PlatformPasteboard::write method. This should
        have used the 'insecure' version of this function.

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

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

        LibWebRTCPeerConnectionBackend should clean its stats promises when being cleaned
        https://bugs.webkit.org/show_bug.cgi?id=180101

        Reviewed by Eric Carlson.

        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doStop): Cleaning stat promises hash map.

2017-11-29  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Rename CoordinatedBuffer to Nicosia::Buffer
        https://bugs.webkit.org/show_bug.cgi?id=180135

        Reviewed by Carlos Garcia Campos.

        Rename CoordinatedBuffer to Nicosia::Buffer, starting an abstraction
        layer that will in the future allow us to prototype and potentially
        support different 2D rasterization libraries. The layer is envisioned
        as separate from the CoordinatedGraphics code, but will in the mid-term
        only be used there.

        In order to keep CMake changes to a minimum for now, the source code is
        included in the build along with the CoordinatedGraphics source files,
        in TextureMapper.cmake.

        No new tests -- no change in functionality.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaBuffer.cpp: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp.
        (Nicosia::Buffer::create):
        (Nicosia::Buffer::Buffer):
        (Nicosia::Buffer::context):
        (Nicosia::Buffer::uploadImage):
        * platform/graphics/nicosia/NicosiaBuffer.h: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBuffer.h.
        (Nicosia::Buffer::size const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::update):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:
        * platform/graphics/texmap/coordinated/Tile.h:

2017-11-29  Antoine Quint  <graouts@apple.com>

        Pressing the space bar while watching a fullscreen video doesn't play or pause
        https://bugs.webkit.org/show_bug.cgi?id=180033
        <rdar://problem/33610443>

        Reviewed by Eric Carlson.

        We register a "keydown" event to track when the space bar is pressed, and if the media is playing
        in fullscreen, we toggle playback. This does not interfere with full keyboard access since activating
        one of the media controls using the keyboard will not let the events we register for be dispatched
        this far along the event dispatch phase.

        Test: media/modern-media-controls/media-controller/media-controller-space-bar-toggle-playback.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.togglePlayback): Add a catch() statement since calling play() could sometime
        lead to some extraneous unhandled promise console logging that pollutes test output.
        (MediaController.prototype.handleEvent):

2017-11-28  Brent Fulgham  <bfulgham@apple.com>

        Adopt updated NSKeyed[Un]Archiver API when available
        https://bugs.webkit.org/show_bug.cgi?id=180127
        <rdar://problem/35710738>

        Reviewed by Alex Christensen.

        Switch to new NSKeyed[Un]Archiver methods when available. We do not attempt
        to adopt secure coding in places we were not under the original API.

        Most of the new API is wrapped in a set of convenience methods so we can
        build without the new API on older systems.

        No change in behavior.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString): Use new convenience method
        to archive the string object.
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Update to
        use secure coding where possible.
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Ditto.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Use new secure API.
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Ditto.
        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData): Update to
        secure coding API where possible.

2017-11-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cleanup Inspector classes be more consistent about using fast malloc / noncopyable
        https://bugs.webkit.org/show_bug.cgi?id=180119

        Reviewed by Devin Rousso.

        * inspector/InspectorCanvas.cpp:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorHistory.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorShaderProgram.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/InstrumentingAgents.cpp:
        * inspector/PageScriptDebugServer.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/WebInjectedScriptManager.cpp:
        * inspector/WebInjectedScriptManager.h:
        * inspector/WorkerScriptDebugServer.cpp:
        * inspector/WorkerScriptDebugServer.h:
        * inspector/agents/*
        Be more consistent about namespace / fast malloc / noncopyable.

2017-11-28  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Limit the number of active contexts in GraphicsContext3DCairo
        https://bugs.webkit.org/show_bug.cgi?id=166968

        Reviewed by Alex Christensen.

        Cairo's implementation of GraphicsContext3D should follow the Mac's
        and limit the number of active GraphicsContext3D objects.

        The active contexts are listed in a global Deque, with the first
        among them being recycled when the GraphicsContext3D::create()
        function sees that the limit has been reached. That function still
        returns null if even after recycling the number of contexts didn't
        decrease.

        Finally, in the GraphicsContext3D destructor, the context being
        destroyed is removed from the list of active contexts.

        No new tests -- relevant tests are now passing.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::activeContexts):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):

2017-11-28  Zalan Bujtas  <zalan@apple.com>

        Clean up spanners before creating nested column context
        https://bugs.webkit.org/show_bug.cgi?id=180107
        <rdar://problem/35686655>
        
        Reviewed by Antti Koivisto.

        When an existing spanner placeholder is moved into a newly constructed (and nested)
        multicolumn context, we figure it's not valid anymore and end up destroying it
        (see RenderMultiColumnFlow::fragmentedFlowDescendantInserted).
        This is very unfortunate since as we climb back on the stack, we could hit this renderer as
        the newly inserted child. 

        This patch proactively removes the invalid placeholders and moves the associated spanners back to their
        original position. 

        Test: fast/multicol/crash-when-constructing-nested-columns.html

        * rendering/RenderMultiColumnFlow.h:
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow): 
        RenderTreeUpdater::MultiColumn::destroyFragmentedFlow still relies on the placeholder removal
        logic in RenderMultiColumnFlow::fragmentedFlowDescendantInserted.

2017-11-28  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (High Sierra): Layout Test fast/multicol/newmulticol/spanner2.html is a flaky image failure on WK1
        https://bugs.webkit.org/show_bug.cgi?id=177826
        <rdar://problem/34876498>

        Reviewed by Alexey Proskuryakov.

        No new tests, fixes some already-broken tests.

        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::drawPDFPage):
        Save and restore one more piece of context state that
        PDFKit mutates while drawing.

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

        Allow attachment elements with no appearance to defer rendering to child nodes
        https://bugs.webkit.org/show_bug.cgi?id=180117
        <rdar://problem/35735339>

        Reviewed by Tim Horton.

        Test: fast/attachment/attachment-without-appearance.html

        When -webkit-appearance: none; is specified on an attachment element, allow it to fall back to rendering its
        subtree. Currently, attachment elements without an appearance don't allow this and truncate the render tree at
        the RenderAttachment, since RenderAttachment cannot have any children.

        In a followup, this will enable us to render a shadow subtree under the attachment element to display in-place
        attachment content, and easily toggle between in-place and icon display by changing the appearance.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::createElementRenderer):

        If no appearance is specified, emit a RenderBlockFlow instead of a RenderAttachment.

        (WebCore::HTMLAttachmentElement::setFile):
        (WebCore::HTMLAttachmentElement::attachmentRenderer const):

        Renamed from renderer(). HTMLAttachmentElement::renderer() now uses the superclass' implementation, and no
        longer returns a RenderAttachment in all circumstances. Instead, places that expect a RenderAttachment now go
        through HTMLAttachmentElement::renderAttachment() instead.

        (WebCore::HTMLAttachmentElement::parseAttribute):
        * html/HTMLAttachmentElement.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * rendering/RenderAttachment.h:
        (WebCore::HTMLAttachmentElement::renderer const): Deleted.

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

        Register Documents as ServiceWorker clients to the StorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=180047

        Reviewed by Brady Eidson.

        No change of behavior.
        These changes will be covered when implementing ServiceWorker Clients API.

        Registering a document when being created by DocumentLoader.
        In the future, we may restrict registration to only documents related to origins that have some ongoing service worker activity.
        This would require to keep track of which documents are registered so that we unregister these ones.
        This would also require to register existing documents when one of the document with the same origin starts registering a service worker.
        Unregistering a document inside prepareForDestruction.

        Storing all clients in SWServer as a HasMap keyed by ClientOrigin.
        Processing will then iterate through the list of clients scoped by the client origin.

        Adding a ClientOrigin class as a pair of top origin and frame origin since service workers will be related based on that information.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * page/ClientOrigin.h: Added.
        (WebCore::ClientOrigin::emptyKey):
        (WebCore::ClientOrigin::hash const):
        (WebCore::ClientOrigin::operator== const):
        (WTF::ClientOriginKeyHash::hash):
        (WTF::ClientOriginKeyHash::equal):
        (WTF::HashTraits<WebCore::ClientOrigin>::emptyValue):
        (WTF::HashTraits<WebCore::ClientOrigin>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ClientOrigin>::isDeletedValue):
        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::operator== const):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        * workers/service/server/SWServer.h:

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

        ServiceWorkerGlobalScope.clients should always return the same object
        https://bugs.webkit.org/show_bug.cgi?id=180116

        Reviewed by Geoffrey Garen.

        ServiceWorkerGlobalScope.clients should always return the same object, as per the specification:
        - https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope-interface

        Test: http/tests/workers/service/ServiceWorkerGlobalScope_clients_SameObject.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSServiceWorkerGlobalScopeCustom.cpp: Added.
        (WebCore::JSServiceWorkerGlobalScope::visitAdditionalChildren):
        * workers/service/ServiceWorkerClients.idl:
        * workers/service/ServiceWorkerGlobalScope.idl:

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

        Get rid of ServiceWorker::allWorkers() hashmap
        https://bugs.webkit.org/show_bug.cgi?id=180111

        Reviewed by Brady Eidson.

        Get rid of ServiceWorker::allWorkers() hashmap as it is not thread safe and we'll soon have
        ServiceWorker objects living in various service worker threads.

        Instead, we now have a per-ScriptExecutionContext map, which is inherently thread-safe.

        No new tests, no web-facing behavior change.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::registerServiceWorker):
        (WebCore::ScriptExecutionContext::unregisterServiceWorker):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::serviceWorker):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::getOrCreate):
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::~ServiceWorker):
        (WebCore::ServiceWorker::stop):
        * workers/service/ServiceWorker.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::updateWorkerState):

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

        [CG] PostScript images should be supported if they are sub-resource images
        https://bugs.webkit.org/show_bug.cgi?id=178502
        <rdar://problem/35102988>

        Reviewed by Simon Fraser.

        Make CachedImage detect the PostScript mime type and the file extension.
        Let PDFDocumentImage replaces the PostScript data with the equivalent PDF
        data and use it when creating the PDFDocument.

        Test: fast/images/eps-as-image.html

        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::isPDFRequest const):
        (WebCore::CachedImage::isPostScriptRequest const):
        These functions return whether the request is for a PDF or a PostScript 
        image. They check for the same conditions we do in WebPage::createPlugin().

        (WebCore::CachedImage::createImage): Create a PDFDocumentImage for either
        a PDF or a PostScript image. For PostScript, the data will be converted
        to PDF when all the data is received.

        (WebCore::CachedImage::updateBufferInternal): Use the size() of m_data
        instead of using the m_image->data() to setEncodedSize(). Image::m_data
        and CachedImage::m_data point to the same SharedBuffer.

        (WebCore::CachedImage::convertedDataIfNeeded const): Convert the PostScript
        data to PDF if the system can convert it. If the same can't convert it,
        return null so loading the image will be canceled.

        (WebCore::CachedImage::updateImageData): Get rid of the data argument since
        we always send the member m_data to this function.

        (WebCore::CachedImage::finishLoading): Convert the PostScript data to PDF 
        data since all the data is received. Use m_data to set setEncodedSize().

        * loader/cache/CachedImage.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isPostScriptMIMEType):
        (WebCore::MIMETypeRegistry::isPDFOrPostScriptMIMEType):
        * platform/MIMETypeRegistry.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::PDFDocumentImage):
        (WebCore::PDFDocumentImage::convertPostScriptDataToPDF):
        * platform/graphics/cg/PDFDocumentImage.h:

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

        Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
        https://bugs.webkit.org/show_bug.cgi?id=173793

        Reviewed by Joseph Pecoraro.

        Based on patch by Brian Burg.

        * ForwardingHeaders/inspector/InspectorValues.h: Removed.
        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids):
        (WebCore::sanitizeKeyids):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspect):
        * inspector/CommandLineAPIHost.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::releaseData):
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::buildArrayForVector):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        (WebCore::InspectorCanvas::buildArrayForImageData):
        (WebCore::InspectorCanvas::buildArrayForImageBitmap):
        * inspector/InspectorCanvas.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorOverlay.cpp:
        (WebCore::evaluateCommandInOverlay):
        (WebCore::InspectorOverlay::evaluateInOverlay):
        * inspector/InspectorOverlay.h:
        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createConsoleProfileData):
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createTimeStampData):
        (WebCore::TimelineRecordFactory::createAnimationFrameData):
        (WebCore::createQuad):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::appendLayoutRoot):
        * inspector/TimelineRecordFactory.h:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::computePseudoClassMask):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        * inspector/agents/InspectorCSSAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        (WebCore::parseConfigColor):
        (WebCore::parseQuad):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        (WebCore::InspectorDOMAgent::highlightSelector):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightNodeList):
        (WebCore::InspectorDOMAgent::highlightFrame):
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDatabaseAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::Inspector::idbKeyFromInspectorObject):
        (WebCore::Inspector::idbKeyRangeFromKeyRange):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/agents/InspectorIndexedDBAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::buildObjectForHeaders):
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        (WebCore::InspectorNetworkAgent::setExtraHTTPHeaders):
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setInstruments):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::didInvalidateLayout):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didScheduleStyleRecalculation):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willComposite):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setFrameIdentifier):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::sendEvent):
        (WebCore::InspectorTimelineAgent::createRecordEntry):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/agents/InspectorTimelineAgent.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseJSONObject):
        (WebCore::parseLicenseFormat):
        (WebCore::parseLicenseReleaseAcknowledgementFormat):
        (WebCore::CDMInstanceClearKey::updateLicense):
        (WebCore::CDMInstanceClearKey::removeSessionData):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::extractSinfData):
        * testing/Internals.cpp:

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

        Use the TextStream indent manipulator in more places
        https://bugs.webkit.org/show_bug.cgi?id=180065

        Reviewed by Sam Weinig.

        Replace writeIndent() with << indent, and use an IndentScope in a few places.

        * dom/ViewportArguments.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::dump const):
        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::operator<<):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::operator<<):

2017-11-28  Noah Chase  <nchase@gmail.com>

        Web Audio's AnalyserNode.fftSize cannot be greater than 2048 in Safari; spec says it can be up to 32768
        https://bugs.webkit.org/show_bug.cgi?id=180040

        Reviewed by Alex Christensen.

        I fixed up the existing test/output for realtimeanalyser-fft-sizing.
        one thing that I'm a bit unsure of here is whether or not there are other
        places in WebKit's Web Audio implementation that use fftSize and
        should have the wider range available (instead of capping out at
        2048). based on a quick naive scan I think that there are.

        * Modules/webaudio/RealtimeAnalyser.cpp:

2017-11-28  Daniel Bates  <dabates@apple.com>

        Add WebKitAdditions extension point to add user-agent stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=179702
        <rdar://problem/35711147>

        Reviewed by Andy Estes.

        * DerivedSources.make: Write user agent stylesheet generation recipe in terms of the
        automatic variable $^, which represents the list of the names of all prerequisites
        for the rule. Make automatically expands the names in $^ up to their full absolute
        path.

2017-11-28  Daniel Bates  <dabates@apple.com>

        [Cocoa] First pass at implementing alternative presentation button element
        https://bugs.webkit.org/show_bug.cgi?id=179785
        Part of <rdar://problem/34917108>

        Reviewed by Brent Fulgham.

        Implement support for substituting a button for one or more elements in a page.
        This is a first pass. We will refine the logic and the API/SPI in subsequent
        commits.

        Tests: accessibility/alternative-presentation-button-input-type.html
               accessibility/alternative-presentation-button.html
               fast/forms/alternative-presentation-button/replace-and-remove.html
               fast/forms/alternative-presentation-button/replacement.html

        * English.lproj/Localizable.strings: Add placeholder strings for localization.
        * SourcesCocoa.txt: Add some files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Element.h:
        * editing/Editor.cpp:
        (WebCore::Editor::clear): Clear out all substitutions. This is called whenever
        we are navigating between pages.
        (WebCore::Editor::substituteWithAlternativePresentationButton): Added.
        (WebCore::Editor::removeAlternativePresentationButton): Added.
        (WebCore::Editor::didInsertAlternativePresentationButtonElement): Added.
        (WebCore::Editor::didRemoveAlternativePresentationButtonElement): Added.
        * editing/Editor.h:
        * editing/cocoa/AlternativePresentationButtonSubstitution.cpp: Added.
        (WebCore::AlternativePresentationButtonSubstitution::AlternativePresentationButtonSubstitution):
        (WebCore::AlternativePresentationButtonSubstitution::initializeSavedDisplayStyles):
        (WebCore::AlternativePresentationButtonSubstitution::apply):
        (WebCore::AlternativePresentationButtonSubstitution::unapply):
        * editing/cocoa/AlternativePresentationButtonSubstitution.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::alternativePresentationButtonElement const): Added.
        (WebCore::HTMLInputElement::setTypeWithoutUpdatingAttribute): Added.
        (WebCore::HTMLInputElement::createInputType): Extracted the logic to create the InputType from
        HTMLInputElement::updateType() to here and added logic to create the input type for the
        alternative presentation button. This input type is not web exposed.
        (WebCore::HTMLInputElement::updateType): Modified to take the name of the InputType object to
        create as an argument and pass it through to HTMLInputElement::createInputType() to actually
        create it. Reordered the logic for destroying the shadow tree of the old InputType, deallocating
        the old InputType, and assigning the new InputType such that we assign the new InputType,
        destroy the shadow tree of the old InputType, and deallocate the old InputType. This ordering
        allows AlternativePresentationButtonSubstitution::substitute() to avoid restoring the input
        type saved before the substitution when the input type is changed by the page as opposed to
        by SPI.
        (WebCore::HTMLInputElement::parseAttribute): Pass the parsed type.
        (WebCore::HTMLInputElement::willAttachRenderers): Ditto.
        * html/HTMLInputElement.h: Change visibility of removeShadowRoot() from private to public so
        that it can be called from AlternativePresentationButtonSubstitution.
        * html/InputType.h:
        (WebCore::InputType::alternativePresentationButtonElement const): Added.
        * html/InputTypeNames.cpp:
        (WebCore::InputTypeNames::alternativePresentationButton): Added.
        * html/InputTypeNames.h:
        * html/shadow/cocoa/AlternativePresentationButtonElement.cpp: Added.
        (WebCore::AlternativePresentationButtonElement::create):
        (WebCore::AlternativePresentationButtonElement::AlternativePresentationButtonElement):
        (WebCore::AlternativePresentationButtonElement::insertedIntoAncestor):
        (WebCore::AlternativePresentationButtonElement::removedFromAncestor):
        (WebCore::AlternativePresentationButtonElement::didFinishInsertingNode):
        (WebCore::AlternativePresentationButtonElement::defaultEventHandler):
        * html/shadow/cocoa/AlternativePresentationButtonElement.h:
        * html/shadow/cocoa/AlternativePresentationButtonInputType.cpp: Added.
        (WebCore::AlternativePresentationButtonInputType::AlternativePresentationButtonInputType):
        (WebCore::AlternativePresentationButtonInputType::formControlType const):
        (WebCore::AlternativePresentationButtonInputType::appendFormData const):
        (WebCore::AlternativePresentationButtonInputType::supportsValidation const):
        (WebCore::AlternativePresentationButtonInputType::isTextButton const):
        (WebCore::AlternativePresentationButtonInputType::alternativePresentationButtonElement const):
        (WebCore::AlternativePresentationButtonInputType::createShadowSubtree):
        (WebCore::AlternativePresentationButtonInputType::destroyShadowSubtree):
        * html/shadow/cocoa/AlternativePresentationButtonInputType.h:
        * page/ChromeClient.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAlternativePresentationButtonLabel):
        (WebCore::alternativePresentationButtonTitle):
        (WebCore::alternativePresentationButtonSubtitle):
        * platform/LocalizedStrings.h:
        * testing/Internals.cpp:
        (WebCore::Internals::substituteWithAlternativePresentationButton): Added.
        (WebCore::Internals::removeAlternativePresentationButton): Added.
        * testing/Internals.h:
        * testing/Internals.idl:

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

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

        Tests are still timing out (Requested by ap on #webkit).

        Reverted changeset:

        "Pressing the space bar while watching a fullscreen video
        doesn't play or pause"
        https://bugs.webkit.org/show_bug.cgi?id=180033
        https://trac.webkit.org/changeset/225209

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

        Start exposing navigator.serviceWorker inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=180087

        Reviewed by Brady Eidson.

        Start exposing navigator.serviceWorker inside service workers as per:
        - https://w3c.github.io/ServiceWorker/#navigator-serviceworker

        Although the property is now exposed, the API on ServiceWorkerContainer is not
        supported yet inside service workers and the promise will be rejected. This will
        be implemented in a follow-up.

        Test: http/tests/workers/service/WorkerNavigator_serviceWorker.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWorkerNavigatorCustom.cpp: Added.
        (WebCore::JSWorkerNavigator::visitAdditionalChildren):
        * page/WorkerNavigator.idl:
        * workers/service/ServiceWorker.idl:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::controller const):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        * workers/service/ServiceWorkerContainer.idl:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::update):
        (WebCore::ServiceWorkerRegistration::unregister):
        * workers/service/ServiceWorkerRegistration.idl:

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

        Modernize GraphicsLayer dumping
        https://bugs.webkit.org/show_bug.cgi?id=180067

        Reviewed by Sam Weinig.

        Use the indent stream manipulator, and TextStream's built-in indent amount
        for GraphicsLayer dumping.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpLayer const):
        (WebCore::dumpChildren):
        (WebCore::GraphicsLayer::dumpProperties const):
        (WebCore::GraphicsLayer::layerTreeAsText const):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::dumpAdditionalProperties const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::dumpInnerLayer):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties const):
        * platform/graphics/ca/GraphicsLayerCA.h:

2017-11-28  Antoine Quint  <graouts@apple.com>

        Remove dead debugging code in modern media controls
        https://bugs.webkit.org/show_bug.cgi?id=180079

        Reviewed by Eric Carlson.

        This debug utility is no longer necessary and is just dead code.

        * 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):

2017-11-28  Antoine Quint  <graouts@apple.com>

        Skip back and forward buttons should not hard-code their numeric amount in localised strings
        https://bugs.webkit.org/show_bug.cgi?id=180077

        Reviewed by Eric Carlson.

        Split out the numeric value used in the skip forward and skip back localized strings to make
        it easier to localized the numeric value itself.

        Test: media/modern-media-controls/localized-strings/replaced-string.html

        * English.lproj/modern-media-controls-localized-strings.js:
        * Modules/modern-media-controls/main.js:
        (UIString):

2017-11-28  Antoine Quint  <graouts@apple.com>

        Pressing the space bar while watching a fullscreen video doesn't play or pause
        https://bugs.webkit.org/show_bug.cgi?id=180033
        <rdar://problem/33610443>

        Reviewed by Eric Carlson.

        We register a "keydown" event to track when the space bar is pressed, and if the media is playing
        in fullscreen, we toggle playback. This does not interfere with full keyboard access since activating
        one of the media controls using the keyboard will not let the events we register for be dispatched
        this far along the event dispatch phase.

        Test: media/modern-media-controls/media-controller/media-controller-space-bar-toggle-playback.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.togglePlayback): Add a catch() statement since calling play() could sometime
        lead to some extraneous unhandled promise console logging that pollutes test output.
        (MediaController.prototype.handleEvent):

2017-11-27  Tim Horton  <timothy_horton@apple.com>

        Web Content process crashes when dragging a link in recovery mode
        https://bugs.webkit.org/show_bug.cgi?id=180058
        <rdar://problem/35172170>

        Reviewed by Alexey Proskuryakov.

        * platform/mac/DragImageMac.mm:
        (WebCore::LinkImageLayout::LinkImageLayout):
        LinkPresentation isn't available in the base system. Make it optional,
        and fall back to the full URL like we do on platforms where it doesn't
        exist at all.

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

        Move callOnMainThreadAndWait() from SocketStreamHandleImplCFNet.cpp to MainThread.h
        https://bugs.webkit.org/show_bug.cgi?id=180060

        Reviewed by Alex Christensen.

        Move callOnMainThreadAndWait() from SocketStreamHandleImplCFNet.cpp to MainThread.h so that it can be reused.

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::callOnMainThreadAndWait): Deleted.

2017-11-27  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r225201.

        This caused multiple tests to timeout consistently.

        Reverted changeset:

        "Pressing the space bar while watching a fullscreen video
        doesn't play or pause"
        https://bugs.webkit.org/show_bug.cgi?id=180033
        https://trac.webkit.org/changeset/225201

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

        NavigatorBase::serviceWorker() should return a reference instead of a raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=180059

        Reviewed by Geoffrey Garen.

        NavigatorBase::serviceWorker() should return a reference instead of a raw pointer
        as it can never return null.

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitAdditionalChildren):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::serviceWorkerContainer):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::serviceWorker):
        * page/NavigatorBase.h:

2017-11-27  Antoine Quint  <graouts@apple.com>

        Pressing the space bar while watching a fullscreen video doesn't play or pause
        https://bugs.webkit.org/show_bug.cgi?id=180033
        <rdar://problem/33610443>

        Reviewed by Eric Carlson.

        We register a "keydown" event to track when the space bar is pressed, and if the media is playing
        in fullscreen, we toggle playback. This does not interfere with full keyboard access since activating
        one of the media controls using the keyboard will not let the events we register for be dispatched
        this far along the event dispatch phase.

        Test: media/modern-media-controls/media-controller/media-controller-space-bar-toggle-playback.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.togglePlayback): Add a catch() statement since calling play() could sometime
        lead to some extraneous unhandled promise console logging that pollutes test output.
        (MediaController.prototype.handleEvent):

2017-11-27  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r225173.

        This caused multiple tests to timeout consistently.

        Reverted changeset:

        "Pressing the space bar while watching a fullscreen video
        doesn't play or pause"
        https://bugs.webkit.org/show_bug.cgi?id=180033
        https://trac.webkit.org/changeset/225173

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

        ASSERTION FAILED: addResult.isNewEntry WebCore::SWServerRegistration::addClientUsingRegistration(WebCore::ServiceWorkerClientIdentifier const&) + 141
        https://bugs.webkit.org/show_bug.cgi?id=180049

        Reviewed by Brady Eidson.

        SWServer::serviceWorkerStoppedControllingClient() was failing to remove the client from the
        SWServerRegistration in some cases. This is because we relied on the Service Worker Identifier
        to get the SWServerRegistration, via the corresponding SWServerServiceWorker object. However,
        It is possible for the SWServerServiceWorker to have been destroyed already.

        In serviceWorkerStartedControllingClient / serviceWorkerStoppedControllingClient, we now
        pass the registration identifier, so that we are able to look up the registration directly,
        without going through the service worker object.

        No new tests, already covered by imported/w3c/web-platform-tests/service-workers/service-worker/claim-affect-other-registration.https.html.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::setActiveServiceWorker):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        * workers/service/ServiceWorkerData.cpp:
        (WebCore::ServiceWorkerData::isolatedCopy const):
        * workers/service/ServiceWorkerData.h:
        (WebCore::ServiceWorkerData::encode const):
        (WebCore::ServiceWorkerData::decode):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::Connection::addServiceWorkerRegistrationInServer):
        (WebCore::SWServer::Connection::removeServiceWorkerRegistrationInServer):
        (WebCore::SWServer::Connection::serviceWorkerStartedControllingClient):
        (WebCore::SWServer::Connection::serviceWorkerStoppedControllingClient):
        (WebCore::SWServer::addClientServiceWorkerRegistration):
        (WebCore::SWServer::removeClientServiceWorkerRegistration):
        (WebCore::SWServer::serviceWorkerStartedControllingClient):
        (WebCore::SWServer::serviceWorkerStoppedControllingClient):
        (WebCore::SWServer::installContextData):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        * workers/service/server/SWServerWorker.h:

2017-11-27  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r225142): Crashes when command clicking or force touching links
        https://bugs.webkit.org/show_bug.cgi?id=180055
        <rdar://problem/35703910>

        Reviewed by Wenson Hsieh.

        No new tests; affects an existing API test.

        * editing/mac/DictionaryLookup.mm:
        (WebCore::tokenRange):
        The 'options' out argument from tokenRangeForString is autoreleased.

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

        Implement OffscreenCanvas.getContext("webgl")
        https://bugs.webkit.org/show_bug.cgi?id=180050
        <rdar://problem/35705473>

        Reviewed by Sam Weinig.

        Implement enough of getContext("webgl") to actually return an
        active WebGLRenderingContext, even though it isn't actually
        hooked up to draw.

        Introduce a new type, WebGLCanvas, which is a variant of HTMLCanvasElement
        and OffscreenCanvas, so that it can be exposed by the 'canvas' attribute
        on WebGLRenderingContext.

        At the moment we still assume that all uses of WebGLRenderingContext come
        from HTMLCanvasElement, so add a bunch of logic to detect that case.

        Updated the existing (proposed) WPT.

        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::getContext): Implement enough of getContext to
        return a WebGLRenderingContext.
        * html/OffscreenCanvas.h: Use the new OffscreenRenderingContext type, even
        though it's just a WebGLRenderingContext at the moment.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::canvas): Now returns a WebGLCanvas.
        (WebCore::WebGLRenderingContextBase::htmlCanvas): Helper to get the HTMLCanvasElement if it exists.
        (WebCore::WebGLRenderingContextBase::offscreenCanvas): Ditto for OffscreenCanvas.
        (WebCore::WebGLRenderingContextBase::checkForContextLossHandling): Guard for htmlCanvas().
        (WebCore::WebGLRenderingContextBase::registerWithWebGLStateTracker):
        (WebCore::WebGLRenderingContextBase::setupFlags):
        (WebCore::WebGLRenderingContextBase::addActivityStateChangeObserverIfNecessary):
        (WebCore::WebGLRenderingContextBase::removeActivityStateChangeObserver):
        (WebCore::WebGLRenderingContextBase::markContextChanged):
        (WebCore::WebGLRenderingContextBase::markContextChangedAndNotifyCanvasObserver):
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContextBase::reshape):
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::isContextLostOrPending):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::loseContextImpl):
        (WebCore::WebGLRenderingContextBase::printToConsole):
        (WebCore::WebGLRenderingContextBase::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedEvent):
        (WebCore::WebGLRenderingContextBase::clampedCanvasSize):
        * html/canvas/WebGLRenderingContextBase.h: Define WebGLCanvas.
        * html/canvas/WebGLRenderingContextBase.idl:

        * inspector/InspectorInstrumentation.h: Handle the variant options, although leave OffscreenCanvas
        unimplemented for the moment.
        (WebCore::InspectorInstrumentation::didEnableExtension):
        (WebCore::InspectorInstrumentation::didCreateProgram):
        (WebCore::InspectorInstrumentation::willDeleteProgram):
        (WebCore::InspectorInstrumentation::isShaderProgramDisabled):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didEnableExtension):
        (WebCore::InspectorCanvasAgent::didCreateProgram):

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

        Unreviewed, fix an improper #include

        * platform/network/soup/NetworkStorageSessionSoup.cpp:

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

        imported/w3c/web-platform-tests/url/failure.html crashes on debug builds
        https://bugs.webkit.org/show_bug.cgi?id=172337

        Reviewed by Chris Dumez.

        There were two problems:
        1. Invalid URLs can contain non-ASCII characters in its UTF8 representation.
        We should not put these URLs into content extension finite state machines.  They won't load anyways.
        2. If we don't have any content extensions installed, we still call String.utf8 unnecessarily.  Let's not.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):

2017-11-27  Simon Fraser  <simon.fraser@apple.com>

        Use TextStream's indent tracking, rather than passing indent to all the externalRepresentation() functions
        https://bugs.webkit.org/show_bug.cgi?id=180027

        Reviewed by Jon Lee.

        Remove all the indent arguments, and make use of TextStream::IndentScope to control
        output indentation.
        
        Add an indent stream manipulator so you can say
          ts << indent << "text"
        to write the indent.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::externalRepresentation const):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::externalRepresentation const):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::externalRepresentation const):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::externalRepresentation const):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::externalRepresentation const):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::externalRepresentation const):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::externalRepresentation const):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::externalRepresentation const):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::externalRepresentation const):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::externalRepresentation const):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::externalRepresentation const):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::externalRepresentation const):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::externalRepresentation const):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::externalRepresentation const):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::externalRepresentation const):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::externalRepresentation const):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::externalRepresentation const):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::externalRepresentation const):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::externalRepresentation const):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeLayer):
        (WebCore::writeLayerRenderers):
        (WebCore::writeLayers):
        (WebCore::externalRepresentation):
        * rendering/RenderTreeAsText.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):
        (WebCore::writeSVGInlineTextBoxes):
        (WebCore::writeStandardPrefix):
        (WebCore::writeChildren):
        (WebCore::writeSVGResourceContainer):
        (WebCore::writeSVGContainer):
        (WebCore::write):
        (WebCore::writeSVGText):
        (WebCore::writeSVGInlineText):
        (WebCore::writeSVGImage):
        (WebCore::writeSVGGradientStop):
        (WebCore::writeResources):
        * rendering/svg/SVGRenderTreeAsText.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::externalRepresentation const):
        * svg/graphics/filters/SVGFEImage.h:

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

        Give Document a strongly typed identifier instead of a uint64_t
        https://bugs.webkit.org/show_bug.cgi?id=180041

        Reviewed by Youenn Fablet.

        Give Document a strongly typed identifier instead of a uint64_t, for clarity.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::m_identifier):
        * dom/Document.h:
        (WebCore::Document::identifier const):
        * dom/DocumentIdentifier.h: Copied from Source/WebCore/workers/service/ServiceWorkerClientIdentifier.h.
        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::toString const):
        (WebCore::ServiceWorkerClientIdentifier::encode const):
        (WebCore::ServiceWorkerClientIdentifier::decode):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        (WebCore::SWClientConnection::notifyClientsOfControllerChange):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::serviceWorkerStartedControllingClient):
        (WebCore::SWServer::Connection::serviceWorkerStoppedControllingClient):
        (WebCore::SWServer::serviceWorkerStartedControllingClient):
        (WebCore::SWServer::serviceWorkerStoppedControllingClient):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::addClientUsingRegistration):
        (WebCore::SWServerRegistration::removeClientUsingRegistration):
        * workers/service/server/SWServerRegistration.h:

2017-11-27  Simon Fraser  <simon.fraser@apple.com>

        Optimize FEDisplacementMap
        https://bugs.webkit.org/show_bug.cgi?id=180023

        Reviewed by Sam Weinig.

        Make FEDisplacementMap about 3x faster by operating on whole pixels rather than
        individual channels. There's no per-channel logic once the srcX and srcY are computed.
        
        Other sundry cleanup.

        * platform/graphics/ColorUtilities.h:
        (WebCore::byteOffsetOfPixel): Will use this in more places in future.
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::xChannelIndex const):
        (WebCore::FEDisplacementMap::yChannelIndex const):

2017-11-27  Tim Horton  <timothy_horton@apple.com>

        One too many zeroes in macOS version number in FeatureDefines
        https://bugs.webkit.org/show_bug.cgi?id=180011

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2017-11-27  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] CoordinatedGraphicsLayer doesn't need to inherit from TextureMapperPlatformLayer::Client
        https://bugs.webkit.org/show_bug.cgi?id=180036

        Reviewed by Carlos Garcia Campos.

        There's no reason CoordinatedGraphicsLayer should inherit from
        TextureMapperPlatformLayer::Client. CoordinatedGraphicsLayer objects are
        not used anywhere through that type, and all the overridden methods are
        empty anyway. The TextureMapperPlatformLayer::Client class (along with
        TextureMapperPlatformLayer) is nowadays only used in the direct
        TextureMapper implementation of GraphicsLayer.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::platformLayerWillBeDestroyed): Deleted.
        (WebCore::CoordinatedGraphicsLayer::setPlatformLayerNeedsDisplay): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2017-11-27  Antoine Quint  <graouts@apple.com>

        Pressing the space bar while watching a fullscreen video doesn't play or pause
        https://bugs.webkit.org/show_bug.cgi?id=180033
        <rdar://problem/33610443>

        Reviewed by Eric Carlson.

        We register a "keydown" event to track when the space bar is pressed, and if the media is playing
        in fullscreen, we toggle playback. This does not interfere with full keyboard access since activating
        one of the media controls using the keyboard will not let the events we register for be dispatched
        this far along the event dispatch phase.

        Test: media/modern-media-controls/media-controller/media-controller-space-bar-toggle-playback.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        (MediaController.prototype.togglePlayback): Add a catch() statement since calling play() could sometime
        lead to some extraneous unhandled promise console logging that pollutes test output.
        (MediaController.prototype.handleEvent):

2017-11-27  Simon Fraser  <simon.fraser@apple.com>

        Optimize FEMorphology
        https://bugs.webkit.org/show_bug.cgi?id=180020

        Reviewed by Sam Weinig.

        Use const PaintingData&.
        Compute all components at once.
        Avoid Vector<> capacity changes during the pixel loop.
        Tweak the parallel jobs scaling.
        Templatize the the inner loop functions that compute min or max based
        on the filter type to avoid conditionals in tight loops.
        
        This is about a 4x speedup before the parallel jobs tweaking. With fixed parallelism,
        a 200x200 filter went from 15ms to about 1ms with these changes.

        * platform/graphics/ColorUtilities.h:
        (WebCore::ColorComponents::fromRGBA):
        (WebCore::ColorComponents::toRGBA const):
        (WebCore::perComponentMax):
        (WebCore::perComponentMin):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware): Remove some old perf logging code.
        TimingScope now does something similar.
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::pixelArrayIndex):
        (WebCore::minOrMax):
        (WebCore::columnExtremum):
        (WebCore::kernelExtremum):
        (WebCore::FEMorphology::platformApplyGeneric):
        (WebCore::FEMorphology::platformApplyWorker):
        (WebCore::FEMorphology::platformApply):
        (WebCore::FEMorphology::platformApplySoftware):
        (WebCore::shouldSupersedeExtremum): Deleted.
        * platform/graphics/filters/FEMorphology.h:

2017-11-27  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Change the ClearKey's SystemID value
        https://bugs.webkit.org/show_bug.cgi?id=180007

        Reviewed by Xabier Rodriguez-Calvar.

        Use 1077efec-c0b2-4d02-ace3-3c1e52e2fb4b instead of
        58147ec8-0423-4659-92e6-f52c5ce8c3cc, as is specified in W3C.
        https://www.w3.org/TR/eme-initdata-cenc/#common-system-definition

        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:

2017-11-27  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Display issues with child with max-width
        https://bugs.webkit.org/show_bug.cgi?id=178973

        Reviewed by Darin Adler.

        We have an utility function to compute the grid item's margins
        when the item still needs to layout. We used the function
        RenderStyle::hasMarings to decide whether such margin computation
        worths. However, we need that function to operate on a specific
        axis, hence I added a new function adding such logic.

        Additionally, we must treat any 'auto' margin as 0px during the
        tracks sizing algorithm, as the CSS Grid spec states:

          - https://drafts.csswg.org/css-grid/#auto-margins

        Test: fast/css-grid-layout/auto-margins-ignored-during-track-sizing.html

        * rendering/GridLayoutFunctions.cpp:
        (WebCore::GridLayoutFunctions::childHasMargin): New funciton with axis dependent logic.
        (WebCore::GridLayoutFunctions::computeMarginLogicalSizeForChild): Ignore auto margins.
        (WebCore::GridLayoutFunctions::marginLogicalSizeForChild): Ignore auto margins.

2017-11-26  Simon Fraser  <simon.fraser@apple.com>

        feImage as filter input has skewed colors
        https://bugs.webkit.org/show_bug.cgi?id=180021

        Reviewed by Sam Weinig.
        
        Using an <feImage> as a filter input sometimes results in incorrect colors, because
        the image is being sourced as linearRGB when it should always be sRGB.
        
        Fix by setting the result colorspace in FEImage before we allocate the output
        buffer.

        Tests: svg/filters/feImage-color-fidelity-expected.svg
               svg/filters/feImage-color-fidelity.svg

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2017-11-26  Minsheng Liu  <lambda@liu.ms>

        Cleanup code for RenderMathMLUnderOver::layoutBlock
        https://bugs.webkit.org/show_bug.cgi?id=179681

        Reviewed by Frédéric Wang.

        The patch removes some unnecessary calls to layoutIfNeeds() and guards the change
        with assertion. Since there is no behavior change, no new tests are required.

        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::stretchHorizontalOperatorsAndLayoutChildren):
        (WebCore::RenderMathMLUnderOver::layoutBlock):
        (WebCore::RenderMathMLUnderOver::computeOperatorsHorizontalStretch): Deleted.
        * rendering/mathml/RenderMathMLUnderOver.h:

2017-11-26  Simon Fraser  <simon.fraser@apple.com>

        Use more Uint8ClampedArray& and constness in filter and image buffer code
        https://bugs.webkit.org/show_bug.cgi?id=180008

        Reviewed by Darin Adler.

        Use references to Uint8ClampedArrays rather than pointers where necessary.
        
        Use const for source data buffers when possible, and uint8_t for the underlying
        data type.
        
        Fix a bug in FEGaussianBlur where the output of the last blur pass wasn't
        copied to the result buffer, which required a test adjustment.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::putImageData):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::genericConvertToLuminanceMask):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurShadowBuffer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData const):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/cpu/arm/filters/FECompositeArithmeticNEON.h:
        (WebCore::FEComposite::computeArithmeticPixelsNeon):
        (WebCore::FEComposite::platformArithmeticNeon):
        * platform/graphics/cpu/arm/filters/FEGaussianBlurNEON.h:
        (WebCore::boxBlurNEON):
        * platform/graphics/cpu/arm/filters/NEONHelpers.h:
        (WebCore::loadRGBA8AsFloat):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::effectApplyAccelerated):
        (WebCore::effectType):
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::computeArithmeticPixels):
        (WebCore::FEComposite::platformArithmeticSoftware):
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::setDestinationPixels):
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels):
        (WebCore::FEConvolveMatrix::fastSetOuterPixels):
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlurAlphaOnly):
        (WebCore::boxBlur):
        (WebCore::accelerateBoxBlur):
        (WebCore::standardBoxBlur):
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::platformApplyWorker):
        (WebCore::FEGaussianBlur::platformApply):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::columnExtremum):
        (WebCore::FEMorphology::platformApplyGeneric):
        (WebCore::FEMorphology::platformApplyDegenerate):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion const):
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::forceValidPreMultipliedPixels):
        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::unmultipliedResult):
        (WebCore::FilterEffect::premultipliedResult):
        (WebCore::FilterEffect::copyImageBytes const):
        (WebCore::copyPremultiplyingAlpha):
        (WebCore::copyUnpremultiplyingAlpha):
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::putData):
        * platform/graphics/win/ImageBufferDataDirect2D.h:

2017-11-25  Zalan Bujtas  <zalan@apple.com>

        Make RenderSnapshottedPlugIn ISO allocated
        https://bugs.webkit.org/show_bug.cgi?id=180010
        <rdar://problem/35671977>

        Reviewed by David Kilzer.

        RenderEmbeddedObject, the base class is ISO allocated since r224537. 

        * rendering/RenderSnapshottedPlugIn.cpp:
        * rendering/RenderSnapshottedPlugIn.h:

2016-08-05  Darin Adler  <darin@apple.com>

        Fix some minor problems in the StringImpl header
        https://bugs.webkit.org/show_bug.cgi?id=160630

        Reviewed by Brent Fulgham.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text): Use stripLeadingAndTrailingHTMLSpaces
        instead of stripWhiteSpace(isHTMLSpace).
        (WebCore::HTMLOptionElement::value): Ditto.
        (WebCore::HTMLOptionElement::label): Ditto.
        (WebCore::HTMLOptionElement::displayLabel): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument): Use stripLeadingAndTrailingHTMLSpaces
        instead of calling the general purpose one and passing isHTMLSpace.
        * platform/network/HTTPParsers.h:
        (WebCore::stripLeadingAndTrailingHTTPSpaces): Updated to use the
        new name, stripLeadingAndTrailingCharacters.

2017-11-23  Darin Adler  <darin@apple.com>

        Fix dictionary leak in lookup, convert FindOptions to OptionSet, tweak code style nearby
        https://bugs.webkit.org/show_bug.cgi?id=179981

        Reviewed by Sam Weinig.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rangeMatchesTextNearRange): Pass { } instead of 0.
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection const): Use { }
        instead of | to construct value.
        * editing/Editor.cpp:
        (WebCore::Editor::findString): Use contains instead of & to test an option.
        (WebCore::Editor::rangeOfString): Ditto.
        (WebCore::Editor::countMatchesForText): Ditto.
        * editing/EditorCommand.cpp:
        (WebCore::executeFindString): Use { } instead of | to construct value.
        * editing/FindOptions.h: Use OptionSet for type.
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::SearchBuffer): Use contains instead of &. Also use -= instead
        of &= coupled with ~ to remove a flag.
        (WebCore::SearchBuffer::isWordEndMatch const): Ditto.
        (WebCore::SearchBuffer::isWordStartMatch const): Ditto.
        (WebCore::SearchBuffer::search): Ditto.
        (WebCore::findIteratorOptions): Ditto.
        (WebCore::findClosestPlainText): Ditto.
        (WebCore::findPlainText): Ditto.

        * editing/mac/DictionaryLookup.h: Changed optional dictionary out arguments to
        RetainPtr<NSDictionary>. Before, they were returning a retained object, but callers
        did not seem to realize that.
        * editing/mac/DictionaryLookup.mm:
        (WebCore::tokenRange): Added helper. Takes care of doing adoptNS on the options
        dictionary, and also handles the Objective-C exception possibility cleanly. Also
        fixed the exception case to return NSNotFound instead of a zero-length range at
        the location we are searching, which is what the code expects.
        (WebCore::DictionaryLookup::rangeForSelection): Refactored to use the tokenRange
        helper function, and also to do much less work when the options pointer is null.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Use the tokenRange helper
        function and also use auto a bunch to tighten up the code a bit.
        (WebCore::DictionaryLookup::stringForPDFSelection): Ditto.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::find const): Use |= instead of | to build find options.
        * page/Page.cpp:
        (WebCore::Page::findString): Use contains instead of & and also - instead of
        & combined with ~.
        (WebCore::Page::findStringMatchingRanges): Ditto.
        (WebCore::Page::rangeOfString): Ditto.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
        Pass nullptr to indicate we don't need the options dictionary. The code before
        was passing a pointer to a null, which meant we would do the work to get the
        options dictionary, not use it, and also leak it.

        * testing/Internals.cpp:
        (WebCore::Internals::rangeOfStringNearLocation): Pass { } instead of 0.
        (WebCore::Internals::rangeForDictionaryLookupAtLocation): Pass nullptr to
        indicate we don't need the options dictionary as above.
        (WebCore::parseFindOptions): Initialize options without an explicit 0, since
        an OptionSet starts out empty rather than uninitialized.

2017-11-24  Antti Koivisto  <antti@apple.com>

        Style resolution spin due to calc() values always comparing inequal (seen on arstechnica.com)
        https://bugs.webkit.org/show_bug.cgi?id=179982
        <rdar://problem/35677991>

        Reviewed by Darin Adler.

        Test: transitions/transition-with-calc-spin.html

        Something like calc(100% - 10px) would compare inequal to itself. This causes the implicit animation engine think that
        there is a new target value after style resolution and restart the transition. Starting the transition triggers another style
        resolution on zero duration timer and so on.

        * platform/CalculationValue.cpp:
        (WebCore::operator==):
        * platform/CalculationValue.h:

        Deep compare the child vectors.

2017-11-24  Antoine Quint  <graouts@apple.com>

        Captions move when <video> with no controls is hovered
        https://bugs.webkit.org/show_bug.cgi?id=178600
        <rdar://problem/35112309>

        Reviewed by Jer Noble.

        We should only reduce the text tracks container height to make room for the controls
        bar when controls are enabled.

        Tests: media/modern-media-controls/text-tracks/text-tracks-height-no-controls.html
               media/modern-media-controls/text-tracks/text-tracks-height-with-controls.html

        * Modules/modern-media-controls/controls/text-tracks.css:
        (video[controls]::-webkit-media-text-track-container.visible-controls-bar):
        (video::-webkit-media-text-track-container.visible-controls-bar): Deleted.

2017-11-23  Simon Fraser  <simon.fraser@apple.com>

        Some FilterEffect cleanup and logging
        https://bugs.webkit.org/show_bug.cgi?id=179932

        Reviewed by Darin Adler.
        
        Rename the FilterEffect functions that get the result of the filter
        to have "result" in the name.
        
        Re-order FilterEffect member variables and use initializers. webkit.org/b/45614
        is closed so remove the comment about things moving to RenderSVGResourceFilterPrimitive.
        
        Add a virtual filterName() function for use by logging.
        
        Add a Filters log channel. Log some stuff.
        
        Rename RenderSVGResourceFilter::m_filter to m_rendererFilterDataMap.

        * platform/Logging.h:
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplySoftware):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyDegenerate):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::operator<<):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::imageBufferResult):
        (WebCore::FilterEffect::unmultipliedResult):
        (WebCore::FilterEffect::premultipliedResult):
        (WebCore::FilterEffect::copyImageBytes const): This can be const. It'a also crazy
        to mark a large, slow function like this as 'inline'.
        (WebCore::FilterEffect::copyUnmultipliedResult):
        (WebCore::FilterEffect::copyPremultipliedResult):
        (WebCore::FilterEffect::createImageBufferResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        (WebCore::FilterEffect::transformResultColorSpace):
        (WebCore::FilterEffect::asImageBuffer): Deleted.
        (WebCore::FilterEffect::asUnmultipliedImage): Deleted.
        (WebCore::FilterEffect::asPremultipliedImage): Deleted.
        (WebCore::FilterEffect::copyImageBytes): Deleted.
        (WebCore::FilterEffect::copyUnmultipliedImage): Deleted.
        (WebCore::FilterEffect::copyPremultipliedImage): Deleted.
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::output const):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        (WebCore::RenderSVGResourceFilter::drawingRegion const):
        (WebCore::operator<<):
        * rendering/svg/RenderSVGResourceFilter.h:
        (WebCore::FilterData::FilterData): Deleted.
        * svg/graphics/filters/SVGFEImage.h:

2017-11-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Allow getComputedStyle() to return animated values for accelerated animations
        https://bugs.webkit.org/show_bug.cgi?id=179975
        <rdar://problem/35676811>

        Reviewed by Dean Jackson.

        In case we're running an accelerated animation, we are not blending RenderStyles as the animation
        progresses and thus we need to hook into computeRenderStyleForProperty() to query the DocumentTimeline
        for the animated style of running accelerated animations where we blend styles manually for the
        animation's current time.

        Test: http/wpt/wk-web-animations/interfaces/keyframe-effect-getComputedStyle.html

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animatedStyleForRenderer): Iterate through all running accelerated animations
        for the element to which the provided renderer is attached and ask for their animated styles.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getAnimatedStyle): Manually blend all animated properties and populate the provided
        RenderStyle with their values, creating the RenderStyle if needed.
        * animation/KeyframeEffect.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty): Query the DocumentTimeline for accelerated animated properties in
        case such animations are running, otherwise let the CSS animation controller report the animated values.

2017-11-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] CoordinatedGraphicsLayer::updateContentBuffers() should always assume a non-null CoordinatedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=179977

        Reviewed by Carlos Garcia Campos.

        CoordinatedGraphicsLayer::updateContentBuffers() retrieves a RefPtr<CoordinatedBuffer>
        from the CompositingCoordinator. This pointer should never be null since if no
        existing UpdateAtlas can provide the necessary memory area, a fresh UpdateAtlas is
        created and its buffer returned. This can't fail in theory since the tiles that are
        being updated are smaller than the UpdateAtlas area.

        The CoordinatedGraphicsLayerClient::getCoordinatedBuffer() method is updated to
        always return a Ref<CoordinatedBuffer> value. Code in updateContentBuffers() is
        updated to remove a null-check on what is now the Ref<CoordinatedBuffer> value.

        No new tests -- no change in functionality.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2017-11-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Perform accelerated animations when possible
        https://bugs.webkit.org/show_bug.cgi?id=179973
        <rdar://problem/34953922>

        Reviewed by Dean Jackson.

        When we're entering and leaving the active duration of an animation effect, we now check
        whether the animation can be accelerated, using the existing CSSPropertyAnimation::animationOfPropertyIsAccelerated()
        utility, and start and stop animations using the startAnimation() and animationFinished() functions on RenderBoxModelObject.

        This patch is only a first step towards full support for accelerated animations,
        there are two known issues at the moment. Because we're not blending the styles to perform
        the animation, getComputedStyle() will not return the animated value (webkit.org/b/179974).
        Additionally, if other animations happen to run later during the active state of an animation
        that can run accelerated, we will not fall back to software-only animation for this
        element and these animations will appear not to run (webkit.org/b/179975). These will be
        addressed in follow-up patches.

        Tests: webanimations/left-and-opacity-animation-yields-no-compositing.html
               webanimations/opacity-animation-no-longer-composited-upon-completion.html
               webanimations/opacity-animation-yields-compositing.html
               webanimations/width-and-opacity-separate-animation-yields-no-compositing.html

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimations): Check in the map of pending accelerated animations
        to see if any animation requires toggling their active state after their styles have been invalidated.
        (WebCore::DocumentTimeline::animationAcceleratedRunningStateDidChange): New function to
        let animations indicate that they need to have their accelerated backing animation toggled after
        style invalidation has been completed.
        (WebCore::DocumentTimeline::runningAnimationsForElementAreAllAccelerated): This function is used
        in RenderLayerCompositor::requiresCompositingForAnimation() to identify whether an element requires
        hardware compositing due to running accelerated animations. We check all running animations for the
        provided element to see if they can all be running accelerated and return true in this situation only.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::applyAtLocalTime): Identify if we're crossing into or out of the active state
        for an animation and check if it will be or has been running accelerated such that we can notify the
        DocumentTimeline, through the associated animation, that the accelerated backing animation will need to
        be toggled after style invalidation has been completed.
        (WebCore::KeyframeEffect::shouldRunAccelerated): Check that all properties for this animation
        effect can be accelerated according to CSSPropertyAnimation::animationOfPropertyIsAccelerated().
        (WebCore::KeyframeEffect::startOrStopAccelerated): Start or stop the associated accelerated
        animation through the associated element's RenderBoxModelObject renderer.
        * animation/KeyframeEffect.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::acceleratedRunningStateDidChange): Called from AnimationEffect::applyAtLocalTime(),
        we forward to the DocumentTimeline the information that the animation will cross an active state boundary while
        allowing to be backed by hardware compositing.
        (WebCore::WebAnimation::startOrStopAccelerated): Forward to the associated KeyframeEffect that accelerated
        animation backing should be toggled.
        * animation/WebAnimation.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const): Check via the renderer's element's
        DocumentTimeline that all running animations for this particular element are accelerated to ensure that
        the element will be hardware-composited.

2017-11-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] PasteboardWin.cpp(653): error C2039: 'containsOnlyASCII': is not a member of 'WTF::String'
        https://bugs.webkit.org/show_bug.cgi?id=179991

        Unreviewed build fix.

        No new tests (No behaviour change).

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeURLToDataObject): Renamed containsOnlyASCII() to isAllASCII().

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

        [GTK] [Debug] Fix build after r225117.
        https://bugs.webkit.org/show_bug.cgi?id=179907

        Unreviewed build fix.

        r225117 renamed containsOnlyASCII() to isAllASCII().
        And this reference was not updated for the GTK Debug build.

        No new tests, its a build fix.

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):

2017-11-23  Simon Fraser  <simon.fraser@apple.com>

        FELighting cleanup and optimization
        https://bugs.webkit.org/show_bug.cgi?id=179933

        Reviewed by Darin Adler.

        Make FELighting about 25% faster by maintaining an "alpha" window of the alpha
        values of the 9 pixels surrounding the current pixel, and sliding this window over
        when moving to the next pixel. This avoids reading the same alpha values from the original
        buffer multiple times.

        Clean up LightSource and subclasses, adding SPECIALIZE_TYPE_TRAITS macros,
        and turning updatePaintingData() into a function with no side effects that returns
        the required data.

        Remove explicit 'inline' keywords, allowing the compiler to make inlining decisions.

        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):
        * platform/graphics/filters/DistantLightSource.cpp:
        (WebCore::DistantLightSource::initPaintingData):
        (WebCore::DistantLightSource::computePixelLightingData const):
        (WebCore::DistantLightSource::updatePaintingData): Deleted.
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::LightingData::interiorNormal const):
        (WebCore::FELighting::setPixel):
        (WebCore::FELighting::setPixelInternal):
        (WebCore::FELighting::platformApplyGenericPaint):
        (WebCore::FELighting::platformApplyGeneric):
        (WebCore::FELighting::platformApply):
        (WebCore::FELighting::drawLighting):
        (WebCore::FELighting::inlineSetPixel): Deleted.
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::AlphaWindow::topLeft const):
        (WebCore::FELighting::AlphaWindow::left const):
        (WebCore::FELighting::AlphaWindow::bottomLeft const):
        (WebCore::FELighting::AlphaWindow::top const):
        (WebCore::FELighting::AlphaWindow::center const):
        (WebCore::FELighting::AlphaWindow::bottom const):
        (WebCore::FELighting::AlphaWindow::setTop):
        (WebCore::FELighting::AlphaWindow::setCenter):
        (WebCore::FELighting::AlphaWindow::setBottom):
        (WebCore::FELighting::AlphaWindow::setTopRight):
        (WebCore::FELighting::AlphaWindow::setRight):
        (WebCore::FELighting::AlphaWindow::setBottomRight):
        (WebCore::FELighting::AlphaWindow::shiftRow):
        (WebCore::FELighting::AlphaWindow::shift):
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        (WebCore::PointLightSource::computePixelLightingData const):
        (WebCore::PointLightSource::updatePaintingData): Deleted.
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SpotLightSource.cpp:
        (WebCore::SpotLightSource::initPaintingData):
        (WebCore::SpotLightSource::computePixelLightingData const):
        (WebCore::SpotLightSource::updatePaintingData): Deleted.
        * platform/graphics/filters/SpotLightSource.h:

2017-11-23  Simon Fraser  <simon.fraser@apple.com>

        Add support for CanvasPattern.setTransform()
        https://bugs.webkit.org/show_bug.cgi?id=179935

        Reviewed by Sam Weinig.
        
        Add support for setTransform() on CanvasPattern, per
        <https://html.spec.whatwg.org/multipage/canvas.html#dom-canvaspattern-settransform>
        It uses [MayThrowException] since the "validate and fixup" steps for DOMMatrix can throw
        an exception.
        
        Under the hood, the transform is just pushed onto Pattern as the patternSpaceTransform().
        
        Minor cleanup in Pattern.

        Test: fast/canvas/canvas-pattern-with-transform.html

        * html/canvas/CanvasPattern.cpp:
        (WebCore::CanvasPattern::setTransform):
        * html/canvas/CanvasPattern.h:
        * html/canvas/CanvasPattern.idl:
        * platform/graphics/Pattern.h:

2017-11-23  Sam Weinig  <sam@webkit.org>

        Remove unneeded ScriptController::processingUserGesture() forwarding functions
        https://bugs.webkit.org/show_bug.cgi?id=179954

        Reviewed by Darin Adler.

        Replace ScriptController::processingUserGesture() and ScriptController::processingUserGestureForMedia()
        with direct calls to the corresponding UserGestureIndicator functions.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create):
        (WebCore::ApplePaySession::openPaymentSetup):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::speak):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture): Deleted.
        (WebCore::ScriptController::processingUserGestureForMedia): Deleted.
        * bindings/js/ScriptController.h:
        * dom/Document.cpp:
        (WebCore::Document::processingUserGestureForMedia const):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::handleDOMActivateEvent):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitFromJavaScript):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::shouldOpenExternalURLsPolicyToApply):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowPopUp):
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):

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

        Add a base class for HTMLCanvasElement and OffscreenCanvas
        https://bugs.webkit.org/show_bug.cgi?id=179701
        <rdar://problem/35545195>

        Post-review updates from Darin Adler review.

        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::asHTMLCanvasElement): Deleted. Replaced by having the call
        sites get the reference and do the correct downcast<>.
        * html/CanvasBase.h: Remove asHTMLCanvasElement. Add pure virtual ref/deref functions
        so they can be overridden by subclasses. Unfortunately they can't be called ref/deref otherwise
        they conflict with Node.
        * html/HTMLCanvasElement.h: Add the type traits, so is<HTMLCanvasElement>(canvasBase) will
        work.
        * html/HTMLTagNames.in: Specify the <canvas> element as having custom type traits.
        * html/OffscreenCanvas.h: Lots of overrides to finals.
        * html/canvas/CanvasRenderingContext.cpp: Use canvasBase.de/refCanvasBase rather than
        casting.
        (WebCore::CanvasRenderingContext::ref):
        (WebCore::CanvasRenderingContext::deref):
        * html/canvas/CanvasRenderingContext.h: Lots of overrides to finals.
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::canvas const):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::canvas):
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::canvas const):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::recordCanvasAction):

2017-11-23  Darin Adler  <darin@apple.com>

        Reduce WTF::String operations that do unnecessary Unicode operations instead of ASCII
        https://bugs.webkit.org/show_bug.cgi?id=179907

        Reviewed by Sam Weinig.

        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::hasCaseInsensitivePrefix): Deleted.
        (WebCore::processAndCreateYouTubeURL): Use startsWithLettersIgnoringASCIICase.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders): Use isAllASCII.

        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::getLengthForTextRange const): Use text().length().

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::traverseToOffsetInRange): Use isHTMLSpace instead of
        isSpaceOrNewline since the code is trying to skip collapsible HTML spaces, not
        arbitrary Unicode whitespace.
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers): Use
        isAllSpecialCharacters<isHTMLSpace> for the same reason as above.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isSearchField const): Use containsIgnoringASCIICase.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibilityObjectContainsText const): Use
        new findPlainText function exported from TextIterator so this can share the
        same search matching logic used to find text in webpages.
        (WebCore::AccessibilityObject::selectText): Use capitalize and its return value
        rather than makeCapitalize modifying a string in place.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::objectInclusionFromAltText): Use isAllSpecialCharacters<isHTMLSpace>
        for the same reason as above.
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const): Ditto.

        * bindings/js/JSDOMConvertStrings.cpp:
        (WebCore::stringToByteString): Use isAllLatin1.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::containsOnlyASCIIWithNoUppercase): Use
        StringView::codeUnits instead of String::at.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        Use isAllASCII.
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::URLFilterParser::addPattern): Ditto.

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSupportedFormat const): Use protocolIs and
        endsWithIgnoringASCIICase.

        * css/DOMCSSNamespace.cpp:
        (WebCore::valueWithoutImportant): Use endsWithIgnoringASCIICase.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::parseGridTemplateAreasRow): Use isAllSpecialCharacters<isCSSSpace>,
        for the preflight, which matches what the actual parsing code uses.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::containsOnlyWhitespace const): Deleted. Callers can
        efficiently get at the data and do this kind of check on the data directly.
        * dom/CharacterData.h: Updated for the above.

        * dom/DataTransfer.cpp:
        (WebCore::normalizeType): Use startsWith since the string is already converted
        to ASCII lowercase.

        * dom/Position.cpp:
        (WebCore::Position::leadingWhitespacePosition const): Use isHTMLSpace since
        since the code is trying to check for collapsible HTML spaces, not general
        Unicode spaces. Other call sites of isSpaceOrNewline need to be checked for
        this, but I did not fix them all at this time.
        (WebCore::Position::trailingWhitespacePosition const): Ditto.

        * editing/Editor.cpp:
        (WebCore::Editor::editorUIUpdateTimerFired): Use noBreakSpace.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::debugRenderer const): Use text().length() instead
        of textLength.
        (WebCore::FrameSelection::selectionAtWordStart const): Use noBreakSpace.
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection): Ditto.
        (WebCore::FrameSelection::actualSelectionAtSentenceStart const): Ditto.

        * editing/TextIterator.cpp:
        (WebCore::textNodeOffsetInFlow): Use text().length().
        (WebCore::TextIterator::handleTextNode): Ditto.
        (WebCore::collapsedSpaceLength): Updated since RenderText::text now returns
        a reference rather than a pointer.
        (WebCore::findPlainText): Added. Uses SearchBuffer to search for one string
        within another. Exported so accessibility code can do this operation.
        * editing/TextIterator.h: Updated for the above.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping): Use noBreakSpace.

        * editing/VisibleUnits.cpp:
        (WebCore::findStartOfParagraph): Updated since RenderText::text now returns
        a reference.
        (WebCore::findEndOfParagraph): Ditto.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processText): Use String::characterAt instead of String::at.
        Use capitalize instead of makeCapitalized.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::stripMicrosoftPrefix): Use findIgnoringASCIICase.

        * html/Autofill.cpp:
        (WebCore::AutofillData::createFromHTMLFormControlElement): Use
        startsWithLettersIgnoringASCIICase.

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch const): Removed explicit
        TextCaseSensitive since it now is the default, and needed to touch this anyway
        because the enumeration is now in a different namespace.

        * html/EmailInputType.cpp:
        (WebCore::isValidEmailAddress): Updated to use JSC::Yarr::TextCaseInsensitive.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasFallbackContent const): Use
        isAllSpecialCharacters<isHTMLSpace>.
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk): Use
        startsWithLettersIgnoringASCIICase.
        (WebCore::HTMLObjectElement::hasValidClassId): Use protocolIs.
        (WebCore::preventsParentObjectFromExposure): Use isAllSpecialCharacters<isHTMLSpace>.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::setCompatibilityModeFromDoctype):
        Use startsWithLettersIgnoringASCIICase.

        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::extractCharset): Use findIgnoringASCIICase.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::isContainedInRequest): Use containsIgnoringASCIICase.

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::hasRequiredFileIdentifier): Don't pass the length to
        the String::startsWith function. There has never been a version of that function
        that takes the length, there is no need to pass the length since the function
        handles null-terminated strings like the one here, and in the past the length
        has been getting converted to a boolean making the comparison be case sensitive.
        Removing the argument entirely leaves it case sensitive.

        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::matchesElement): Use startsWithIgnoringASCIICase
        and endsWithIgnoringASCIICase.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::selectorsFromSource): Use JSC::Yarr::TextCaseSensitive.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::containsOnlyHTMLWhitespace): Made this a non-member function
        and reimplemented using isAllSpecialCharacters<isHTMLSpace>().
        (WebCore::InspectorDOMAgent::innerFirstChild): Use containsOnlyHTMLWhitespace.
        (WebCore::InspectorDOMAgent::innerNextSibling): Ditto.
        (WebCore::InspectorDOMAgent::innerPreviousSibling): Ditto.
        (WebCore::InspectorDOMAgent::innerChildNodeCount): Ditto.
        (WebCore::InspectorDOMAgent::didInsertDOMNode): Ditto.
        (WebCore::InspectorDOMAgent::didRemoveDOMNode): Ditto.
        * inspector/agents/InspectorDOMAgent.h: Updated for above change.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::shouldStoreResourceAsFlatFile):
        Use startsWithLettersIgnoringASCIICase.

        * page/Base64Utilities.cpp:
        (WebCore::Base64Utilities::btoa): Use isAllLatin1.

        * page/Frame.cpp:
        (WebCore::createRegExpForLabels): Removed TextCaseSensitive argument since
        that is now the default and also used JSC::Yarr::TextCaseInsensitive.
        (WebCore::matchLabelsAgainstString): More of the same.

        * page/FrameView.cpp:
        (WebCore::countRenderedCharactersInRenderObjectWithThreshold): Use
        text().length().

        * page/SecurityOrigin.cpp:
        (WebCore::isFeedWithNestedProtocolInHTTPFamily): Use
        startsWithLettersIgnoringASCIICase.

        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesHost const):
        Use endsWithIgnoringASCIICase.
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::hostMatches const): Ditto.

        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parseNonceSource):
        Use startsWithIgnoringASCIICase.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::wordsInCurrentParagraph const): Use noBreakSpace.

        * platform/ContentType.cpp:
        (WebCore::ContentType::parameter const): Use findIgnoringASCIICase.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedFontMIMEType): Use
        startsWithLettersIgnoringASCIICase.
        (WebCore::MIMETypeRegistry::isSupportedJSONMIMEType): Use
        mimeType.endsWithIgnoringASCIICase.
        (WebCore::MIMETypeRegistry::isTextMIMEType): Use
        startsWithLettersIgnoringASCIICase.
        (WebCore::MIMETypeRegistry::isXMLMIMEType): Use endsWithIgnoringASCIICase.
        (WebCore::MIMETypeRegistry::isJavaAppletMIMEType): Use
        startsWithLettersIgnoringASCIICase.
        (WebCore::MIMETypeRegistry::canShowMIMEType): Ditto.

        * platform/URL.cpp:
        (WebCore::isAllASCII): Renamed from containsOnlyASCII.
        (WebCore::appendEncodedHostname): Use isAllASCII.

        * platform/URLParser.cpp:
        (WebCore::containsOnlyASCII): Deleted.
        (WebCore::URLParser::domainToASCII): Use StringImpl::isAllASCII. Changed
        to take StringImpl& to guarantee we won't keep doing null checks since
        the caller already checks for null.
        (WebCore::URLParser::parseHostAndPort): Pass StringImpl&.
        * platform/URLParser.h: Updated for above.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsType): Use endsWithIgnoringASCIICase
        and startsWithLettersIgnoringASCIICase.

        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::validKeySystemRE): Use JSC::Yarr::TextCaseInsensitive.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::similarFont): Use containsIgnoringASCIICase for
        the Geeza font special cases.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::shouldRejectMIMEType): Use startsWithLettersIgnoringASCIICase.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Removed
        TextCaseSensitive since it now is the default.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain): Use isAllASCII.

        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString): Use isAllASCII.

        * platform/mac/StringUtilities.mm:
        (WebCore::stringMatchesWildcardString): Use JSC::Yarr::TextCaseInsensitive.

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::addStringToSHA1): Use isAllASCII.

        * platform/network/CacheValidation.cpp:
        (WebCore::parseCacheControlDirectives): Use containsIgnoringASCIICase.

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPRefresh): Use findIgnoringASCIICase.
        (WebCore::findCharsetInMediaType): Ditto.
        (WebCore::parseRange): Use startsWithLettersIgnoringASCIICase.

        * platform/network/curl/AuthenticationChallengeCurl.cpp:
        (WebCore::AuthenticationChallenge::protectionSpaceFromHandle):
        Use findIgnoringASCIICase.
        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::extractBoundary): Ditto.
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::handleDataURL): Use
        endsWithIgnoringASCIICase.
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::isAppendableHeader): Use
        startsWithLettersIgnoringASCIICase.
        (WebCore::ResourceResponse::appendHTTPHeaderField): Ditto.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::extractMarkupFromCFHTML): Use findIgnoringASCIICase.
        (WebCore::fragmentFromCFHTML): Ditto.

        * rendering/BidiRun.cpp:
        (WebCore::BidiRun::BidiRun): Use text().length().
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absolutePDFURL const): Use
        endsWithIgnoringASCIICase.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection): Use text().length().
        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::fastIncrementInTextNode): Ditto.
        (WebCore::InlineIterator::increment): Dtto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isLineBreak const): Updated since RenderText::text
        now returns a StringImpl&.
        (WebCore::InlineTextBox::selectionStartEnd const): Use text().length().
        (WebCore::InlineTextBox::text const): Updated since RenderText::text
        now returns a StringImpl&.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun): Use text().length().
        * rendering/RenderBlockFlow.cpp:
        (WebCore::isVisibleRenderText): Use isAllSpecialCharacters<isHTMLSpace>().
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        Use the new trimmedPreferredWidths that returns a structure instead of the
        old one with lots of arguments. Also use text().length().
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::endsWithHTMLSpaces): Renamed and changed to use isHTMLSpace
        instead of isASCIISpace.
        (WebCore::reachedEndOfTextRenderer): Use endsWithHTMLSpaces.
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        Updated for hcanges to RenderText.
        (WebCore::RenderBlockFlow::handleTrailingSpaces): Ditto.
        (WebCore::RenderBlockFlow::determineStartPosition): Ditto.

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineTextIfNeeded): Use
        isAllSpecialCharacters<isHTMLSpace>.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const): Ditto.

        * rendering/RenderListBox.cpp:
        (WebCore::bolder): Added. Helper function.
        (WebCore::RenderListBox::updateFromElement): Rewrote to
        only compute the bolder font once rather than for every item.
        (WebCore::RenderListBox::paintItemForeground): Updated for
        change to applyTextTransform.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Updated for change
        to RenderText::text.
        (RenderMenuList::updateOptionsWidth): Updated for change to
        applyTextTransform.
        (RenderMenuList::itemText const): Ditto.

        * rendering/RenderText.cpp:
        (WebCore::capitalize): Renamed from makeCapitalized. Changed to
        take and return a String instead of taking a String*.
        (WebCore::RenderText::RenderText): Use isAllASCII. Also moved
        initialization of most non-bitfield members to the class definition.
        (WebCore::RenderText::positionForPoint): Use text().
        (WebCore::RenderText::widthFromCache const): Ditto.
        (WebCore::RenderText::hangablePunctuationStartWidth const): Ditto.
        (WebCore::RenderText::hangablePunctuationEndWidth const): Ditto.
        (WebCore::RenderText::isHangableStopOrComma): Ditto.
        (WebCore::RenderText::firstCharacterIndexStrippingSpaces const): Ditto.
        (WebCore::RenderText::lastCharacterIndexStrippingSpaces const): Ditto.
        (WebCore::RenderText::trimmedPreferredWidths): Changed to return values
        in a structure instead of taking lots of arguments.
        (WebCore::RenderText::computePreferredLogicalWidths): Updated to use
        the text() function.
        (WebCore::isAllCollapsibleWhitespace): Added.
        (WebCore::RenderText::isAllCollapsibleWhitespace const): Updated to
        use a tighter loop.
        (WebCore::isAllPossiblyCollapsibleWhitespace): Added.
        (WebCore::RenderText::containsOnlyHTMLWhitespace const): Updated to
        use a tighter loop. Renamed from containsOnlyWhitespace.
        (WebCore::RenderText::setTextWithOffset): Updated to  use text().
        (WebCore::isInlineFlowOrEmptyText): Rewrote to be easier to read.
        (WebCore::RenderText::previousCharacter const): Got rid of unneeded
        null check and simplified.
        (WebCore::applyTextTransform): Changed to return a String rather
        than modifying one that is passed in.
        (WebCore::RenderText::setRenderedText): Updated use of applyTextTransform.
        (WebCore::RenderText::secureText): More of the same.
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const): Ditto.
        (WebCore::RenderText::textWithoutConvertingBackslashToYenSymbol const): Ditto.
        (WebCore::RenderText::width const): Ditto.
        (WebCore::RenderText::collectSelectionRectsForLineBoxes): Ditto.
        (WebCore::RenderText::previousOffset const): Ditto.
        (WebCore::RenderText::previousOffsetForBackwardDeletion const): Ditto.
        (WebCore::RenderText::nextOffset const): Ditto.
        (WebCore::RenderText::computeCanUseSimpleFontCodePath const): Ditto.
        (WebCore::RenderText::stringView const): Ditto.

        * rendering/RenderText.h: Made some more members private and final.
        Updated for above, including adding the Widths structure. Got rid of the
        textLength function, which existed as a workaround before we could mark
        a function like length final. Made the text function return a StringImpl&,
        which is good since the m_text string is never null, and so callers end
        up using StringImpl directly and saving null checks. Removed functions
        that are not needed, including is8Bit, characters8, characters16,
        uncheckedCharacterAt, operator[], and isAllASCII.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setText): Use text().length().
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::caretMaxOffset const): Ditto.
        (WebCore::RenderTextLineBoxes::positionForPoint const): Ditto.
        (WebCore::RenderTextLineBoxes::setSelectionState): Ditto.
        (WebCore::RenderTextLineBoxes::absoluteQuads const): Ditto.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForFontAndText): Ditto.
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::textLengthForSubtree): Ditto.
        (WebCore::SimpleLineLayout::collectNonEmptyLeafRenderBlockFlows): Ditto.
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments): Ditto.
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::textOffsetForPoint): Ditto.
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::findCaretMaximumOffset): Ditto.
        * rendering/line/BreakingContext.h:
        (WebCore::shouldAddBorderPaddingMargin): Ditto.
        (WebCore::shouldSkipWhitespaceAfterStartObject): Ditto.
        (WebCore::iteratorIsBeyondEndOfRenderCombineText): Ditto.
        (WebCore::textWidth): Ditto.
        (WebCore::BreakingContext::handleText): Ditto.
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord): Ditto.
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateWhitespaceCollapsingTransitionsForTrailingBoxes): Ditto.

        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement): Removed stray use of "unsigned int".

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::characterStartsNewTextChunk const): Use text().length().
        (WebCore::RenderSVGInlineText::positionForPoint): Ditto.
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::processRenderSVGInlineText): Ditto.
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterAttributes): Ditto.
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures const): Ditto.

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree): Use isAllSpecialCharacters<isHTMLSpace>.
        (WebCore::RenderTreeUpdater::textRendererIsNeeded): Ditto.

        * svg/SVGTests.cpp:
        (WebCore::SVGTests::hasFeatureForLegacyBindings): Use startsWithLettersIgnoringASCIICase.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::shouldAllowExternalLoad): Ditto.

2017-11-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Simplify CoordinatedGraphicsLayer's content buffer updates
        https://bugs.webkit.org/show_bug.cgi?id=179972

        Reviewed by Carlos Garcia Campos.

        During layer flushes, when a CoordinatedGraphicsLayer's tiled backing store
        has dirty tiles that need to be updated, the following chain of calls would
        be invoked to perform the painting, starting in
        CoordinatedGraphicsLayer::updateContentBuffers():
        |- CoordinatedGraphicsLayer::updateContentBuffers()
         |- TiledBackingStore::updateTileBuffers()
          |- Tile::updateBackBuffer()
           |- CoordinatedGraphicsLayer::paintToSurface()
            |- CompositingCoordinator::paintToSurface()
             |- UpdateAtlas::paintOnAvailableBuffer()
              |- ThreadSafeCoordinatedSurface::paintToSurface()
               |- Tile::paintToSurfaceContext()
                |- CoordinatedGraphicsLayer::tiledBackingStorePaint()
                 |- GraphicsLayer::paintGraphicsLayerContents()

        That's a bit much.

        In CoordinatedGraphicsLayer::updateContentBuffers(), we now first retrieve
        all the dirty layers in our TiledBackingStore. We then iterate through them,
        first establishing their ID and then retrieving an available CoordinatedBuffer
        that we can use for painting. The CoordinatedBuffer is retrieved through
        CompositingCoordinator, which is still caching these buffers via UpdateAtlas
        objects.

        With a CoordinatedBuffer available, we can then proceed with painting. The
        painting context has to be properly set up to paint into the correct area of
        the given buffer, and the alpha channel, if necessary, has to be addressed.
        After properly positioning and scaling ourselves on the given context, we
        can proceed with the GraphicsLayer::paintGraphicsLayerContents() call.

        What's left is filling out the missing SurfaceUpdateInfo information which is
        then passed to the updateTile() method that properly registers the tile
        update we've just performed. The tile itself is marked clean. After the
        iteration, we call the didUpdateTileBuffers() method in case any successful
        tile update was indeed performed, incrementing the repaint counter.

        That's it -- we clipped 8 calls from the call chain. We can now also remove
        the CoordinatedBuffer::Client interface, as well as slim down the
        TiledBackingStore interface. The Tile class is cleaned up a bit, with methods
        shifted into a more sensible order.

        No new tests -- no change in functionality.

        * platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedBuffer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didUpdateTileBuffers):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaint): Deleted.
        (WebCore::CoordinatedGraphicsLayer::paintToSurface): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/Tile.cpp:
        (WebCore::Tile::ensureTileID):
        (WebCore::Tile::isDirty const):
        (WebCore::Tile::invalidate):
        (WebCore::Tile::markClean):
        (WebCore::Tile::updateBackBuffer): Deleted.
        (WebCore::Tile::paintToSurfaceContext): Deleted.
        * platform/graphics/texmap/coordinated/Tile.h:
        (WebCore::Tile::tileID const):
        (WebCore::Tile::dirtyRect const):
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::dirtyTiles):
        (WebCore::TiledBackingStore::updateTileBuffers): Deleted.
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:
        * platform/graphics/texmap/coordinated/TiledBackingStoreClient.h:

2017-11-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove relay CoordinatedBuffer::Client implementations
        https://bugs.webkit.org/show_bug.cgi?id=179970

        Reviewed by Carlos Garcia Campos.

        Drop CoordinatedBuffer::painToSurface() in favor of a simpler
        GraphicsContext reference getter that returns a reference to the
        GraphicsContext object of the internal ImageBuffer.

        Remove the ImageBackingSurfaceClient class that only acted as a relay
        that enabled a CoordinatedBuffer to draw an image through its context.
        Instead, we use the GraphicsContext of the allocated CoordinatedBuffer
        to draw the image directly. We still use a rectangle whose size
        matches the size of the given Image as the clipping area and as the
        source and destination rectangle for the image.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp:
        (WebCore::CoordinatedBuffer::context):
        (WebCore::CoordinatedBuffer::paintToSurface): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedBuffer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::update):
        (WebCore::ImageBackingSurfaceClient::ImageBackingSurfaceClient): Deleted.

2017-11-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] TiledBackingStore: use a reference to the client
        https://bugs.webkit.org/show_bug.cgi?id=179969

        Reviewed by Carlos Garcia Campos.

        TiledBackingStore should keep a C++ reference to the TiledBackingStoreClient
        object, and not a pointer. client() method is updated to reflect that, and
        uses of this method and the member variable are updated accordingly.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createBackingStore):
        * platform/graphics/texmap/coordinated/Tile.cpp:
        (WebCore::Tile::~Tile):
        (WebCore::Tile::updateBackBuffer):
        (WebCore::Tile::paintToSurfaceContext):
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:
        (WebCore::TiledBackingStore::client):

2017-11-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Early tile buffer update in TiledBackingStore::createTiles() is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=179968

        Reviewed by Carlos Garcia Campos.

        Under CoordinatedGraphicsLayer::updateContentBuffers(), the TiledBackingStore
        object has the createTilesIfNeeded() method invoked, if necessary. This
        invokes createTiles(), where the edge tiles are resized if necessary, and
        the missing tiles are created. If any of those two cases is fulfilled, the
        updateTileBuffers() method is invoked, updating any dirty tiles (i.e. the
        ones that were resized or newly-created).

        This specific invocation of updateTileBuffers() is not needed since it's the
        very next method that's invoked on the TiledBackingStore object by
        CoordinatedGraphicsLayer::updateContentBuffers(). It's therefore removed,
        and the resizeEdgeTiles() method is changed to not return any value.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::resizeEdgeTiles):
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:

2017-11-23  Antti Koivisto  <antti@apple.com>

        RenderBlockFlow::layoutRunsAndFloatsInRange is O(n^2) for runs of inlines without any text
        https://bugs.webkit.org/show_bug.cgi?id=179950

        Reviewed by Simon Fraser.

        It calls createBidiRunsForLine for each line. createBidiRunsForLine traverses past the end of the line until
        it finds the end of the current bidi run. If there is no text in the flow, it never finds anything and traverses
        the entire flow. This is O(n^2) for the number of renderers in the flow.

        Tested by PerformanceTests/Layout/inline-layout-no-text.html

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolverBase::needsContinuePastEnd const):
        (WebCore::BidiResolverBase::needsContinuePastEndInternal const):
        (WebCore::DerivedClass>::createBidiRunsForLine):

            When past end of line call needsContinuePastEnd() to see if we need to continue searching for the end of the bidi run.

        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::needsContinuePastEndInternal const):

            InlineBidiResolver only returns runs up to the last renderer on the line and can bail out.

2017-11-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Replace CoordinatedSurface, ThreadSafeCoordinatedSurface with CoordinatedBuffer
        https://bugs.webkit.org/show_bug.cgi?id=179967

        Reviewed by Carlos Garcia Campos.

        Roll the CoordinatedSurface and ThreadSafeCoordinatedSurface classes
        into one CoordinatedBuffer class.

        CoordinatedBuffer class mimics CoordinatedSurface in providing the
        Client class that allows specifying how the client should paint using a
        GraphicsContext object. supportsAlpha() and size() methods are also
        present, as well as paintToSurface(). uploadImage() retrieves the
        Image that's created from the contained ImageBuffer, allowing the user
        to then manually upload the buffer data onto the GPU.

        CoordinatedBuffer otherwise serves as a drop-in replacement for the
        CoordinatedSurface class, and the remaining changes in the
        CoordiantedGraphics code reflect that.

        No new tests -- no change in behavior.

        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/coordinated/CoordinatedBuffer.cpp: Added.
        (WebCore::CoordinatedBuffer::create):
        (WebCore::CoordinatedBuffer::CoordinatedBuffer):
        (WebCore::CoordinatedBuffer::paintToSurface):
        (WebCore::CoordinatedBuffer::uploadImage):
        * platform/graphics/texmap/coordinated/CoordinatedBuffer.h: Added.
        (WebCore::CoordinatedBuffer::supportsAlpha const):
        (WebCore::CoordinatedBuffer::size const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::paintToSurface):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::update):
        (WebCore::CoordinatedImageBacking::releaseSurfaceIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:
        * platform/graphics/texmap/coordinated/CoordinatedSurface.cpp: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedSurface.h: Removed.
        * platform/graphics/texmap/coordinated/Tile.h:
        * platform/graphics/texmap/coordinated/TiledBackingStoreClient.h:

2017-11-22  Simon Fraser  <simon.fraser@apple.com>

        FEComponentTransfer cleanup and optimization
        https://bugs.webkit.org/show_bug.cgi?id=179952

        Reviewed by Darin Adler.

        Change terminology for FEComponentTransfer to be more explicit about the fact
        that it's creating and using lookup tables. Use std::array for the lookup tables.
        
        Use uint8_t instead of unsigned char.
        
        Avoid confusing arrays for channels in computeLookupTables; just setup the lut for
        each channel manually.
        
        This is about 1.25x faster than before.

        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::computeIdentityTable):
        (WebCore::FEComponentTransfer::computeTabularTable):
        (WebCore::FEComponentTransfer::computeDiscreteTable):
        (WebCore::FEComponentTransfer::computeLinearTable):
        (WebCore::FEComponentTransfer::computeGammaTable):
        (WebCore::FEComponentTransfer::platformApplySoftware):
        (WebCore::FEComponentTransfer::computeLookupTables):
        (WebCore::operator<<):
        (WebCore::identity): Deleted.
        (WebCore::table): Deleted.
        (WebCore::discrete): Deleted.
        (WebCore::linear): Deleted.
        (WebCore::gamma): Deleted.
        (WebCore::FEComponentTransfer::getValues): Deleted.
        * platform/graphics/filters/FEComponentTransfer.h:
        (WebCore::ComponentTransferFunction::ComponentTransferFunction): Deleted.

2017-11-22  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Refactoring and new namespace with grid related utility functions
        https://bugs.webkit.org/show_bug.cgi?id=179633

        Reviewed by Darin Adler.

        Added a new namespace with several utility functions to share logic
        between RenderGrid and GridTrackSizingAlgorithm.

        No new tests, since no new functionality is added.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/GridLayoutUtils.cpp: Added.
        (WebCore::GridLayoutUtils::computeMarginLogicalSizeForChild):
        (WebCore::GridLayoutUtils::marginLogicalSizeForChild):
        (WebCore::GridLayoutUtils::isOrthogonalChild):
        (WebCore::GridLayoutUtils::flowAwareDirectionForChild):
        * rendering/GridLayoutUtils.h: Added.
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::assumedRowsSizeForOrthogonalChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::logicalHeightForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::maxContentForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        (WebCore::DefiniteSizeStrategy::minLogicalWidthForChild const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::placeItemsOnGrid const):
        (WebCore::RenderGrid::layoutPositionedObject):
        (WebCore::RenderGrid::availableAlignmentSpaceForChildBeforeStretching const):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        (WebCore::RenderGrid::isInlineBaselineAlignedChild const):
        (WebCore::RenderGrid::firstLineBaseline const):
        (WebCore::RenderGrid::columnAxisPositionForChild const):
        (WebCore::RenderGrid::rowAxisPositionForChild const):
        (WebCore::RenderGrid::columnAxisOffsetForChild const):
        (WebCore::RenderGrid::rowAxisOffsetForChild const):
        (WebCore::RenderGrid::findChildLogicalPosition const):

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

        Implement VisualViewport API attributes
        https://bugs.webkit.org/show_bug.cgi?id=179385

        Reviewed by Frédéric Wang.

        Add a visualViewport attribute to Window, and implement the VisualViewport
        interface (https://wicg.github.io/visual-viewport/#the-visualviewport-interface).

        This is behind a newly-added VisualViewportAPI experimental feature flag.

        Tests: fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html
               fast/visual-viewport/viewport-dimensions-exclude-scrollbars.html
               fast/visual-viewport/viewport-dimensions-iframe.html
               fast/visual-viewport/viewport-dimensions-under-page-zoom.html
               fast/visual-viewport/viewport-dimensions.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventTargetFactory.in:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::resetDOMWindowProperties):
        (WebCore::DOMWindow::visualViewport const):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Settings.yaml:
        * page/VisualViewport.cpp: Added.
        (WebCore::VisualViewport::VisualViewport):
        (WebCore::VisualViewport::eventTargetInterface const):
        (WebCore::VisualViewport::scriptExecutionContext const):
        (WebCore::getFrameViewAndLayoutIfNonNull):
        (WebCore::VisualViewport::offsetLeft const):
        (WebCore::VisualViewport::offsetTop const):
        (WebCore::VisualViewport::pageLeft const):
        (WebCore::VisualViewport::pageTop const):
        (WebCore::VisualViewport::width const):
        (WebCore::VisualViewport::height const):
        (WebCore::VisualViewport::scale const):
        * page/VisualViewport.h: Added.
        * page/VisualViewport.idl: Added.

2017-11-22  Manuel Rego Casasnovas  <rego@igalia.com>

        Available height is wrong for positioned elements with "box-sizing: border-box"
        https://bugs.webkit.org/show_bug.cgi?id=178783

        Reviewed by Darin Adler.

        These methods were returning a wrong value for positioned items
        in combination with "box-sizing: border-box".
        The problem was that if the height of the element is given
        by its offset properties (top and bottom) we don't need to call
        adjustContentBoxLogicalHeightForBoxSizing().

        Tests: fast/box-sizing/fill-available.html
               fast/box-sizing/replaced.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing const):
        (WebCore::RenderBox::availableLogicalHeightUsing const):

2017-11-22  Christopher Reid  <chris.reid@sony.com>

        WebCoreObjCExtras.h is being included in too many places
        https://bugs.webkit.org/show_bug.cgi?id=179931

        Reviewed by Darin Adler.

        No new tests no change in behavior.

        Fixing cases where WebCoreObjCExtras.h is imported but not used.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * platform/mac/WebCoreNSURLExtras.mm:

2017-11-22  Antoine Quint  <graouts@apple.com>

        [Web Animations] Adopt KeyframeList in KeyframeEffect
        https://bugs.webkit.org/show_bug.cgi?id=179941
        <rdar://problem/35666924>

        Reviewed by Darin Adler.

        KeyframeEffect used to model its keyframes by creating a new Keyframe struct and storing them in a Vector<Keyframe>.
        However, there already is a way to model keyframes in WebCore using the KeyframeList class. We now adopt this class
        in KeyframeEffect, which makes it possible to run hardware-composited animations using RenderBoxModelObject::startAnimation()
        in a follow-up patch, since this function expects a KeyframeList.

        No news tests, this is an internals change and does not yield any changes in Web content.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::KeyframeEffect): Create a default m_keyframes at construction time.
        (WebCore::KeyframeEffect::processKeyframes): Create a temporary KeyframeList as we parse keyframes passed from the JS API
        and assign it to m_keyframes upon successful parsing. We also use cssPropertyId to refer to a CSSPropertyID to make the code
        clearer and ensure there is no confusion with JS properties that we manipulate in this function.
        (WebCore::KeyframeEffect::computeStackingContextImpact): Use the list of CSS properties exposed on KeyframeList directly rather
        than enumerating each keyframe and use cssPropertyId to refer to individual CSSPropertyID values for consistency.
        (WebCore::KeyframeEffect::applyAtLocalTime): Use the list of CSS properties exposed on KeyframeList directly rather than
        using the properties specified on the first keyframe only. We also remove a stale FIXME comment which was addressed in r224957.
        * animation/KeyframeEffect.h: Remove the Keyframe struct and change the type of m_keyframes from Vector<Keyframe> to KeyframeList.
        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeList::KeyframeList): We remove the default insertions at KeyframeList construction time since it requires
        an immediate call to clear() when doing any meaningful work with a KeyframeList. We also add the default move assignment operator
        to allow KeyframeEffect::processKeyframes() to make a move assignment from the temporary keyframe list we build at parsing to the
        member variable.

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

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

        Compilation failed on WinCairo 64-bit Release (Requested by
        fredw on #webkit).

        Reverted changeset:

        "Implement VisualViewport API attributes"
        https://bugs.webkit.org/show_bug.cgi?id=179385
        https://trac.webkit.org/changeset/225093

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

        Implement VisualViewport API attributes
        https://bugs.webkit.org/show_bug.cgi?id=179385

        Reviewed by Frédéric Wang.

        Add a visualViewport attribute to Window, and implement the VisualViewport
        interface (https://wicg.github.io/visual-viewport/#the-visualviewport-interface).

        This is behind a newly-added VisualViewportAPI experimental feature flag.

        Tests: fast/visual-viewport/viewport-dimensions-exclude-custom-scrollbars.html
               fast/visual-viewport/viewport-dimensions-exclude-scrollbars.html
               fast/visual-viewport/viewport-dimensions-iframe.html
               fast/visual-viewport/viewport-dimensions-under-page-zoom.html
               fast/visual-viewport/viewport-dimensions.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventTargetFactory.in:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::resetDOMWindowProperties):
        (WebCore::DOMWindow::visualViewport const):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Settings.yaml:
        * page/VisualViewport.cpp: Added.
        (WebCore::VisualViewport::VisualViewport):
        (WebCore::VisualViewport::eventTargetInterface const):
        (WebCore::VisualViewport::scriptExecutionContext const):
        (WebCore::getFrameViewAndLayoutIfNonNull):
        (WebCore::VisualViewport::offsetLeft const):
        (WebCore::VisualViewport::offsetTop const):
        (WebCore::VisualViewport::pageLeft const):
        (WebCore::VisualViewport::pageTop const):
        (WebCore::VisualViewport::width const):
        (WebCore::VisualViewport::height const):
        (WebCore::VisualViewport::scale const):
        * page/VisualViewport.h: Added.
        * page/VisualViewport.idl: Added.

2017-11-21  Frederic Wang  <fwang@igalia.com>

        Async frame scrolling: handle fixed root backgrounds in frames
        https://bugs.webkit.org/show_bug.cgi?id=176261

        Based on patch by Simon Fraser <simon.fraser@apple.com>
        Reviewed by Antonio Gomes.

        For frames with tiled backing, we register a slow-repaint object because we hit
        RenderElement::styleWillChange() before we've made a backing for the iframe's RenderView so
        view().compositor().supportsFixedRootBackgroundCompositing() returns false. This patch
        ensures that this object is removed when setBackgroundLayerPaintsFixedRootBackground is
        called. It also removes the opaque background of non-main frames with tiled backing.
        This fixes a possible hit of ASSERT(!m_backgroundLayer) after r221615.

        Test: compositing/tiling/tiled-drawing-async-frame-scrolling.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry): Do not set opaque contents for frames with
        tiled backing. We keep !m_isMainFrameRenderViewLayer for backward compatibility with WK1.
        (WebCore::RenderLayerBacking::setBackgroundLayerPaintsFixedRootBackground): Add an early
        return when m_backgroundLayerPaintsFixedRootBackground is not changed. Remove the slow
        repaint object previously registered for this frame. Also add an ASSERT to ensure that a
        fixed root background is only set for frames with async scrolling.
        (WebCore::RenderLayerBacking::updateRootLayerConfiguration): Restrict some special handling
        of background and opaqueness to the main frame.

2017-11-21  Zan Dobersek  <zdobersek@igalia.com>

        Drop ENABLE_IMAGE_DECODER_DOWN_SAMPLING code
        https://bugs.webkit.org/show_bug.cgi?id=179921

        Reviewed by Carlos Garcia Campos.

        Drop the ENABLE_IMAGE_DECODER_DOWN_SAMPLING code, along with the build
        guard definitions in WTF and CMake.

        This was apparently in use in the Qt port, but since then no port
        enables this. It's not exposed in the Xcode build, and the CMake option
        is disabled by default, with no way to enable it through build-webkit.

        While the code guarded with this build guard is removed, there's still
        code in the ScalableImageDecoder class that only operated when this
        feature was enabled. This should be addressed in the future, after
        evaluating the need for this scaling capability.

        No new tests -- no change in behavior.

        * platform/graphics/Image.cpp:
        (WebCore::Image::adjustSourceRectForDownSampling const): Deleted.
        * platform/graphics/Image.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawNativeImage):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::frameComplete):

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

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

        This patch caused compilation failures (Requested by fredw on
        #webkit).

        Reverted changeset:

        "Async frame scrolling: handle fixed root backgrounds in
        frames"
        https://bugs.webkit.org/show_bug.cgi?id=176261
        https://trac.webkit.org/changeset/225089

2017-11-21  Frederic Wang  <fwang@igalia.com>

        Async frame scrolling: handle fixed root backgrounds in frames
        https://bugs.webkit.org/show_bug.cgi?id=176261

        Based on patch by Simon Fraser <simon.fraser@apple.com>
        Reviewed by Antonio Gomes.

        For frames with tiled backing, we register a slow-repaint object because we hit
        RenderElement::styleWillChange() before we've made a backing for the iframe's RenderView so
        view().compositor().supportsFixedRootBackgroundCompositing() returns false. This patch
        ensures that this object is removed when setBackgroundLayerPaintsFixedRootBackground is
        called. It also removes the opaque background of non-main frames with tiled backing.
        This fixes a possible hit of ASSERT(!m_backgroundLayer) after r221615.

        Test: compositing/tiling/tiled-drawing-async-frame-scrolling.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry): Do not set opaque contents for frames with
        tiled backing. We keep !m_isMainFrameRenderViewLayer for backward compatibility with WK1.
        (WebCore::RenderLayerBacking::setBackgroundLayerPaintsFixedRootBackground): Add an early
        return when m_backgroundLayerPaintsFixedRootBackground is not changed. Remove the slow
        repaint object previously registered for this frame. Also add an ASSERT to ensure that a
        fixed root background is only set for frames with async scrolling.
        (WebCore::RenderLayerBacking::updateRootLayerConfiguration): Restrict some special handling
        of background and opaqueness to the main frame.

2017-11-21  Simon Fraser  <simon.fraser@apple.com>

        Some FELighting cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179924

        Reviewed by Sam Weinig.

        Make the normal-computation functions const and have them return an IntSize.
        Replace bit shifting with multiply by two (compilers know how to do this, folks).

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::LightingData::topLeftNormal const):
        (WebCore::FELighting::LightingData::topRowNormal const):
        (WebCore::FELighting::LightingData::topRightNormal const):
        (WebCore::FELighting::LightingData::leftColumnNormal const):
        (WebCore::FELighting::LightingData::interiorNormal const):
        (WebCore::FELighting::LightingData::rightColumnNormal const):
        (WebCore::FELighting::LightingData::bottomLeftNormal const):
        (WebCore::FELighting::LightingData::bottomRowNormal const):
        (WebCore::FELighting::LightingData::bottomRightNormal const):
        (WebCore::FELighting::inlineSetPixel):
        (WebCore::FELighting::setPixel):
        (WebCore::FELighting::platformApplyGenericPaint):
        (WebCore::FELighting::drawLighting):
        (WebCore::FELighting::LightingData::topLeft): Deleted.
        (WebCore::FELighting::LightingData::topRow): Deleted.
        (WebCore::FELighting::LightingData::topRight): Deleted.
        (WebCore::FELighting::LightingData::leftColumn): Deleted.
        (WebCore::FELighting::LightingData::interior): Deleted.
        (WebCore::FELighting::LightingData::rightColumn): Deleted.
        (WebCore::FELighting::LightingData::bottomLeft): Deleted.
        (WebCore::FELighting::LightingData::bottomRow): Deleted.
        (WebCore::FELighting::LightingData::bottomRight): Deleted.
        * platform/graphics/filters/FELighting.h:

2017-11-21  Christopher Reid  <chris.reid@sony.com>

        [PAL] Remove FileSystem's dependency on WebCoreNSStringExtras
        https://bugs.webkit.org/show_bug.cgi?id=179504

        Reviewed by Darin Adler.

        No new tests no change in behavior.

        Removed WebCoreNSStringExtras.
        Replaced calls to string helpers in WebCoreNSStringExtras with calls to WTF::String.
        Moved filenameByFixingIllegalCharacters into LoaderNSURLExtras.
        Moved preferredBundleLocalizationName into WebKitLegacy.

        * PlatformMac.cmake: Removed WebCoreNSStringExtras.mm
        * SourcesCocoa.txt: Removed WebCoreNSStringExtras.mm
        * WebCore.xcodeproj/project.pbxproj: Removed WebCoreNSStringExtras
        * loader/mac/LoaderNSURLExtras.h:
        * loader/mac/LoaderNSURLExtras.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/mac/WebCoreNSURLExtras.mm:

2017-11-21  Simon Fraser  <simon.fraser@apple.com>

        Use vImage to do alpha premultiplication/unpremultiplication in FilterEffect
        https://bugs.webkit.org/show_bug.cgi?id=179928

        Reviewed by Tim Horton.

        The vImage functions are about twice as fast as the existing code.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::copyPremultiplyingAlpha):
        (WebCore::copyUnpremultiplyingAlpha):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):

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

        [GLIB] Test FileMonitorTest.DetectChangeAndThenDelete sometimes crashes
        https://bugs.webkit.org/show_bug.cgi?id=179909

        Reviewed by Michael Catanzaro.

        The problem sems to be that the GFileMonitor is created in the main thread, but destroyed in the WorkQueue
        thread. We can create the monitor in the WorkQueue thread and do the monitoring there.

        Fixes unit test FileMonitorTest.DetectChangeAndThenDelete.

        * platform/glib/FileMonitorGLib.cpp:
        (WebCore::FileMonitor::FileMonitor): Create the GFileMonitor in the WorkQueue.
        (WebCore::FileMonitor::didChange): No need to dispatch the handler in the WorkQueue, since this is now called in
        the WorkQueue.

2017-11-21  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] drawNativeImage(), drawPattern() in CairoOperations should operate directly with cairo_surface_t objects
        https://bugs.webkit.org/show_bug.cgi?id=179888

        Reviewed by Carlos Garcia Campos.

        Cairo::drawNativeImage() should receive a valid cairo_surface_t pointer
        and work with that, instead of using a NativeImagePtr. Callers are thus
        forced to pass the pointer into the drawNativeImage() call, and the
        CairoOperations implementation file drops the need to know about the
        NativeImagePtr type alias.

        Cairo::drawPattern() now accepts pointer to the cairo_surface_t object,
        along with an IntSize object that descibes the surface's size. This way
        it's up to the caller to retrieve any valid native image for the current
        frame and pass that to the drawPattern() call. The need to use IntSize
        here is strange, but we should investigate this later.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawNativeImage):
        (WebCore::Cairo::drawPattern):
        * platform/graphics/cairo/CairoOperations.h: Include the Cairo header.
        Also fix forward declaration of Cairo::drawGlyphs().
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::drawNativeImage): Execute operation through GraphicsContext,
        kicking into effect any recording that could be done this way.

2017-11-21  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Gradient::fill() should only operate on PlatformContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=179887

        Reviewed by Carlos Garcia Campos.

        In Gradient::fill(), directly invoke Cairo::save() and Cairo::restore(),
        instead of doing so indirectly through GraphicsContext::save() and
        GraphicsContext::restore(). The latter pair stashes the internal state
        that's managed in GraphicsContext, but that doesn't get modified at all
        in this case.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::fill):

2017-11-21  Frederic Wang  <fwang@igalia.com>

        Remove unintentionally committed .orig file.
        https://bugs.webkit.org/show_bug.cgi?id=174131

        Unreviewed, fix previous commit.

        * rendering/mathml/RenderMathMLScripts.cpp.orig: Removed.

2017-11-21  Frederic Wang  <fwang@igalia.com>

        ASSERTION FAILED: !needsLayout() in WebCore::RenderMathMLScripts::firstLineBaseline
        https://bugs.webkit.org/show_bug.cgi?id=174131

        Reviewed by Alejandro G. Castro.

        RenderMathMLScripts::firstLineBaseline() has an ASSERT at the beginning to ensure that the function
        is called after the element was laid out. However, this is not respected by HTML table layout as
        RenderBlock::firstLineBaseline() is called for elements in a table cell before they are laid out.
        This happens for example for RenderGrid::firstLineBaseline() and probably for other renderers.
        Additionally, RenderMathMLScripts::firstLineBaseline() only involves calling firstLineBaseline();
        logicalTop() or logicalHeight() on the first child box so it is safe to call it before layout, even
        if the return value might be wrong at that time. This patch removes this too restrictive ASSERT for
        RenderMathMLScripts, for consistency with other implementations of firstLineBaseline().

        Test: mathml/cells-and-scripts-crash.html

        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::firstLineBaseline const): Remove the ASSERT.

2017-11-20  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] New API to add, retrieve and delete cookies via WebKitCookieManager
        https://bugs.webkit.org/show_bug.cgi?id=177932

        Reviewed by Carlos Garcia Campos.

        Implemented setCookie(), getCookies() and deleteCookie() in the Soup
        backend, and refactored some utility functions and conversions out of
        NetworkStorageSessionSoup into a new CookieSoup.cpp file, so
        that we now can convert between SoupCookie* and WebCore::Cookie
        easily from anywhere (this is now needed from the UI Process).

        * platform/Cookie.h: Add declarations for the new conversions.
        * platform/SourcesSoup.txt: Add CookieSoup.cpp.
        * platform/network/soup/CookieSoup.cpp: Added.
        (WebCore::Cookie::Cookie): New constructor, creates a WebCore::Cookie out of a SoupCookie*.
        (WebCore::msToSoupDate): Moved from NetworkStorageSessionSoup.cpp.
        (WebCore::Cookie::toSoupCookie): New, based on toSoupCookie() from NetworkStorageSessionSoup.cpp.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::setCookies): Used the new implicit conversion.
        (WebCore::NetworkStorageSession::setCookie): Newly implemented.
        (WebCore::NetworkStorageSession::deleteCookie): Newly implemented.
        (WebCore::NetworkStorageSession::getCookies): Newly implemented.

2017-11-20  Zalan Bujtas  <zalan@apple.com>

        Remove slow repaint object from FrameView when style changes.
        https://bugs.webkit.org/show_bug.cgi?id=179871

        Reviewed by Antti Koivisto.

        The "oldStyleSlowScroll" value does not need to be computed. We already know its value
        by checking the HashSet. This code is also unnecessarily complicated and error prone
        (could lead to UAF errors by leaving stale renderers in the slow paint list).

        Test: fast/repaint/slow-repaint-object-crash.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):

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

        [WPE] GLContextEGLWPE.cpp:44:96: error: invalid cast from type ‘GLNativeWindowType {aka long long unsigned int}’ to type ‘EGLNativeWindowType {aka unsigned int}
        https://bugs.webkit.org/show_bug.cgi?id=179511

        Reviewed by Žan Doberšek.

        r217208 changed the definition of GLNativeWindowType from EGLNativeWindowType to uint64_t for platform WPE.
        This built fine on a 64-bit platform since uint64_t matches the size of a pointer, but fails on 32-bits.

        This switches back the definition to EGLNativeWindowType.
        And we need to include <EGL/eglplatform.h> first in order to get a definition for EGLNativeWindowType itself.

        This commit pretty much reverts the changes r217208 did on platform/graphics/GLContext.h

        No new tests, it is a build fix.

        * platform/graphics/GLContext.h:

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

        Remove ENABLE_ALLINONE_BUILD option
        https://bugs.webkit.org/show_bug.cgi?id=179823

        Reviewed by Darin Adler.

        * CMakeLists.txt:

2017-11-20  Emilio Cobos Álvarez  <emilio@crisal.io>

        Incorrect computed style in pseudo-elements with display: contents
        https://bugs.webkit.org/show_bug.cgi?id=179812

        Reviewed by Antti Koivisto.

        Bug 178513 gave them an anon renderer as the main renderer. Unfortunately, the
        style of that box is exposed via getComputedStyle, so that needs to be handled
        somehow to return the correct style.

        Tests: imported/w3c/web-platform-tests/cssom/getComputedStyle-pseudo.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::styledRenderer const):
          Don't return a display: contents pseudo anon box.
        * dom/Element.cpp:
        (WebCore::Element::hasDisplayContents const):
          Just look at the rare data style.
        (WebCore::Element::existingComputedStyle const):
          Look at the rare data first. This also fixes an inefficiency in the
          sense that before then we'd compare the anon box style to the
          pseudo-element style during style update, that may be more changes
          than needed.
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle):
          Move the anon box creation to render tree update instead of style
          resolution.

2017-11-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused TOUCH_ICON_LOADING feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179873

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2017-11-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused LEGACY_VENDOR_PREFIXES feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179872

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2017-11-18  Darin Adler  <darin@apple.com>

        Eliminate some cases of double hashing, other related refactoring
        https://bugs.webkit.org/show_bug.cgi?id=179867

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore): Use get instead of find.

        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::unregisterURL): Use take instead of find/remove.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache): Call setAXObjectID instead of
        using the removeAXID, which doesn't do anything else useful in the destructor.
        (WebCore::AXObjectCache::remove): Use take instead of get/remove. Also rearrange
        logic to eliminate the removeAXID function.
        (WebCore::AXObjectCache::removeAXID): Deleted. This only did two things,
        setAXObjectID(0) and remove from m_idsInUse, and was only called in one place
        besides the destructor. Clearer to not have this funtion.
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData): Use m_idsInUse
        directly instead of using a function.

        * accessibility/AXObjectCache.h: Deleted removeAXID and isIDinUse.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): Call UserActionElementSet::clear instead
        of UserActionElementSet::documentDidRemoveLastRef; new name fo the same function.
        (WebCore::Document::updateHoverActiveState): Use a reference when calling
        setInActiveChain.

        * dom/Element.cpp:
        (WebCore::Element::isUserActionElementInActiveChain const): Pass reference
        instead of pointer.
        (WebCore::Element::isUserActionElementActive const): Ditto.
        (WebCore::Element::isUserActionElementFocused const): Ditto.
        (WebCore::Element::isUserActionElementHovered const): Ditto.
        (WebCore::Element::setActive): Ditto.
        (WebCore::Element::setFocus): Ditto.
        (WebCore::Element::setHovered): Ditto.
        (WebCore::Element::clearHoverAndActiveStatusBeforeDetachingRenderer): Ditto.

        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::resume): Removed unneeded speical case for
        empty vector.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet): Updated now that
        parseAttributes returns an optional instead of using a boolean "OK" out argument.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQueryCache::add): Use get instead of find.

        * dom/UserActionElementSet.cpp:
        (WebCore::UserActionElementSet::didDetach): Deleted. Moved to class definition and
        named clearActiveAndHovered.
        (WebCore::UserActionElementSet::clear): Renamed documentDidRemoveLastRef to clear.
        (WebCore::UserActionElementSet::hasFlag const): Renamed from hasFlags and also
        take reference and enumeration instead of pointer and unsigned. Makes it clearer
        this does not allow null and that it works on a single flag, not a set of flags.
        (WebCore::UserActionElementSet::clearFlags): Changed argument types to reference
        and OptionSet to make it clear this works on a set of flags.
        (WebCore::UserActionElementSet::setFlags): Ditto.

        * dom/UserActionElementSet.h: Updated for changes above. Also made some name
        changes, and used an enum class instead of an enum.

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::saveFormControlState const): Updated since
        FormControlState is now just a vector, not a class.
        * html/FileInputType.cpp:
        (WebCore::FileInputType::filesFromFormControlState): Ditto.
        (WebCore::FileInputType::restoreFormControlState): Removed unneeded check that
        valueSize is a multiple of 2. Code will ignore any extra strings at the end, so
        there is no need for the validity check.

        * html/FormController.cpp:
        (WebCore::serializeFormControlStateTo): Made a non-member function since
        FormControlState is now just a vector, not a class.
        (WebCore::deserializeFormControlState): Ditto. Also return optional instead
        of relying on a special failure state.
        (WebCore::SavedFormState::deserialize): Updated for above changes.
        (WebCore::SavedFormState::serializeTo const): Ditto.
        (WebCore::SavedFormState::appendControlState): Use add instead of both find and add
        to avoid double hashing.
        (WebCore::SavedFormState::takeControlState): Removed unneeded check for empty
        hash table and tweaked coding style.
        (WebCore::SavedFormState::referencedFilePaths const): Renamed to remove "get".
        (WebCore::FormKeyGenerator::formKey): Use ensure instead of find and add.
        (WebCore::FormController::formElementsCharacterCount const): Don't call
        saveFormControlState for non-text-form-controls since we ignored those values.
        (WebCore::FormController::willDeleteForm): Take a reference.
        (WebCore::FormController::restoreControlStateFor): Update since FormControlState
        is now a vector.
        (WebCore::FormController::restoreControlStateIn): Use is/downcast and update
        since FormControlState is now a vector.
        (WebCore::FormController::referencedFilePaths): Renamed to remove "get".
        (WebCore::FormController::registerFormElementWithState):Take a reference.
        (WebCore::FormController::unregisterFormElementWithState): Ditto.

        * html/FormController.h: Removed FormControlState class since it was just a
        Vector<String> with various unneeded features, such as a "failure" state,
        and a never-looked-at type of "skip" or "restore". Updated for other changes
        above.

        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::insertedIntoAncestor): Pass reference.
        (WebCore::HTMLFormControlElementWithState::removedFromAncestor): Ditto.
        * html/HTMLFormControlElementWithState.h: Updated for the above. Also added
        support for using is/downcast on this.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement): Pass reference.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::saveFormControlState const): Use reserveInitialCapacit
        and uncheckedAppend.
        (WebCore::HTMLSelectElement::restoreFormControlState): Updated since state is now
        a vector.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::saveFormControlState const): Ditto.
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::saveFormControlState const): Ditto.
        * html/InputType.cpp:
        (WebCore::InputType::saveFormControlState const): Ditto.

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::forcePseudoState): Use get instead of find/end and got
        rid of uneeded special case. In another overload, ue add and remove instead of
        a find followed by a set or a remove.
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet): Use ensure instead of find/set.
        (WebCore::InspectorCSSAgent::didRemoveDOMNode): Use take instead of find/remove.
        (WebCore::InspectorCSSAgent::didModifyDOMAttr): Use get instead of find.
        * inspector/agents/InspectorCSSAgent.h: Removed unneeded NodeToInspectorStyleSheet
        typedef and changed value type to Ref instead of RefPtr.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind): Use remove instead of contains/remove.
        (WebCore::InspectorDOMAgent::nodeForId): Use isValidKey instead of just checking for
        0 and use get instead of find.
        (WebCore::InspectorDOMAgent::setAttributesAsText): Take out bogus const.
        (WebCore::InspectorDOMAgent::moveTo): Ditto.
        (WebCore::InspectorDOMAgent::resolveNode): Ditto.
        (WebCore::InspectorDOMAgent::isWhitespace): Added FIXME. Use is<Text> instead of
        slower nodeType.
        * inspector/agents/InspectorDOMAgent.h: Removed bogus const.

        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::bind): Use ensure instead of get/set.
        (WebCore::InspectorLayerTreeAgent::unbind): Use take instead of find/remove.
        (WebCore::InspectorLayerTreeAgent::bindPseudoElement): Use ensure instead of get/set.
        (WebCore::InspectorLayerTreeAgent::unbindPseudoElement): Use take instead of
        find/remove.

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies): Use add instead of contains/add.
        (WebCore::InspectorPageAgent::frameDetached): Use take instead of find/remove.
        (WebCore::InspectorPageAgent::frameId): Use ensure instead of get/set.
        (WebCore::InspectorPageAgent::loaderId): Use ensure instead of get/set.
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin): Got rid of unneeded
        local variable.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::sessionID const): Tweaked coding style and added
        a null check for page.
        (WebCore::CachedResourceLoader::requestResource): Call page directly on the frame
        instead of first getting the main frame. Also use take instead of find/remove.
        (WebCore::CachedResourceLoader::removeCachedResource): Rewrite assertion.

        * platform/graphics/FontGenericFamilies.cpp:
        (WebCore::setGenericFontFamilyForScript): Use remove instead of find/remove.
        Simplified the logic a bit in the add case.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::pauseAnimation): Use add instead of find/add.
        Removed code that said "if (action != Remove) action = Pause" since that is a
        no-op; there are only two actions, Remove and Pause.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::mediaControlsScript): Use makeString instead of StringBuilder.
        (WebCore::RenderThemeMac::systemColor const): Rewrote to use ensure instead of add.
        Also crunched the code a little.

        * testing/Internals.cpp:
        (WebCore::Internals::getReferencedFilePaths const): Updated function name.

        * xml/parser/XMLDocumentParser.h: Updated for change below.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::attributesStartElementNsHandler): Updated to use std::optional instead of
        a separate boolean for AttributeParseState.
        (WebCore::parseAttributes): Ditto. Also changed the return value to work the same way.

2017-11-19  Sam Weinig  <sam@webkit.org>

        Clean up gradient code in preparation for conic gradients
        https://bugs.webkit.org/show_bug.cgi?id=179595

        Reviewed by Darin Adler.

        - Switches Gradient to use a Varient with type specific data structs and makes the 
          points / radii immutable.
        - Replaces CSSGradientValue::addStops with template function CSSGradientValue::computeStops
          which dispatches to a helper adoptor struct which is passed in for gradient type specific
          values, rather than switching on type in the function itself. In addition, the function no
          longer mutates a Gradient, but rather mutates type specific the data struct (e.g. Linear or
          Radial for now).

        * css/CSSGradientValue.cpp:
        (WebCore::LinearGradientAdaptor::LinearGradientAdaptor):
        (WebCore::RadialGradientAdaptor::RadialGradientAdaptor):

            Add helper structs for the now templatized CSSGradientValue::computeStops that
            implement type specific functionality.

        (WebCore::CSSGradientValue::computeStops):
        
            Renamed from addStops. Now takes a GradientAdaptor wrapper which abstracts out
            the gradient type specific functionlity.
        
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::createGradient):
        (WebCore::CSSConicGradientValue::createGradient):
        
            Update to call computeStops and use new Gradient create function. 
        
        * css/CSSGradientValue.h:
        
            Update for new signature for computeStops.
        
        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::CanvasGradient):
        
            Update to use new Gradient create function.
        
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        
            Update to get gradient point / radii information from the data accessor.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::Gradient):
        
            Update constructors to the new data structs.
        
        (WebCore::Gradient::type const):
        
            Add helper to get the type of the varient, need for inspector code.
        
        (WebCore::Gradient::adjustParametersForTiledDrawing):
        (WebCore::Gradient::isZeroSize const):
        (WebCore::Gradient::hash const):
        
            Update to switch on the underlying variant to get data values.
        
        (WebCore::Gradient::addColorStop):
        
            Simplify by having one addColorStop call the other.
            
        (WebCore::Gradient::setSortedColorStops):
        
            Added. Replaces setStopsSorted. Used now that CSSGradientValue computes and sorts
            its color stops before creating the gradient.

        * platform/graphics/Gradient.h:
        (WebCore::Gradient::create):
        
            Replace create functions with ones that take data structs.
        
        (WebCore::Gradient::data const):

            Add accessor for the underlying variant.

        (WebCore::Gradient::isRadial const): Deleted.
        
            Replaced by type accessor.
        
        (WebCore::Gradient::p0 const): Deleted.
        (WebCore::Gradient::p1 const): Deleted.
        (WebCore::Gradient::setP0): Deleted.
        (WebCore::Gradient::setP1): Deleted.
        (WebCore::Gradient::startRadius const): Deleted.
        (WebCore::Gradient::endRadius const): Deleted.
        (WebCore::Gradient::setStartRadius): Deleted.
        (WebCore::Gradient::setEndRadius): Deleted.
        
            Point and radii are now immutable.
        
        (WebCore::Gradient::setStopsSorted): Deleted.
        
            Replaced by setSortedColorStops function.
        
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRect):
        
            Pass the GraphicsContext by reference.
        
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::createPlatformGradient):

            Update to switch on the underlying variant to get data values.

        (WebCore::Gradient::fill):
        
            Pass the GraphicsContext by reference.
        
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformDestroy):
        
            Use nullptr.
        
        (WebCore::Gradient::fill):
        
            Pass the GraphicsContext by reference.
        
        (WebCore::Gradient::paint):

            Update to switch on the underlying variant to get data values.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        
            Pass the GraphicsContext by reference.
        
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):

            Update to switch on the underlying variant to get data values.
        
        (WebCore::Gradient::fill):
    
            Pass the GraphicsContext by reference.
        
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintProgressBar):
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::buildGradient const):
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::buildGradient const):
        
            Update for new Gradient create function signature.

2017-11-19  Simon Fraser  <simon.fraser@apple.com>

        Use TypedArrayView's setRange() in FETurbulence
        https://bugs.webkit.org/show_bug.cgi?id=179878

        Reviewed by Sam Weinig.

        Writing the 4 component values at once makes the function about 10% faster.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion const):

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

        ASSERTION FAILED: registration in WebCore::SWServerJobQueue::scriptContextStarted(ServiceWorkerIdentifier)
        https://bugs.webkit.org/show_bug.cgi?id=179846

        Reviewed by Darin Adler.

        We have seen crashes on the bots in SWServerJobQueue because methods such as scriptContextStarted()
        can get called after the jobQueue has been cleared. This is because when a jobQueue is cleared,
        an asynchronous operation may be pending (e.g. script fetch, service worker starting, install event).

        To address the issue, we now pass the identifier of the job that started the asynchronous operation
        when calling the methods on SWServerJobQueue. If the identifier does not match the identifier of
        the current job in the JobQueue, we ignore it.

        This patch also starts using a strongly typed identifier (ServiceWorkerJobIdentifier) for
        ServiceWorkerJob, instead of a uint64_t. It also introduces a ServiceWorkerJobDataIdentifier type
        which contains both a SWServerConnectionIdentifier and a ServiceWorkerJobIdentifier. This is useful
        because ServiceWorkerJobData is passed to the StorageProcess and it needs a globally unique identifier.
        ServiceWorkerJobIdentifier is only guaranteed to be unique within a single WebProcess. Augmenting it
        with the SWServerConnectionIdentifier of the WebProcess makes it globally unique.

        No new tests, unskipped exiting test.

        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerFetchResult.h:
        (WebCore::ServiceWorkerFetchResult::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::identifier const):
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        (WebCore::ServiceWorkerJobData::isolatedCopy const):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::connectionIdentifier const):
        (WebCore::ServiceWorkerJobData::identifier const):
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/ServiceWorkerJobDataIdentifier.h: Copied from Source/WebCore/workers/service/ServiceWorkerFetchResult.h.
        (WebCore::ServiceWorkerJobDataIdentifier::operator== const):
        (WebCore::ServiceWorkerJobDataIdentifier::loggingString const):
        (WebCore::ServiceWorkerJobDataIdentifier::encode const):
        (WebCore::ServiceWorkerJobDataIdentifier::decode):
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::registerServiceWorkerThreadForInstall):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::fireInstallEvent):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::finishedFetchingScript):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::jobRejectedInServer):
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::scheduleJobInServer):
        (WebCore::SWServer::rejectJob):
        (WebCore::SWServer::resolveRegistrationJob):
        (WebCore::SWServer::startScriptFetch):
        (WebCore::SWServer::scriptFetchFinished):
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::scriptContextStarted):
        (WebCore::SWServer::didFinishInstall):
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::isCurrentlyProcessingJob const):
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::didFinishInstall):
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::scriptContextFailedToStart):
        (WebCore::SWServerToContextConnection::scriptContextStarted):
        (WebCore::SWServerToContextConnection::didFinishInstall):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::scriptContextFailedToStart):
        (WebCore::SWServerWorker::scriptContextStarted):
        (WebCore::SWServerWorker::didFinishInstall):
        * workers/service/server/SWServerWorker.h:

2017-11-18  Nan Wang  <n_wang@apple.com>

        AX: AOM: Implement number type properties
        https://bugs.webkit.org/show_bug.cgi?id=179497

        Reviewed by Chris Fleizach.

        Accessibility Object Model
        Explainer: https://wicg.github.io/aom/explainer.html
        Spec: https://wicg.github.io/aom/spec/

        Implemented the number type properties for Accessibility Object Modal.

        Test: accessibility/mac/AOM-number-properties.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::isNodeAriaVisible):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::isMultiSelectable const):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange const):
        (WebCore::AccessibilityARIAGridCell::axRowSpanWithRowIndex const):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange const):
        (WebCore::AccessibilityARIAGridCell::ariaRowSpanWithRowIndex const): Deleted.
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isEnabled const):
        (WebCore::AccessibilityNodeObject::isMultiSelectable const):
        (WebCore::AccessibilityNodeObject::isRequired const):
        (WebCore::AccessibilityNodeObject::headingLevel const):
        (WebCore::AccessibilityNodeObject::valueForRange const):
        (WebCore::AccessibilityNodeObject::maxValueForRange const):
        (WebCore::AccessibilityNodeObject::minValueForRange const):
        (WebCore::AccessibilityNodeObject::hierarchicalLevel const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::intValueForProperty const):
        (WebCore::AccessibilityObject::unsignedValueForProperty const):
        (WebCore::AccessibilityObject::doubleValueForProperty const):
        (WebCore::AccessibilityObject::supportsSetSize const):
        (WebCore::AccessibilityObject::supportsPosInSet const):
        (WebCore::AccessibilityObject::setSize const):
        (WebCore::AccessibilityObject::posInSet const):
        (WebCore::AccessibilityObject::supportsARIASetSize const): Deleted.
        (WebCore::AccessibilityObject::supportsARIAPosInSet const): Deleted.
        (WebCore::AccessibilityObject::ariaSetSize const): Deleted.
        (WebCore::AccessibilityObject::ariaPosInSet const): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::defaultObjectInclusion const):
        (WebCore::AccessibilityRenderObject::liveRegionAtomic const):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable const):
        (WebCore::AccessibilityTable::axColumnCount const):
        (WebCore::AccessibilityTable::axRowCount const):
        (WebCore::AccessibilityTable::ariaColumnCount const): Deleted.
        (WebCore::AccessibilityTable::ariaRowCount const): Deleted.
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::AccessibilityTableCell):
        (WebCore::AccessibilityTableCell::rowIndexRange const):
        (WebCore::AccessibilityTableCell::columnIndexRange const):
        (WebCore::AccessibilityTableCell::axColumnIndex const):
        (WebCore::AccessibilityTableCell::axRowIndex const):
        (WebCore::AccessibilityTableCell::axColumnSpan const):
        (WebCore::AccessibilityTableCell::axRowSpan const):
        (WebCore::AccessibilityTableCell::ariaColumnIndex const): Deleted.
        (WebCore::AccessibilityTableCell::ariaRowIndex const): Deleted.
        (WebCore::AccessibilityTableCell::ariaColumnSpan const): Deleted.
        (WebCore::AccessibilityTableCell::ariaRowSpan const): Deleted.
        * accessibility/AccessibilityTableCell.h:
        (WebCore::AccessibilityTableCell::setAXColIndexFromRow):
        (WebCore::AccessibilityTableCell::setARIAColIndexFromRow): Deleted.
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::addChildren):
        (WebCore::AccessibilityTableRow::axColumnIndex const):
        (WebCore::AccessibilityTableRow::axRowIndex const):
        (WebCore::AccessibilityTableRow::ariaColumnIndex const): Deleted.
        (WebCore::AccessibilityTableRow::ariaRowIndex const): Deleted.
        * accessibility/AccessibilityTableRow.h:
        * accessibility/AccessibleNode.cpp:
        (WebCore::ariaAttributeMap):
        (WebCore::isPropertyValueInt):
        (WebCore::isPropertyValueUnsigned):
        (WebCore::isPropertyValueFloat):
        (WebCore::AccessibleNode::setProperty):
        (WebCore::AccessibleNode::setOptionalProperty):
        (WebCore::AccessibleNode::setStringProperty):
        (WebCore::AccessibleNode::optionalValueForProperty):
        (WebCore::AccessibleNode::effectiveBoolValueForElement):
        (WebCore::AccessibleNode::effectiveIntValueForElement):
        (WebCore::AccessibleNode::effectiveUnsignedValueForElement):
        (WebCore::AccessibleNode::effectiveDoubleValueForElement):
        (WebCore::AccessibleNode::atomic const):
        (WebCore::AccessibleNode::setAtomic):
        (WebCore::AccessibleNode::setAutocomplete):
        (WebCore::AccessibleNode::busy const):
        (WebCore::AccessibleNode::setBusy):
        (WebCore::AccessibleNode::setChecked):
        (WebCore::AccessibleNode::colCount const):
        (WebCore::AccessibleNode::setColCount):
        (WebCore::AccessibleNode::colIndex const):
        (WebCore::AccessibleNode::setColIndex):
        (WebCore::AccessibleNode::colSpan const):
        (WebCore::AccessibleNode::setColSpan):
        (WebCore::AccessibleNode::setCurrent):
        (WebCore::AccessibleNode::disabled const):
        (WebCore::AccessibleNode::setDisabled):
        (WebCore::AccessibleNode::expanded const):
        (WebCore::AccessibleNode::setExpanded):
        (WebCore::AccessibleNode::setHasPopUp):
        (WebCore::AccessibleNode::hidden const):
        (WebCore::AccessibleNode::setHidden):
        (WebCore::AccessibleNode::setInvalid):
        (WebCore::AccessibleNode::setKeyShortcuts):
        (WebCore::AccessibleNode::label const):
        (WebCore::AccessibleNode::setLabel):
        (WebCore::AccessibleNode::level const):
        (WebCore::AccessibleNode::setLevel):
        (WebCore::AccessibleNode::live const):
        (WebCore::AccessibleNode::setLive):
        (WebCore::AccessibleNode::modal const):
        (WebCore::AccessibleNode::setModal):
        (WebCore::AccessibleNode::multiline const):
        (WebCore::AccessibleNode::setMultiline):
        (WebCore::AccessibleNode::multiselectable const):
        (WebCore::AccessibleNode::setMultiselectable):
        (WebCore::AccessibleNode::setOrientation):
        (WebCore::AccessibleNode::setPlaceholder):
        (WebCore::AccessibleNode::posInSet const):
        (WebCore::AccessibleNode::setPosInSet):
        (WebCore::AccessibleNode::setPressed):
        (WebCore::AccessibleNode::readOnly const):
        (WebCore::AccessibleNode::setReadOnly):
        (WebCore::AccessibleNode::setRelevant):
        (WebCore::AccessibleNode::required const):
        (WebCore::AccessibleNode::setRequired):
        (WebCore::AccessibleNode::setRole):
        (WebCore::AccessibleNode::setRoleDescription):
        (WebCore::AccessibleNode::rowCount const):
        (WebCore::AccessibleNode::setRowCount):
        (WebCore::AccessibleNode::rowIndex const):
        (WebCore::AccessibleNode::setRowIndex):
        (WebCore::AccessibleNode::rowSpan const):
        (WebCore::AccessibleNode::setRowSpan):
        (WebCore::AccessibleNode::selected const):
        (WebCore::AccessibleNode::setSelected):
        (WebCore::AccessibleNode::setSize const):
        (WebCore::AccessibleNode::setSetSize):
        (WebCore::AccessibleNode::setSort):
        (WebCore::AccessibleNode::valueMax const):
        (WebCore::AccessibleNode::setValueMax):
        (WebCore::AccessibleNode::valueMin const):
        (WebCore::AccessibleNode::setValueMin):
        (WebCore::AccessibleNode::valueNow const):
        (WebCore::AccessibleNode::setValueNow):
        (WebCore::AccessibleNode::setValueText):
        (WebCore::AccessibleNode::boolValueForProperty): Deleted.
        (WebCore::AccessibleNode::setBoolProperty): Deleted.
        * accessibility/AccessibleNode.h:
        * accessibility/AccessibleNode.idl:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetNColumns):
        (webkitAccessibleTableGetNRows):
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        (webkitAccessibleTableCellGetPosition):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityARIARowCount]):
        (-[WebAccessibilityObjectWrapper accessibilityARIAColumnCount]):
        (-[WebAccessibilityObjectWrapper accessibilityARIARowIndex]):
        (-[WebAccessibilityObjectWrapper accessibilityARIAColumnIndex]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2017-11-18  Tim Horton  <timothy_horton@apple.com>

        Fix typos in closing ENABLE() comments
        https://bugs.webkit.org/show_bug.cgi?id=179869

        Unreviewed.

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:

2017-11-18  Maciej Stachowiak  <mjs@apple.com>

        Remove TEC support and all TEC-only encodings except EUC-TW (which now uses ICU)
        https://bugs.webkit.org/show_bug.cgi?id=179582

        Reviewed by Darin Adler.

        Already covered by fast/encoding/legacy-tec-encodings.html

        * platform/text/TextCodecICU.cpp: Add support for EUC-TW.

        Remove all vestiges of TEC text codec and its related autogeneration scripts.
        
        * DerivedSources.make:
        * PlatformMac.cmake:
        * SourcesMac.txt:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData): No more cached TEC decoder.
        (WebCore::ThreadGlobalData::destroy): ditto
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::ThreadGlobalData::cachedConverterTEC): Deleted.
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps): Don't add TEC decoders on MAc.
        * platform/text/mac/CharsetData.h: Removed.
        * platform/text/mac/TextCodecMac.cpp: Removed.
        * platform/text/mac/TextCodecMac.h: Removed.
        * platform/text/mac/character-sets.txt: Removed.
        * platform/text/mac/ios-encodings.txt: Removed.
        * platform/text/mac/mac-encodings.txt: Removed.
        * platform/text/mac/make-charset-table.pl: Removed.

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        Mechanical cleanup of FE* files
        https://bugs.webkit.org/show_bug.cgi?id=179868

        Reviewed by Wenson Hsieh.

        Remove unused dump() functions.
        Make overridden member functions in derived classes private.
        Make simple getters inline.
        
        Move common FESpecularLighting and FEDiffuseLighting functions into the 
        FELighting base class.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::blendMode const): Deleted.
        (WebCore::FEBlend::dump): Deleted.
        * platform/graphics/filters/FEBlend.h:
        (WebCore::FEBlend::blendMode const):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::type const): Deleted.
        (WebCore::FEColorMatrix::values const): Deleted.
        (WebCore::FEColorMatrix::dump): Deleted.
        * platform/graphics/filters/FEColorMatrix.h:
        (WebCore::FEColorMatrix::type const):
        (WebCore::FEColorMatrix::values const):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::redFunction const): Deleted.
        (WebCore::FEComponentTransfer::greenFunction const): Deleted.
        (WebCore::FEComponentTransfer::blueFunction const): Deleted.
        (WebCore::FEComponentTransfer::alphaFunction const): Deleted.
        (WebCore::FEComponentTransfer::dump): Deleted.
        * platform/graphics/filters/FEComponentTransfer.h:
        (WebCore::FEComponentTransfer::redFunction const):
        (WebCore::FEComponentTransfer::greenFunction const):
        (WebCore::FEComponentTransfer::blueFunction const):
        (WebCore::FEComponentTransfer::alphaFunction const):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::operation const): Deleted.
        (WebCore::FEComposite::k1 const): Deleted.
        (WebCore::FEComposite::k2 const): Deleted.
        (WebCore::FEComposite::k3 const): Deleted.
        (WebCore::FEComposite::k4 const): Deleted.
        (WebCore::FEComposite::dump): Deleted.
        * platform/graphics/filters/FEComposite.h:
        (WebCore::FEComposite::operation const):
        (WebCore::FEComposite::k1 const):
        (WebCore::FEComposite::k2 const):
        (WebCore::FEComposite::k3 const):
        (WebCore::FEComposite::k4 const):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::kernelSize const): Deleted.
        (WebCore::FEConvolveMatrix::kernel const): Deleted.
        (WebCore::FEConvolveMatrix::divisor const): Deleted.
        (WebCore::FEConvolveMatrix::bias const): Deleted.
        (WebCore::FEConvolveMatrix::targetOffset const): Deleted.
        (WebCore::FEConvolveMatrix::edgeMode const): Deleted.
        (WebCore::FEConvolveMatrix::kernelUnitLength const): Deleted.
        (WebCore::FEConvolveMatrix::preserveAlpha const): Deleted.
        (WebCore::FEConvolveMatrix::dump): Deleted.
        * platform/graphics/filters/FEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::kernelSize const):
        (WebCore::FEConvolveMatrix::kernel const):
        (WebCore::FEConvolveMatrix::divisor const):
        (WebCore::FEConvolveMatrix::bias const):
        (WebCore::FEConvolveMatrix::targetOffset const):
        (WebCore::FEConvolveMatrix::edgeMode const):
        (WebCore::FEConvolveMatrix::kernelUnitLength const):
        (WebCore::FEConvolveMatrix::preserveAlpha const):
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::lightingColor const): Deleted.
        (WebCore::FEDiffuseLighting::setLightingColor): Deleted.
        (WebCore::FEDiffuseLighting::surfaceScale const): Deleted.
        (WebCore::FEDiffuseLighting::setSurfaceScale): Deleted.
        (WebCore::FEDiffuseLighting::diffuseConstant const): Deleted.
        (WebCore::FEDiffuseLighting::kernelUnitLengthX const): Deleted.
        (WebCore::FEDiffuseLighting::setKernelUnitLengthX): Deleted.
        (WebCore::FEDiffuseLighting::kernelUnitLengthY const): Deleted.
        (WebCore::FEDiffuseLighting::setKernelUnitLengthY): Deleted.
        (WebCore::FEDiffuseLighting::lightSource const): Deleted.
        (WebCore::FEDiffuseLighting::dump): Deleted.
        * platform/graphics/filters/FEDiffuseLighting.h:
        (WebCore::FEDiffuseLighting::diffuseConstant const):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::xChannelSelector const): Deleted.
        (WebCore::FEDisplacementMap::yChannelSelector const): Deleted.
        (WebCore::FEDisplacementMap::scale const): Deleted.
        (WebCore::FEDisplacementMap::dump): Deleted.
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::xChannelSelector const):
        (WebCore::FEDisplacementMap::yChannelSelector const):
        (WebCore::FEDisplacementMap::scale const):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::dump): Deleted.
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::floodColor const): Deleted.
        (WebCore::FEFlood::floodOpacity const): Deleted.
        (WebCore::FEFlood::dump): Deleted.
        * platform/graphics/filters/FEFlood.h:
        (WebCore::FEFlood::floodColor const):
        (WebCore::FEFlood::floodOpacity const):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::stdDeviationX const): Deleted.
        (WebCore::FEGaussianBlur::stdDeviationY const): Deleted.
        (WebCore::FEGaussianBlur::edgeMode const): Deleted.
        (WebCore::FEGaussianBlur::dump): Deleted.
        * platform/graphics/filters/FEGaussianBlur.h:
        (WebCore::FEGaussianBlur::stdDeviationX const):
        (WebCore::FEGaussianBlur::stdDeviationY const):
        (WebCore::FEGaussianBlur::edgeMode const):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::setSurfaceScale):
        (WebCore::FELighting::setLightingColor):
        (WebCore::FELighting::setKernelUnitLengthX):
        (WebCore::FELighting::setKernelUnitLengthY):
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::surfaceScale const):
        (WebCore::FELighting::lightingColor const):
        (WebCore::FELighting::kernelUnitLengthX const):
        (WebCore::FELighting::kernelUnitLengthY const):
        (WebCore::FELighting::lightSource const):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::dump): Deleted.
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::dump): Deleted.
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::dx const): Deleted.
        (WebCore::FEOffset::dy const): Deleted.
        (WebCore::FEOffset::dump): Deleted.
        * platform/graphics/filters/FEOffset.h:
        (WebCore::FEOffset::dx const):
        (WebCore::FEOffset::dy const):
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::lightingColor const): Deleted.
        (WebCore::FESpecularLighting::setLightingColor): Deleted.
        (WebCore::FESpecularLighting::surfaceScale const): Deleted.
        (WebCore::FESpecularLighting::setSurfaceScale): Deleted.
        (WebCore::FESpecularLighting::specularConstant const): Deleted.
        (WebCore::FESpecularLighting::specularExponent const): Deleted.
        (WebCore::FESpecularLighting::kernelUnitLengthX const): Deleted.
        (WebCore::FESpecularLighting::setKernelUnitLengthX): Deleted.
        (WebCore::FESpecularLighting::kernelUnitLengthY const): Deleted.
        (WebCore::FESpecularLighting::setKernelUnitLengthY): Deleted.
        (WebCore::FESpecularLighting::lightSource const): Deleted.
        (WebCore::FESpecularLighting::dump): Deleted.
        * platform/graphics/filters/FESpecularLighting.h:
        (WebCore::FESpecularLighting::specularConstant const):
        (WebCore::FESpecularLighting::specularExponent const):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::dump): Deleted.
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::dump): Deleted.
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::dump): Deleted.
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::dump): Deleted.
        * platform/graphics/filters/SourceGraphic.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::dump): Deleted.
        * svg/graphics/filters/SVGFEImage.h:

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix Windows build failures seen in EWS.
        
        Remove default constructor for ColorComponents, which was ambiguous with the
        one that takes 4 values.

        * platform/graphics/ColorUtilities.h:

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        Line of garbage pixels at the bottom of an feTurbulence sometimes
        https://bugs.webkit.org/show_bug.cgi?id=179866

        Reviewed by Wenson Hsieh.
        
        The ParallelJobs logic was broken in that the sum of the computed job
        heights was one too short sometimes. Fix and clean up the logic.

        Test: svg/filters/feTurbulence-parallel-jobs.html

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        Use #pragma once in FE* files.
        
        Rubber-stamped by Dan Bates.

        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.h:

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        Remove a TimingScope that I left in by mistake.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::platformApplySoftware):

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        FETurbulence: round the result according to the spec
        https://bugs.webkit.org/show_bug.cgi?id=179865

        Reviewed by Zalan Bujtas.

        The spec explicitly says that the floating point results are multiplied by 255 then
        clamped between 0 and 255, so do this instead of using lroundf().
        
        This is also faster (about 10%).

        * platform/graphics/ColorUtilities.h:
        (WebCore::ColorComponents::ColorComponents):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::toColorComponents):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint const):

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        More FETurbulence cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179863

        Reviewed by Zalan Bujtas.
        
        Hoist computation of initial StitchData up to be done once per filter,
        not once per pixel. Passing initial StitchData by value to calculateTurbulenceValueForPoint()
        ensures that each pixel gets the initial state.
        
        Also, adjusted baseFrequencyX and baseFrequencyY can be computed just once at the start,
        and passed through via PaintingData.
        
        Change enum TurbulenceType to be an enum class (requiring casts in a couple of places)
        and undo the capitalization of the values.

        Fix spelling of TURBULANCE -> TURBULENCE in test output.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::computeStitching const):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint const):
        (WebCore::FETurbulence::fillRegion const):
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::platformApplySoftware):
        (WebCore::operator<<):
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::PaintingData::PaintingData):
        (WebCore::FETurbulence::StitchData::StitchData): Deleted.
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::enumerationValueForTargetAttribute):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        * svg/SVGFETurbulenceElement.h:
        (WebCore::SVGPropertyTraits<TurbulenceType>::highestEnumValue):
        (WebCore::SVGPropertyTraits<TurbulenceType>::toString):
        (WebCore::SVGPropertyTraits<TurbulenceType>::fromString):

2017-11-18  Simon Fraser  <simon.fraser@apple.com>

        feTurbulence with stitchTiles is broken
        https://bugs.webkit.org/show_bug.cgi?id=179862

        Reviewed by Zalan Bujtas.
        
        The "stitchTiles" logic was broken, and not equivalent to the spec sample code,
        because it didn't compute and wrap the bx1 and by1 equivalents separately from
        bx0 and by0.
        
        Annotated the code with the equivalent sample code from the spec for ease of
        comparison.
        
        Also make some functions const.

        Test: svg/filters/feTurbulence-stitchTiles.html

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::noise2D const):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint const):
        (WebCore::FETurbulence::fillRegion const):
        (WebCore::checkNoise): Deleted.
        (WebCore::FETurbulence::noise2D): Deleted.
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint): Deleted.
        (WebCore::FETurbulence::fillRegion): Deleted.
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::filter const):

2017-11-18  Antti Koivisto  <antti@apple.com>

        REGRESSION (r220646): REGRESSION (r220646): RenderTreePosition::computeNextSibling hits assertion with certain first-letter mutations
        https://bugs.webkit.org/show_bug.cgi?id=179855
        <rdar://problem/35464071>

        Reviewed by Zalan Bujtas.

        Test: fast/css-generated-content/first-letter-update-crash.html

        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::styleForFirstLetter):
        (WebCore::updateFirstLetterStyle):
        (WebCore::createFirstLetterRenderer):

            Tighten these to take RenderBlock.

        (WebCore::supportsFirstLetter):

            Test exact conditions where first letter renderer is allowed for fast rejection.

        (WebCore::RenderTreeUpdater::FirstLetter::update):

            If update was called on a block that doesn't support first letter, getFirstLetter could in
            some cases return an ancestor of the block and we would end up mutating a first letter renderer
            that wasn't current block's descendant. This violates assumptions of the RenderTreeUpdater
            and could cause cached render tree position to become invalid.

            Fix by ensuring we are always updating first letter for the current block only.

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

        [Service Workers] Implement "Notify Controller Change" algorithm
        https://bugs.webkit.org/show_bug.cgi?id=179822

        Reviewed by Youenn Fablet.

        Implement "Notify Controller Change" algorithm:
        - https://w3c.github.io/ServiceWorker/#notify-controller-change

        Use it to support step 7 of "Activate" algorithm:
        - https://w3c.github.io/ServiceWorker/#activate

        Test: http/tests/workers/service/controller-change.html

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireControllerChangeEvent):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::notifyClientsOfControllerChange):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::activate):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::notifyClientsOfControllerChange):
        * workers/service/server/SWServerRegistration.h:

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

        Unreviewed attempt to fix build after r225006.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setStorageAccessGranted):

2017-11-17  Simon Fraser  <simon.fraser@apple.com>

        FETurbulence: compute all 4 channels at once
        https://bugs.webkit.org/show_bug.cgi?id=179833

        Reviewed by Sam Weinig.

        Introduce some new helper classes for storing float color components, and use
        them in calculateTurbulenceValueForPoint() and noise2D() for all the channels in one
        pass. This makes FETurbulence about twice as fast.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ColorUtilities.cpp: Added.
        (WebCore::ColorComponents::ColorComponents):
        * platform/graphics/ColorUtilities.h: Added.
        (WebCore::FloatComponents::FloatComponents):
        (WebCore::FloatComponents::operator +=):
        (WebCore::FloatComponents::operator + const):
        (WebCore::FloatComponents::operator / const):
        (WebCore::FloatComponents::operator * const):
        (WebCore::FloatComponents::abs const):
        (WebCore::clampedColorComponent):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::noise2D):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulence::fillRegion):
        (WebCore::FETurbulence::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.h:

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

        Use a strongly typed identifier for SWServer::Connection
        https://bugs.webkit.org/show_bug.cgi?id=179848

        Reviewed by Brady Eidson.

        Use a strongly typed identifier for SWServer::Connection, for clarity.

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::ServiceWorkerClient):
        (WebCore::ServiceWorkerClient::id const):
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/ServiceWorkerClient.h:
        (WebCore::ServiceWorkerClient::create):
        (WebCore::ServiceWorkerClient::identifier const):
        * workers/service/ServiceWorkerClientData.cpp:
        (WebCore::ServiceWorkerClientData::isolatedCopy const):
        (WebCore::ServiceWorkerClientData::from):
        * workers/service/ServiceWorkerClientData.h:
        (WebCore::ServiceWorkerClientData::encode const):
        (WebCore::ServiceWorkerClientData::decode):
        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::toString const):
        (WebCore::ServiceWorkerClientIdentifier::decode):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::connectionIdentifier):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerFetchResult.h:
        (WebCore::ServiceWorkerFetchResult::decode):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::connectionIdentifier const):
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/ServiceWorkerWindowClient.cpp:
        (WebCore::ServiceWorkerWindowClient::ServiceWorkerWindowClient):
        * workers/service/ServiceWorkerWindowClient.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        (WebCore::SWServer::Connection::scheduleJobInServer):
        (WebCore::SWServer::rejectJob):
        (WebCore::SWServer::resolveRegistrationJob):
        (WebCore::SWServer::startScriptFetch):
        (WebCore::SWServer::scriptFetchFinished):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::identifier const):
        (WebCore::SWServer::getConnection):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::forEachConnection):
        (WebCore::SWServerRegistration::addClientServiceWorkerRegistration):
        (WebCore::SWServerRegistration::removeClientServiceWorkerRegistration):
        (WebCore::SWServerRegistration::unregisterServerConnection):
        * workers/service/server/SWServerRegistration.h:

2017-11-17  John Wilander  <wilander@apple.com>

        Storage Access API: UI process should update network process about granted access
        https://bugs.webkit.org/show_bug.cgi?id=176943
        <rdar://problem/34440612>

        Reviewed by Alex Christensen.

        Tests: http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction.html
               http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-recent-user-interaction.html

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setStorageAccessAPIEnabled):
        (WebCore::NetworkStorageSession::cookieStoragePartition const):
            Now also checks if the resource has been granted storage access
            under this partition and if so, does not return a partition.
        (WebCore::NetworkStorageSession::setPrevalentDomainsToPartitionOrBlockCookies):
            Now clears storage access when it is told to clear first.
        (WebCore::NetworkStorageSession::isStorageAccessGranted const):
        (WebCore::NetworkStorageSession::setStorageAccessGranted):

2017-11-17  Simon Fraser  <simon.fraser@apple.com>

        Inadvertently swapped m_baseFrequencyX and m_baseFrequencyY in the previous commit.

        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::baseFrequencyY const):
        (WebCore::FETurbulence::baseFrequencyX const):

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

        REGRESSION(224348): [mac-wk1] LayoutTest media/video-src-remove.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=179806

        Reviewed by Jer Noble.

        In r224348 I used callOnMainThread to fix UIWebView which uses the web thread, but Mac doesn't
        use the web thread. Something about the timing of operations in the media stack requires that
        dispatch_async be used instead of performSelectorOnMainThread.
        
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate callFunctionOnMainThread:]):
        Use callOnMainThread on iOS, dispatch_async on Mac.

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

        [Win] Compile error in InbandTextTrackPrivateAVCF::readNativeSampleBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=179845

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::readNativeSampleBuffer):

2017-11-17  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver in Safari does not read table header for first cell in first body row
        https://bugs.webkit.org/show_bug.cgi?id=179780
        <rdar://problem/35590551>

        Reviewed by Joanmarie Diggs.

        A table cell shouldn't be considered a row header if it's in a row of other headers.

        Test: accessibility/table-header-calculation-for-header-rows.html

        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):

2017-11-17  Simon Fraser  <simon.fraser@apple.com>

        Don't invert a matrix for every channel of every pixel of an FETurbulence filter
        https://bugs.webkit.org/show_bug.cgi?id=179829

        Reviewed by Dean Jackson.
        
        FETurbulence::fillRegion() called filter().mapAbsolutePointToLocalPoint(point) for each
        of the 4 channels on a point, which is stupid.
        
        Fix to invert the matrix once, and then map the point once for each pixel. This reduces
        the time in fillRegion() function by about 30%.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::absoluteTransform const):
        (WebCore::Filter::mapAbsolutePointToLocalPoint const): Deleted.

2017-11-17  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r224390): Revert unneeded Ref use.
        https://bugs.webkit.org/show_bug.cgi?id=179844
        <rdar://problem/35624718>

        Reviewed by Chris Dumez.

        A Ref was added to a simple code path used for type checking, which introduced a nullptr
        deref. The original change was not needed, so let's revert it.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::contentDocument const): Use 'nullptr' instead of 0.
        (WebCore::HTMLFrameOwnerElement::contentWindow const): Ditto.
        (WebCore::HTMLFrameOwnerElement::getSVGDocument const): Revert to original code here.

2017-11-17  Nan Wang  <n_wang@apple.com>

        AX: AOM: Implement boolean type properties
        https://bugs.webkit.org/show_bug.cgi?id=179496

        Reviewed by Chris Fleizach.

        Accessibility Object Model
        Explainer: https://wicg.github.io/aom/explainer.html
        Spec: https://wicg.github.io/aom/spec/

        Implemented the boolean type properties for Accessibility Object Modal.

        Test: accessibility/mac/AOM-bool-properties.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::findModalNodes):
        (WebCore::AXObjectCache::updateCurrentModalNode):
        (WebCore::AXObjectCache::modalNode):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::handleMenuItemSelected):
        (WebCore::AXObjectCache::focusModalNode):
        (WebCore::AXObjectCache::focusModalNodeTimerFired):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::handleModalChange):
        (WebCore::isNodeAriaVisible):
        (WebCore::AXObjectCache::findAriaModalNodes): Deleted.
        (WebCore::AXObjectCache::updateCurrentAriaModalNode): Deleted.
        (WebCore::AXObjectCache::ariaModalNode): Deleted.
        (WebCore::AXObjectCache::focusAriaModalNode): Deleted.
        (WebCore::AXObjectCache::focusAriaModalNodeTimerFired): Deleted.
        (WebCore::AXObjectCache::handleAriaModalChange): Deleted.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::modalNode):
        (WebCore::AXObjectCache::focusModalNodeTimerFired):
        (WebCore::AXObjectCache::handleModalChange):
        (WebCore::AXObjectCache::ariaModalNode): Deleted.
        (WebCore::AXObjectCache::focusAriaModalNodeTimerFired): Deleted.
        (WebCore::AXObjectCache::handleAriaModalChange): Deleted.
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::isMultiSelectable const):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::readOnlyValue const):
        (WebCore::AccessibilityARIAGridCell::ariaReadOnlyValue const): Deleted.
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isEnabled const):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isEnabled const):
        (WebCore::AccessibilityNodeObject::isMultiSelectable const):
        (WebCore::AccessibilityNodeObject::isRequired const):
        (WebCore::shouldUseAccessibilityObjectInnerText):
        (WebCore::AccessibilityNodeObject::canSetValueAttribute const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsReadOnly const):
        (WebCore::AccessibilityObject::readOnlyValue const):
        (WebCore::AccessibilityObject::ariaIsMultiline const):
        (WebCore::AccessibilityObject::isModalDescendant const):
        (WebCore::AccessibilityObject::isModalNode const):
        (WebCore::AccessibilityObject::ignoredFromModalPresence const):
        (WebCore::AccessibilityObject::boolValueForProperty const):
        (WebCore::AccessibilityObject::supportsARIAAttributes const):
        (WebCore::AccessibilityObject::supportsExpanded const):
        (WebCore::AccessibilityObject::isExpanded const):
        (WebCore::AccessibilityObject::isAXHidden const):
        (WebCore::AccessibilityObject::defaultObjectInclusion const):
        (WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild):
        (WebCore::AccessibilityObject::supportsARIAReadOnly const): Deleted.
        (WebCore::AccessibilityObject::ariaReadOnlyValue const): Deleted.
        (WebCore::AccessibilityObject::isAriaModalDescendant const): Deleted.
        (WebCore::AccessibilityObject::isAriaModalNode const): Deleted.
        (WebCore::AccessibilityObject::ignoredFromARIAModalPresence const): Deleted.
        (WebCore::AccessibilityObject::isARIAHidden const): Deleted.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isHidden const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::defaultObjectInclusion const):
        (WebCore::AccessibilityRenderObject::isSelected const):
        (WebCore::AccessibilityRenderObject::canSetExpandedAttribute const):
        (WebCore::AccessibilityRenderObject::liveRegionAtomic const):
        (WebCore::AccessibilityRenderObject::isBusy const):
        * accessibility/AccessibleNode.cpp:
        (WebCore::ariaAttributeMap):
        (WebCore::isPropertyValueBoolean):
        (WebCore::AccessibleNode::effectiveBoolValueForElement):
        (WebCore::AccessibleNode::boolValueForProperty):
        (WebCore::AccessibleNode::setBoolProperty):
        (WebCore::AccessibleNode::atomic const):
        (WebCore::AccessibleNode::setAtomic):
        (WebCore::AccessibleNode::busy const):
        (WebCore::AccessibleNode::setBusy):
        (WebCore::AccessibleNode::disabled const):
        (WebCore::AccessibleNode::setDisabled):
        (WebCore::AccessibleNode::expanded const):
        (WebCore::AccessibleNode::setExpanded):
        (WebCore::AccessibleNode::hidden const):
        (WebCore::AccessibleNode::setHidden):
        (WebCore::AccessibleNode::modal const):
        (WebCore::AccessibleNode::setModal):
        (WebCore::AccessibleNode::multiline const):
        (WebCore::AccessibleNode::setMultiline):
        (WebCore::AccessibleNode::multiselectable const):
        (WebCore::AccessibleNode::setMultiselectable):
        (WebCore::AccessibleNode::readOnly const):
        (WebCore::AccessibleNode::setReadOnly):
        (WebCore::AccessibleNode::required const):
        (WebCore::AccessibleNode::setRequired):
        (WebCore::AccessibleNode::selected const):
        (WebCore::AccessibleNode::setSelected):
        * accessibility/AccessibleNode.h:
        * accessibility/AccessibleNode.idl:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (setAtkStateSetFromCoreObject):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

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

        Clean up URL.h
        https://bugs.webkit.org/show_bug.cgi?id=179710

        Reviewed by Brady Eidson.

        No change in behavior.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::urlString const):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::url const):
        * platform/URL.cpp:
        (WebCore::URL::serialize const): Deleted.
        * platform/URL.h:
        * platform/mac/URLMac.mm:
        (WebCore::URL::createCFURL const):

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

        Use RunLoop and Mode from NetworkingContext if they are given
        https://bugs.webkit.org/show_bug.cgi?id=179800
        <rdar://problem/35519421>

        Reviewed by Brady Eidson.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (callOnMainThreadOrSchedule):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

2017-11-17  Simon Fraser  <simon.fraser@apple.com>

        FETurbulence const and inline cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179832

        Reviewed by Dean Jackson.

        Pass the PaintingData& around as const, and remove some 'inline', letting the compiler
        decide. Also declare a few variables closer to first use.
        
        Speeds up FETurbulence by about 1%.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::initPaint):
        (WebCore::FETurbulence::noise2D):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulence::fillRegion):
        * platform/graphics/filters/FETurbulence.h:

2017-11-17  Antti Koivisto  <antti@apple.com>

        Move destroyLeftoverChildren call to RenderObject::destroy
        https://bugs.webkit.org/show_bug.cgi?id=179819

        Reviewed by Zalan Bujtas.

        This is currently called inconsistenly from various willBeDestroyed implementations.
        We should always call it before invoking willBeDestroyed.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setLastChild):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):

            Add some release asserts verifying layer has been detached before destruction.
            This would reveal cases where destroyLeftoverChildren was called too late.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):

            Call destroyLeftoverChildren.

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

        SVG scrolling anchor should be reset if the fragmentIdentifier does not exist or is not provided
        https://bugs.webkit.org/show_bug.cgi?id=176577

        Reviewed by Simon Fraser.

        Because the SVGImage can be cached only once but used multiple times with
        different fragmentIdentifiers, SVGImage has to call FrameView::scrollToFragment()
        before the image is displayed. If the fragmentIdentifier is not provided
        in the URL or it does not exist in the SVGImage, FrameView::scrollToFragment()
        has to reset the scrolling anchor of the SVG as if it was not displayed before.
        We do not want the previous scrolling anchor to be used when the FrameView
        of SVGImage can't scroll to the current fragmentIdentifier for any reason.

        Test: http/tests/svg/svg-fragment-url-special-cases.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment):
        (WebCore::FrameView::scrollToAnchor):
        (WebCore::FrameView::resetScrollAnchor):
        * page/FrameView.h:
        * platform/URL.cpp:
        (WebCore::URL::fragmentIdentifier const): Call hasFragmentIdentifier() 
        instead of repeating the same condition.
        (WebCore::decodeURLEscapeSequences):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::findViewAnchor const):
        (WebCore::SVGSVGElement::findRootAnchor const):
        (WebCore::SVGSVGElement::scrollToAnchor): We want to know whether the SVG 
        root element could scroll to the fragmentIdentifier or not. If it could not,
        FrameView::scrollToAnchor() can still try one last time to do the scrolling
        only if anchorElement is not nullptr.
        (WebCore::SVGSVGElement::resetScrollAnchor): Reset the FrameView scrolling
        state to its initial value.
        * svg/SVGSVGElement.h:

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

        ServiceWorker intercepted FetchRequest should have their referrer set appropriately.
        https://bugs.webkit.org/show_bug.cgi?id=179803

        Reviewed by Chris Dumez.

        Covered by updated tests.

        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):

2017-11-17  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [GTK] Regression: accessibility/gtk/aria-keyshortcuts.html fails after r224953
        https://bugs.webkit.org/show_bug.cgi?id=179824

        Reviewed by Chris Fleizach.

        The failure was due to AXPropertyName::KeyShortcuts not being included in
        the group of properties whose value is a string. As a result, the new method
        to get string values, AccessibleNode::effectiveStringValueForElement(), was
        returning an empty String. This was not caught by the shared set of tests
        because at the present time, only WebKitGtk supports aria-keyshortcuts.

        No new tests needed. The regression was caught by an existing test.

        * accessibility/AccessibleNode.cpp:
        (WebCore::isPropertyValueString):

2017-11-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224952.

        This change introduced LayoutTest failures on WK1.

        Reverted changeset:

        "Use RunLoop and Mode from NetworkingContext if they are
        given"
        https://bugs.webkit.org/show_bug.cgi?id=179800
        https://trac.webkit.org/changeset/224952

2017-11-16  Antoine Quint  <graouts@apple.com>

        [Web Animations] Force a stacking context during animations that animate properties that will force a stacking context
        https://bugs.webkit.org/show_bug.cgi?id=179811

        Reviewed by Dean Jackson.

        The Web Animations specification mandates in section 4.7 (w3c.github.io/web-animations/#side-effects-section) that
        "for every property targeted by at least one animation effect that is current or in effect, the user agent must act
        as if the will-change property ([css-will-change-1]) on the target element includes the property."

        After parsing new keyframes, we check if any of the CSS properties that get animated would end up forcing a stacking
        context, and if so, enforce a stacking context during the entire active lifetime of the animation.

        Test: webanimations/animation-opacity-animation-crash.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::processKeyframes):
        (WebCore::KeyframeEffect::computeStackingContextImpact):
        (WebCore::KeyframeEffect::applyAtLocalTime):
        * animation/KeyframeEffect.h:

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

        Update feature status for Visual Viewport API to "In Development"
        https://bugs.webkit.org/show_bug.cgi?id=179818

        Reviewed by Frédéric Wang.

        Work on this feature has started, tracked by bug 170982.

        No new tests since there's no change in behavior.

        * features.json:

2017-11-16  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [WinCairo] Add network (curl) files for wincairo webkit
        https://bugs.webkit.org/show_bug.cgi?id=179474

        Reviewed by Alex Christensen.

        No new behvaior, no new tests.

        * PlatformWinCairo.cmake:
        * platform/Curl.cmake:
        * platform/network/curl/CookieStorageCurl.cpp: Added.
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):
        * platform/network/curl/NetworkStorageSessionCurl.cpp: Added.
        (WebCore::NetworkStorageSession::~NetworkStorageSession):
        (WebCore::NetworkStorageSession::context const):
        (WebCore::defaultSession):
        (WebCore::NetworkStorageSession::ensureSession):
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::setCookies):
        (WebCore::NetworkStorageSession::setCookie):
        (WebCore::NetworkStorageSession::deleteCookie):
        (WebCore::NetworkStorageSession::getAllCookies):
        (WebCore::NetworkStorageSession::getCookies):
        (WebCore::NetworkStorageSession::flushCookieStore):

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

        Fix occasional crash when adding and removing videos
        https://bugs.webkit.org/show_bug.cgi?id=179792

        Reviewed by Geoffrey Garen.

        In taskCompleted we null out session, and in resume we call _restart on the main thread.
        If _restart is called after taskCompleted, we want to do nothing.
        Right now we are calling a method on self.session.loader which is a PlatformMediaResourceLoader&
        but in ObjC if session is null it will call PlatformMediaResourceLoader::requestResource with a
        null this pointer, which crashes.  Let's not crash.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask _restart]):
        Early return if we don't have a session.

2017-11-16  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Update WinCairoRequirements
        https://bugs.webkit.org/show_bug.cgi?id=179790

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * PlatformWin.cmake:

2017-11-16  Antoine Quint  <graouts@apple.com>

        [Web Animations] Allow KeyframeEffect to support CSS property animation blending
        https://bugs.webkit.org/show_bug.cgi?id=179810

        Reviewed by Tim Horton.

        We used to pass nullptr instead of a valid AnimationBase when calling CSSPropertyAnimation::blendProperties()
        in KeyframeEffect::applyAtLocalTime() when blending CSS styles during a keyframe animation. Without this
        AnimationBase, some blending functions would crash as certain supporting calls couldn't be made.

        We now add a new CSSPropertyBlendingClient virtual interface that both KeyframeEffect and AnimationBase
        implement and that CSSPropertyAnimation::blendProperties() take as a parameter in order to support
        blending code.

        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSPropertyBlendingClient.h: Added.
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::applyAtLocalTime):
        (WebCore::KeyframeEffect::renderer const):
        (WebCore::KeyframeEffect::currentStyle const):
        * animation/KeyframeEffect.h:
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::isAccelerated const):
        (WebCore::AnimationBase::transformFunctionListsMatch const):
        (WebCore::AnimationBase::filterFunctionListsMatch const):
        (WebCore::AnimationBase::backdropFilterFunctionListsMatch const):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::blendFilterOperations):
        (WebCore::blendFilter):
        (WebCore::crossfadeBlend):
        (WebCore::PropertyWrapperAcceleratedBackdropFilter::blend const):
        (WebCore::PropertyWrapperShadow::blendSimpleOrMatchedShadowLists const):
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists const):
        (WebCore::CSSPropertyAnimation::blendProperties):
        * page/animation/CSSPropertyAnimation.h:

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

        Service Worker should get the body of intercepted requests
        https://bugs.webkit.org/show_bug.cgi?id=179776

        Reviewed by Alex Christensen.

        Test: http/tests/workers/service/service-worker-request-with-body.https.html

        Make use of FetchBodyConsumer to store raw data for FetchRequest.
        This is used when setting FetchRequest body from a FormData.
        If FormData is only bytes (no blob, no file), FetchBodyConsumer will store that data.
        This allows Service Worker to get access to simple request bodies.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::fromFormData):
        (WebCore::FetchBody::consume):
        (WebCore::FetchBody::bodyAsFormData const): Making sure body is set appropriately when used to make fetch load.
        * Modules/fetch/FetchBody.h: Making some methods private.
        * Modules/fetch/FetchBodyConsumer.h: Adding accessors.
        (WebCore::FetchBodyConsumer::hasData const):
        (WebCore::FetchBodyConsumer::data const):
        * Modules/fetch/FetchRequest.h:
        (WebCore::FetchRequest::FetchRequest):
        * platform/network/FormData.cpp:
        (WebCore::FormData::asSharedBuffer const):
        * platform/network/FormData.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent): Setting FetchRequest body based on given FormData.

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

        Make sure service workers get terminated between tests
        https://bugs.webkit.org/show_bug.cgi?id=179774

        Reviewed by Alex Christensen.

        Make sure service workers get terminated between tests. Previously, we
        would merely clear all registrations and job queues but it would not
        cause the registrations' service workers to get terminated.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::updateExtendedEventsSet):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::clearAll):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::didFinishInstall):
        (WebCore::SWServerJobQueue::tryClearRegistration):
        (WebCore::SWServerJobQueue::clearRegistration):
        * workers/service/server/SWServerJobQueue.h:

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

        FetchLoader should unregister its blob URL
        https://bugs.webkit.org/show_bug.cgi?id=179768

        Reviewed by Alex Christensen.

        No observable change.

        Keep the blob URL used for reading and unregister it in destructor.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::~FetchLoader):
        (WebCore::FetchLoader::start):
        * Modules/fetch/FetchLoader.h:

2017-11-16  Nan Wang  <n_wang@apple.com>

        AX: AOM: Implement string type properties
        https://bugs.webkit.org/show_bug.cgi?id=179495

        Reviewed by Chris Fleizach.

        Implemented the rest of the string type properties for Accessibility
        Object Model.

        Test: accessibility/mac/AOM-string-properties.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleLiveRegionCreated):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::childrenChanged):
        (WebCore::AccessibilityNodeObject::isPressed const):
        (WebCore::AccessibilityNodeObject::isChecked const):
        (WebCore::AccessibilityNodeObject::valueDescription const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        (WebCore::AccessibilityObject::supportsAutoComplete const):
        (WebCore::AccessibilityObject::autoCompleteValue const):
        (WebCore::AccessibilityObject::invalidStatus const):
        (WebCore::AccessibilityObject::supportsCurrent const):
        (WebCore::AccessibilityObject::currentState const):
        (WebCore::AccessibilityObject::currentValue const):
        (WebCore::AccessibilityObject::roleDescription const):
        (WebCore::AccessibilityObject::keyShortcutsValue const):
        (WebCore::AccessibilityObject::placeholderValue const):
        (WebCore::AccessibilityObject::isInsideLiveRegion const):
        (WebCore::AccessibilityObject::liveRegionAncestor const):
        (WebCore::AccessibilityObject::supportsARIAAttributes const):
        (WebCore::AccessibilityObject::supportsLiveRegion const):
        (WebCore::AccessibilityObject::sortDirection const):
        (WebCore::AccessibilityObject::supportsHasPopup const):
        (WebCore::AccessibilityObject::hasPopupValue const):
        (WebCore::AccessibilityObject::supportsPressed const):
        (WebCore::AccessibilityObject::checkboxOrRadioValue const):
        (WebCore::AccessibilityObject::pressedIsPresent const):
        (WebCore::AccessibilityObject::buttonRoleType const):
        (WebCore::AccessibilityObject::supportsARIAAutoComplete const): Deleted.
        (WebCore::AccessibilityObject::ariaAutoCompleteValue const): Deleted.
        (WebCore::AccessibilityObject::supportsARIACurrent const): Deleted.
        (WebCore::AccessibilityObject::ariaCurrentState const): Deleted.
        (WebCore::AccessibilityObject::ariaCurrentValue const): Deleted.
        (WebCore::AccessibilityObject::ariaKeyShortcutsValue const): Deleted.
        (WebCore::AccessibilityObject::isInsideARIALiveRegion const): Deleted.
        (WebCore::AccessibilityObject::ariaLiveRegionAncestor const): Deleted.
        (WebCore::AccessibilityObject::supportsARIALiveRegion const): Deleted.
        (WebCore::AccessibilityObject::supportsARIAHasPopup const): Deleted.
        (WebCore::AccessibilityObject::ariaPopupValue const): Deleted.
        (WebCore::AccessibilityObject::supportsARIAPressed const): Deleted.
        (WebCore::AccessibilityObject::ariaPressedIsPresent const): Deleted.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::hasPopup const):
        (WebCore::AccessibilityObject::liveRegionStatus const):
        (WebCore::AccessibilityObject::liveRegionRelevant const):
        (WebCore::AccessibilityObject::liveRegionAtomic const):
        (WebCore::AccessibilityObject::ariaHasPopup const): Deleted.
        (WebCore::AccessibilityObject::ariaLiveRegionStatus const): Deleted.
        (WebCore::AccessibilityObject::ariaLiveRegionRelevant const): Deleted.
        (WebCore::AccessibilityObject::ariaLiveRegionAtomic const): Deleted.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasPopup const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::orientation const):
        (WebCore::AccessibilityRenderObject::textChanged):
        (WebCore::AccessibilityRenderObject::liveRegionStatus const):
        (WebCore::AccessibilityRenderObject::liveRegionRelevant const):
        (WebCore::AccessibilityRenderObject::liveRegionAtomic const):
        (WebCore::AccessibilityRenderObject::ariaHasPopup const): Deleted.
        (WebCore::AccessibilityRenderObject::ariaLiveRegionStatus const): Deleted.
        (WebCore::AccessibilityRenderObject::ariaLiveRegionRelevant const): Deleted.
        (WebCore::AccessibilityRenderObject::ariaLiveRegionAtomic const): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibleNode.cpp:
        (WebCore::ariaAttributeMap):
        (WebCore::isPropertyValueString):
        (WebCore::AccessibleNode::notifyAttributeChanged):
        (WebCore::AccessibleNode::autocomplete const):
        (WebCore::AccessibleNode::setAutocomplete):
        (WebCore::AccessibleNode::checked const):
        (WebCore::AccessibleNode::setChecked):
        (WebCore::AccessibleNode::current const):
        (WebCore::AccessibleNode::setCurrent):
        (WebCore::AccessibleNode::hasPopUp const):
        (WebCore::AccessibleNode::setHasPopUp):
        (WebCore::AccessibleNode::invalid const):
        (WebCore::AccessibleNode::setInvalid):
        (WebCore::AccessibleNode::keyShortcuts const):
        (WebCore::AccessibleNode::setKeyShortcuts):
        (WebCore::AccessibleNode::live const):
        (WebCore::AccessibleNode::setLive):
        (WebCore::AccessibleNode::setLabel):
        (WebCore::AccessibleNode::orientation const):
        (WebCore::AccessibleNode::setOrientation):
        (WebCore::AccessibleNode::placeholder const):
        (WebCore::AccessibleNode::setPlaceholder):
        (WebCore::AccessibleNode::pressed const):
        (WebCore::AccessibleNode::setPressed):
        (WebCore::AccessibleNode::relevant const):
        (WebCore::AccessibleNode::setRelevant):
        (WebCore::AccessibleNode::role const):
        (WebCore::AccessibleNode::setRole):
        (WebCore::AccessibleNode::roleDescription const):
        (WebCore::AccessibleNode::setRoleDescription):
        (WebCore::AccessibleNode::sort const):
        (WebCore::AccessibleNode::setSort):
        (WebCore::AccessibleNode::valueText const):
        (WebCore::AccessibleNode::setValueText):
        * accessibility/AccessibleNode.h:
        (WebCore::AXPropertyHashTraits::constructDeletedValue):
        (WebCore::AXPropertyHashTraits::isDeletedValue):
        * accessibility/AccessibleNode.idl:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (atkRole):
        (setAtkStateSetFromCoreObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHasPopup]):
        (-[WebAccessibilityObjectWrapper accessibilityARIALiveRegionStatus]):
        (-[WebAccessibilityObjectWrapper accessibilityARIARelevantStatus]):
        (-[WebAccessibilityObjectWrapper accessibilityARIALiveRegionIsAtomic]):
        (-[WebAccessibilityObjectWrapper accessibilitySupportsARIAPressed]):
        (-[WebAccessibilityObjectWrapper accessibilityARIACurrentStatus]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

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

        Use RunLoop and Mode from NetworkingContext if they are given
        https://bugs.webkit.org/show_bug.cgi?id=179800
        <rdar://problem/35519421>

        Reviewed by Brady Eidson.

        We used to call [NSURLConnection scheduleInRunLoop:forMode:] before r224267.
        That change broke WebKitLegacy clients using custom run loop modes, which I partially fixed in r224687 and r224896,
        but that hangs if there are any non-scheduled calls to callOnMainThread and it ignores the CFRunLoop part of the SchedulePair.
        This is a more elegant solution that fixes all known bugs with custom run loop modes and makes the
        behavior as close to the pre-r224267 behavior as possible by using all parameters in a good way.

        I verified the bug in the radar is fixed, the API test WebKitLegacy.ScheduleInRunLoop still passes,
        and UIWebView still works on iOS.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (callOnMainThreadOrSchedule):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

2017-11-16  Daniel Bates  <dabates@apple.com>

        Add feature define for alternative presentation button element
        https://bugs.webkit.org/show_bug.cgi?id=179692
        Part of <rdar://problem/34917108>

        Reviewed by Andy Estes.

        Only enabled on Cocoa platforms by default.

        * Configurations/FeatureDefines.xcconfig:

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

        [Service Worker] Implement "Try Clear Registration" algorithm
        https://bugs.webkit.org/show_bug.cgi?id=179791

        Reviewed by Youenn Fablet.

        Implement "Try Clear Registration" algorithm:
        - https://w3c.github.io/ServiceWorker/#try-clear-registration-algorithm

        In particular, a SWServerRegistration now knows if it is "in use" by a given
        service worker client (i.e. The registration's active service worker is
        controlling the service worker client). See:
        - https://w3c.github.io/ServiceWorker/#selection (last paragraph)

        No new tests, rebaselined existing tests.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::setActiveServiceWorker):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::serviceWorkerStartedControllingClient):
        (WebCore::SWServer::Connection::serviceWorkerStoppedControllingClient):
        (WebCore::SWServer::serviceWorkerStartedControllingClient):
        (WebCore::SWServer::serviceWorkerStoppedControllingClient):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::tryClearRegistration):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::hasClientsUsingRegistration const):
        (WebCore::SWServerRegistration::addClientUsingRegistration):
        (WebCore::SWServerRegistration::removeClientUsingRegistration):

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

        REGRESSION(r224179): layer flush now requires sync IPC to compute undo/redo availability in EditorState
        https://bugs.webkit.org/show_bug.cgi?id=179797

        Reviewed by Simon Fraser.

        Editor::canUndo and Editor::CanRedo no longer need to be exported.

        * editing/Editor.h:

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

        Dispatching an event on a ServiceWorkerRegistration may fail or crash due to GC
        https://bugs.webkit.org/show_bug.cgi?id=179751

        Reviewed by Geoffrey Garen.

        Dispatching an event on a ServiceWorkerRegistration may fail or crash due to GC. We
        need to make sure that a ServiceWorkerRegistration's wrapper stays alive as long as
        we may dispatch events on it.

        Keep the wrapper alive by making ServiceWorker an ActiveDOMObject and making sure the
        implementation object keeps a PendingActivity alive while it may dispatch JS events.
        The only event dispatched on ServiceWorkerRegistration objects is the "updatefound"
        one. We may dispatch updatefound events on a ServiceWorkerRegistration until the
        registration gets cleared on server side, in which case the ServiceWorkerRegistration
        object ends up with no service worker. We therefore take a PendingActivity when the
        ServiceWorkerRegistration is constructed and we release it once the registration has
        no more associated ServiceWorker or the ActiveDOMObject is stopped (to avoid leaks on
        navigation).

        Test: http/tests/workers/service/service-worker-registration-gc-event.html

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireUpdateFoundEvent):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::getOrCreate):
        (WebCore::ServiceWorkerRegistration::updateStateFromServer):
        (WebCore::ServiceWorkerRegistration::scheduleTaskToFireUpdateFoundEvent):
        (WebCore::ServiceWorkerRegistration::stop):
        (WebCore::ServiceWorkerRegistration::updatePendingActivityForEventDispatch):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistration.idl:

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

        Crash in WebCore::SWServerJobQueue::scriptFetchFinished(WebCore::SWServer::Connection&, WebCore::ServiceWorkerFetchResult const&) + 77
        https://bugs.webkit.org/show_bug.cgi?id=179394
        <rdar://problem/35478190>

        Reviewed by Youenn Fablet.

        In SWServerJobQueue::scriptFetchFinished(), make sure the job queue is still processing the
        job that triggered the fetch. If it is not, ignore the callback.

        This could happen when calling SWServer::clear() while a script fetch was pending.

        No new tests, already covered by existing tests that sometimes crash on the bots.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::isCurrentlyProcessingJob const):
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        * workers/service/server/SWServerJobQueue.h:

2017-11-16  Brady Eidson  <beidson@apple.com>

        Crash in worker tests handling the m_stoppedCallback.
        <rdar://problem/35590875> and https://bugs.webkit.org/show_bug.cgi?id=179798

        Reviewed by Chris Dumez.

        No new tests (Covered by existing tests).

        Protect manipulation of m_stoppedCallback with m_threadCreationAndWorkerGlobalScopeMutex.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):

2017-11-16  Antoine Quint  <graouts@apple.com>

        [Web Animations] Express time in milliseconds through the API
        https://bugs.webkit.org/show_bug.cgi?id=179799

        Reviewed by Simon Fraser.

        While internally we use seconds to specify times and durations, the Web Animations API
        uses milliseconds, so we have to convert times and durations from and to milliseconds.

        * animation/AnimationEffectTiming.h:
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::bindingsCurrentTime):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::bindingsStartTime const):
        (WebCore::WebAnimation::setBindingsStartTime):
        (WebCore::WebAnimation::bindingsCurrentTime const):
        (WebCore::WebAnimation::setBindingsCurrentTime):
        * testing/Internals.cpp:
        (WebCore::Internals::setTimelineCurrentTime):

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

        REGRESSION(r224887): GCC 5 build broken
        https://bugs.webkit.org/show_bug.cgi?id=179750

        Reviewed by Jer Noble.

        Add a legacy FourCC constructor that will be used only when building with GCC 5. This is
        bad, but it seems acceptable for use with a fallback codepath.

        Unfortunately, this requires adjusting some initializations to avoid ambiguity with the
        uint32_t constructor.

        * platform/graphics/FourCC.h:
        (WebCore::FourCC::FourCC):
        * platform/graphics/iso/ISOBox.cpp:
        (WebCore::ISOBox::peekBox):
        * platform/graphics/iso/ISOBox.h:
        * platform/graphics/iso/ISOOriginalFormatBox.h:
        * platform/graphics/iso/ISOSchemeTypeBox.h:

2017-11-16  Andy Estes  <aestes@apple.com>

        [Payment Request] Update feature status to "Supported In Preview"
        https://bugs.webkit.org/show_bug.cgi?id=179793

        Reviewed by Tim Horton.

        * features.json:

2017-11-16  Antoine Quint  <graouts@apple.com>

        Clean up KeyframeEffect
        https://bugs.webkit.org/show_bug.cgi?id=179777

        Reviewed by Daniel Bates.

        A few review comments came in after https://bugs.webkit.org/show_bug.cgi?id=179707 landed,
        addressing them with this follow-up patch.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create): Use "keyframeEffect" instead of "result" for clarity.
        (WebCore::KeyframeEffect::processKeyframes): Use consistent index and length types while iterating
        over properties in PropertyNameArray and explicitly size the properties array since we already
        know its final size.
        * dom/Element.cpp:
        (WebCore::Element::getAnimations):

2017-11-16  Zalan Bujtas  <zalan@apple.com>

        Always invoke RenderObject::insertedIntoTree/willBeRemovedFromTree
        https://bugs.webkit.org/show_bug.cgi?id=178007

        Reviewed by Antti Koivisto.

        Based on Antti Koivisto's patch:
        These call are currently skipped in some cases making them bug prone and difficult to reason about.
        This is done as an optimization that doesn't appear to be valuable anymore.

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::dropAnonymousBoxChild):
        (WebCore::RenderBlock::takeChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveAllChildrenIncludingFloatsTo):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::moveAllChildrenIncludingFloatsTo):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::splitAnonymousBoxesAroundChild):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::moveChildTo):
        (WebCore::RenderBoxModelObject::moveAllChildrenTo):
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        (WebCore::RenderElement::takeChild):
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::takeChildInternal):
        (WebCore::RenderElement::handleDynamicFloatPositionChange):
        * rendering/RenderElement.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):
        (WebCore::RenderRubyBase::moveBlockChildren):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::collapseAndDestroyAnonymousSiblingRows):
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeUpdater::MultiColumn::destroyFragmentedFlow):

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

        Add a base class for HTMLCanvasElement and OffscreenCanvas
        https://bugs.webkit.org/show_bug.cgi?id=179701
        <rdar://problem/35545195>

        Reviewed by Sam Weinig.

        In order for OffscreenCanvas to be able to create a WebGLRenderingContext,
        there needs to be a shared base class with HTMLCanvasElement. Add such a
        class called CanvasBase.

        There is a lot of potential for functionality to move into the base class, but
        unfortunately HTMLCanvasElement is a bit messy. It implements a lot of the 2d
        rendering context functionality, and also many const functions that actually
        cause changes. Thus, things like the canvas size have to remain in the subclasses
        for now.

        The existence of the new base class meant the canvas() accessor in CanvasRenderingContext
        had to move out into the subclasses, and do the correct casting. Eventually, at least
        for WebGLRenderingContext, this will have a change in behaviour, but for now we only
        ever use HTMLCanvasElements, so most of these changes are just for the sake of
        compilation.

        No behaviour change - covered by existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CanvasBase.cpp: Copied from Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.h.
        (WebCore::CanvasBase::CanvasBase): New base class.
        (WebCore::CanvasBase::asHTMLCanvasElement): Casts to an HTMLCanvasElement*, which many of the
        rendering context code uses.
        * html/CanvasBase.h: Copied from Source/WebCore/html/canvas/GPUBasedCanvasRenderingContext.h.
        (WebCore::CanvasBase::isHTMLCanvasElement const):
        (WebCore::CanvasBase::isOffscreenCanvas const):
        (WebCore::CanvasBase::setOriginClean):
        (WebCore::CanvasBase::setOriginTainted):
        (WebCore::CanvasBase::originClean const):
        (WebCore::CanvasBase::securityOrigin const):
        (WebCore::CanvasBase::scriptExecutionContext const):

        * html/HTMLCanvasElement.cpp: Use the base class methods where possible.
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::toBlob):
        (WebCore::HTMLCanvasElement::createImageBuffer const): Be explict as to
        which of the derived classes scriptExecutionContext() method we are calling.

        * html/HTMLCanvasElement.h: Use the base class, mark a few things as virtual,
        and remove the parts that are now in CanvasBase.

        * html/OffscreenCanvas.cpp: Use the base class.
        (WebCore::OffscreenCanvas::OffscreenCanvas):
        (WebCore::OffscreenCanvas::size const):
        (WebCore::OffscreenCanvas::setSize):
        * html/OffscreenCanvas.h:

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::CanvasRenderingContext):
        (WebCore::CanvasRenderingContext::ref): Call the correct ref/deref functions, depending
        on the base class type.
        (WebCore::CanvasRenderingContext::deref):
        (WebCore::CanvasRenderingContext::wouldTaintOrigin): We no longer have a canvas() method.
        (WebCore::CanvasRenderingContext::checkOrigin):

        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::canvasBase const): Add this accessor to the base canvas object
        to replace the canvas() call.
        (WebCore::CanvasRenderingContext::checkOrigin):
        (WebCore::CanvasRenderingContext::ref): Deleted.
        (WebCore::CanvasRenderingContext::deref): Deleted.
        (WebCore::CanvasRenderingContext::canvas const): Deleted.

        * html/canvas/CanvasRenderingContext2D.cpp: Use the base class.
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/GPUBasedCanvasRenderingContext.h:
        (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext):
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::ImageBitmapRenderingContext):
        (WebCore::ImageBitmapRenderingContext::canvas const):
        (WebCore::ImageBitmapRenderingContext::setOutputBitmap):
        * html/canvas/ImageBitmapRenderingContext.h:
        * html/canvas/PlaceholderRenderingContext.cpp:
        (WebCore::PlaceholderRenderingContext::PlaceholderRenderingContext):
        * html/canvas/PlaceholderRenderingContext.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::WebGL2RenderingContext):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):

        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create): Assume that we're still getting an HTMLCanvasElement,
        but protect some of the logic just in case we don't.
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::canvas):
        (WebCore::WebGLRenderingContextBase::checkForContextLossHandling):
        (WebCore::WebGLRenderingContextBase::registerWithWebGLStateTracker):
        (WebCore::WebGLRenderingContextBase::setupFlags):
        (WebCore::WebGLRenderingContextBase::addActivityStateChangeObserverIfNecessary):
        (WebCore::WebGLRenderingContextBase::removeActivityStateChangeObserver):
        (WebCore::WebGLRenderingContextBase::markContextChanged):
        (WebCore::WebGLRenderingContextBase::markContextChangedAndNotifyCanvasObserver):
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContextBase::reshape):
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::isContextLostOrPending):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::loseContextImpl):
        (WebCore::WebGLRenderingContextBase::printToConsole):
        (WebCore::WebGLRenderingContextBase::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedEvent):
        (WebCore::WebGLRenderingContextBase::clampedCanvasSize):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::create):
        (WebCore::WebGPURenderingContext::WebGPURenderingContext):
        (WebCore::WebGPURenderingContext::canvas const):
        (WebCore::WebGPURenderingContext::clampedCanvasSize const):
        * html/canvas/WebGPURenderingContext.h:
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        (WebCore::InspectorInstrumentation::didEnableExtension):
        (WebCore::InspectorInstrumentation::didCreateProgram):
        (WebCore::InspectorInstrumentation::willDeleteProgram):
        (WebCore::InspectorInstrumentation::isShaderProgramDisabled):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::didEnableExtension):
        (WebCore::InspectorCanvasAgent::didCreateProgram):

2017-11-16  Colin Bendell  <colin@bendell.ca>

        Added mime type check to the picture source preloader to avoid downloading incompatible resources.
        https://bugs.webkit.org/show_bug.cgi?id=179231

        Reviewed by Alex Christensen.

        Test: http/tests/loading/preload-picture-type.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes): include type match state when selecting candidate imgs
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): added type attribute evaluation and matching

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

        Dispatching an event on a ServiceWorker may fail or crash due to GC
        https://bugs.webkit.org/show_bug.cgi?id=179745

        Reviewed by Geoffrey Garen.

        Dispatching an event on a ServiceWorker may fail or crash due to GC. We need to make sure
        that a ServiceWorker's wrapper stays alive as long as we may dispatch events on it.

        Keep the wrapper alive by making ServiceWorker an ActiveDOMObject and making sure the
        implementation object keeps a PendingActivity alive while it may dispatch JS events.
        The only event dispatched on ServiceWorker objects is the "statechange" one. We may
        dispatch statechange events on a ServiceWorker until its state becomes "redundant".
        We therefore take a PendingActivity when the ServiceWorker's state is or becomes
        non-redundant (becoming non redundant can only happen when switching initially from
        redundant to installing, at which point the ServiceWorker object is not exposed to
        the JS yet). We release the PendingActivity when the ServiceWorker's state becomes
        redundant or the ActiveDOMObject is stopped (to avoid leaks on navigation).

        Test: http/tests/workers/service/service-worker-gc-event.html

        * workers/service/ServiceWorker.cpp:
        (WebCore::mutableAllWorkers):
        (WebCore::ServiceWorker::removeFromAllWorkers):
        (WebCore::ServiceWorker::getOrCreate):
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::~ServiceWorker):
        (WebCore::ServiceWorker::scheduleTaskToUpdateState):
        (WebCore::ServiceWorker::activeDOMObjectName const):
        (WebCore::ServiceWorker::canSuspendForDocumentSuspension const):
        (WebCore::ServiceWorker::stop):
        (WebCore::ServiceWorker::updatePendingActivityForEventDispatch):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorker.idl:

2017-11-16  Frederic Wang  <fwang@igalia.com>

        Consider non-main frames for frameViewRootLayerDidChange
        https://bugs.webkit.org/show_bug.cgi?id=178508

        Reviewed by Antonio Gomes.

        No new tests, behavior unchanged.

        AsyncScrollingCoordinator::frameViewRootLayerDidChange assumes that frameView is always a
        main-frame. It calls ensureRootStateNodeForFrameView, which always attaches a frame node with
        null parent ID. It also has an ASSERT to check m_scrollingStateTree->rootStateNode(), instead
        of m_scrollingStateTree->stateNodeForID(frameView.scrollLayerID()). This patch makes the
        ASSERT more generic. It also adds an early return into ensureRootStateNodeForFrameView when the
        node already exists so that the call to attachToStateTree can be skipped. It turns out that that
        call is actually only necessary for main frame, so another ASSERT is added to verify it.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange): Modify the ASSERT to
        verify the availability of a scrolling node for the frame, not just the root node.
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView): Add an early return to
        skip the call to attachToStateTree when the node is actually already available. Add an ASSERT to
        ensure that attaching a new node is only necessary for main frames.

2017-11-16  Miguel Gomez  <magomez@igalia.com>

        [TexMap] Remove use of GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=174860

        Reviewed by Žan Doberšek.

        Remove remaining uses of GC3D that are not WebGL related:
        - Remove the option to create a GC3D to render to the curren OpenGL context.
        - Remove the remaining usage of GC3D inside MediaPlayerPrivateGStreamerBase.
        - Replace the usage inside TextureMapper with direct OpenGL calls, and use a
        VAO when the OpenGL version is higher than 3.2.

        This also modifies TextureMapperContextAttributes so all the tested features are
        supported when using OpenGL, and we only check for the extensions when using GLES2.

        No new tests as there's no behavior change.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperContextAttributes.cpp:
        (WebCore::TextureMapperContextAttributes::initialize):
        * platform/graphics/texmap/TextureMapperContextAttributes.h:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        (WebCore::TextureMapperGC3DPlatformLayer::TextureMapperGC3DPlatformLayer):
        (WebCore::TextureMapperGC3DPlatformLayer::makeContextCurrent):
        (WebCore::TextureMapperGC3DPlatformLayer::platformContext):
        (WebCore::TextureMapperGC3DPlatformLayer::swapBuffersIfNeeded):
        (WebCore::TextureMapperGC3DPlatformLayer::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::currentSharedGLData):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (WebCore::TextureMapperGLData::~TextureMapperGLData):
        (WebCore::TextureMapperGLData::initializeStencil):
        (WebCore::TextureMapperGLData::getStaticVBO):
        (WebCore::TextureMapperGLData::getVAO):
        (WebCore::TextureMapperGLData::getShaderProgram):
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::endPainting):
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::clearColor):
        (WebCore::TextureMapperGL::drawEdgeTriangles):
        (WebCore::TextureMapperGL::drawUnitRect):
        (WebCore::TextureMapperGL::draw):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::TextureMapperGL::bindDefaultSurface):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::createTexture):
        * platform/graphics/texmap/TextureMapperGL.h:

2017-11-16  Frederic Wang  <fwang@igalia.com>

        ASSERTION FAILED: !isAnonymous() in WebCore::RenderMathMLOperator::updateTokenContent
        https://bugs.webkit.org/show_bug.cgi?id=166011

        Reviewed by Alejandro G. Castro.

        RenderMathMLFencedOperator does not support mathvariant or displaystyle transforms. This is
        one of several issues of the mfenced element (see bug 160509). However,
        MathMLStyle::updateStyleIfNeeded() still tries to use the implementation of the parent
        RenderMathMLOperator class, which only works for non-anonymous operators. This patch skips
        the updateTokenContent() calls for anonymous mfenced operators in order to avoid ASSERTION
        failures.

        Test: mathml/mfenced-displaystyle-and-mathvariant-crash.html

        * rendering/mathml/MathMLStyle.cpp:
        (WebCore::MathMLStyle::updateStyleIfNeeded): Skip anonymous token elements.

2017-11-15  Brady Eidson  <beidson@apple.com>

        Implement basics of "Terminate Service Worker" algorithm.
        https://bugs.webkit.org/show_bug.cgi?id=179551

        Reviewed by Chris Dumez.

        No new tests (No observable behavior change yet).

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::stopIndexedDatabase):

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        (WebCore::WorkerMessagingProxy::terminateWorkerGlobalScope):

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        * workers/WorkerThread.h:

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::terminateWorker):
        * workers/service/context/SWContextManager.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::workerContextTerminated):
        (WebCore::SWServer::terminateWorker):
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::workerTerminated):
        * workers/service/server/SWServerToContextConnection.h:

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::terminate):
        (WebCore::SWServerWorker::contextTerminated):
        * workers/service/server/SWServerWorker.h:

2017-11-15  Eric Carlson  <eric.carlson@apple.com>

        Log media readyState and networkState as strings
        https://bugs.webkit.org/show_bug.cgi?id=179732

        Reviewed by Youenn Fablet.

        * html/HTMLMediaElement.cpp:
        (WebCore::convertEnumerationToString):
        (WebCore::HTMLMediaElement::scheduleDelayedAction): Fix logic error.
        (WebCore::HTMLMediaElement::pendingActionTimerFired): Fix incorrect log string.
        (WebCore::HTMLMediaElement::setNetworkState): Don't cast to int for logging.
        (WebCore::HTMLMediaElement::setReadyState): Ditto. Log when autoplay is blocked.

        * html/HTMLMediaElementEnums.h:
        (PAL::LogArgument<WebCore::HTMLMediaElementEnums::ReadyState>::toString): New.
        (PAL::LogArgument<WebCore::HTMLMediaElementEnums::NetworkState>::toString): New.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::convertEnumerationToString):
        * platform/graphics/MediaPlayerEnums.h:
        (PAL::LogArgument<WebCore::MediaPlayerEnums::ReadyState>::toString):
        (PAL::LogArgument<WebCore::MediaPlayerEnums::NetworkState>::toString):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Log strings.

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

        Service Worker fetch should handle empty responses
        https://bugs.webkit.org/show_bug.cgi?id=179740

        Reviewed by Alex Christensen.

        Covered by updated test.

        * Modules/streams/ReadableStreamSink.cpp:
        (WebCore::ReadableStreamToSharedBufferSink::enqueue): Not create a buffer until actually needed.
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse): Check for null buffers.

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

        ReloadFromOrigin loads should not select any service worker
        https://bugs.webkit.org/show_bug.cgi?id=179736

        Reviewed by Brady Eidson.

        Test: http/tests/workers/service/shift-reload-navigation.html

        In case of ReloadFromOrigin (equivalent of shift reload), do not select any service worker.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::isReloadingFromOrigin const):

2017-11-15  Zalan Bujtas  <zalan@apple.com>

        AX triggers sync layout while building the render tree on www.macrumors.com.
        https://bugs.webkit.org/show_bug.cgi?id=179741
        rdar://problem/35462531

        Reviewed by Antti Koivisto.

        It's unsafe to issue layout while mutating the render tree. If a mutation
        requires AX to issue a layout, it needs to be issued in a delayed manner (which the render
        tree mutation will trigger anyway). 

        Unable to reproduce.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):

2017-11-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement basic to-from animations
        https://bugs.webkit.org/show_bug.cgi?id=179707
        <rdar://problem/34932456>

        We can now actually perform an animation, in software only, when provided two keyframes on an AnimationEffect.
        To parse a keyframes object from JS, we use the StyleResolver to create RenderStyle objects based on the strings
        provided for the property names and values. Then, when the DocumentTimeline indicates that animations are ready
        to be updated, we invalidate the style of elements with animations, so that during style resolution we can perform
        blending between the RenderStyles for each keyframe.

        Reviewed by Dean Jackson.

        * animation/AnimationEffect.h:
        (WebCore::AnimationEffect::~AnimationEffect): Deleted.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::elementToAnimationsMap const):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animationResolutionTimerFired):
        (WebCore::DocumentTimeline::updateAnimations): Renamed from resolveAnimations() since we're not
        actually resolving animations, merely invalidating styles in preparation for resolution.
        (WebCore::DocumentTimeline::resolveAnimations): Deleted.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create): Pass the keyframes argument to setKeyframes() and forward the
        exception in case one was raised in the setter.
        (WebCore::KeyframeEffect::setKeyframes): Pass the keyframes argument to processKeyframes() and
        forward the exception in case one was raised during processing.
        (WebCore::KeyframeEffect::processKeyframes): Deal with exactly two keyframes, set at 0 and 1 offsets,
        specified in array forms for the keyframes object. As we parse the content of the provided JS object,
        we create RenderStyle objects using the element's StyleResolver from a CSS text string we create
        based on the property and values as strings.
        (WebCore::KeyframeEffect::applyAtLocalTime): Compute the progress based on the local time and duration,
        using the existing CSSPropertyAnimation::blendProperties() mechanics to perform the blend between the
        from and to keyframes.
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::resolve):
        * animation/WebAnimation.h:
        * bindings/IDLTypes.h:
        (WebCore::IDLObject::nullValue): Make JSC::Strong an optional type.
        * dom/Document.h:
        (WebCore::Document::existingTimeline const): Provide an explicit method for call sites to check existence
        of a timeline before forcing one to be created if missing by calling timeline().
        * dom/Element.cpp:
        (WebCore::Element::getAnimations): Do not force the creation of a timeline if one isn't already created.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate): When applying styles, account for any Web
        Animation applied to the provided element.

2017-11-15  Frederic Wang  <fwang@igalia.com>

        ASSERTION FAILED: !renderer->needsLayout() in WebCore::RenderBlock::checkPositionedObjectsNeedLayout with MathML
        https://bugs.webkit.org/show_bug.cgi?id=178865

        Reviewed by Manuel Rego Casasnovas.

        MathML token elements can contain HTML elements and hence MathML elements can contain
        out-of-flow positioned descendants. Also all MathML elements can be containing block and hence
        should position their out-of-flow positioned descendants before calling clearNeedsLayout().
        This patch does that in all places in the MathML renderer classes, except a few of them:
        - RenderMathMLSpace, which can not have descendants.
        - RenderMathMLToken and RenderMathMLOperator, since they will use the layout implementation
          of RenderMathMLBlock when they contain non-text children.
        The patch also fixes an ASSERTION failure in WebCore::RenderBlock::checkPositionedObjectsNeedLayout
        due to some descendants that are not laid out.

        Test: mathml/out-of-flow-in-token-crash.html

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::layoutBlock): Call layoutPositionedObjects.
        (WebCore::RenderMathMLBlock::layoutInvalidMarkup): Ditto and pass the relayoutChildren boolean.
        * rendering/mathml/RenderMathMLBlock.h: Add a relayoutChildren boolean to layoutInvalidMarkup.
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::layoutBlock): Pass the relayoutChildren boolean to layoutInvalidMarkup
        and call layoutPositionedObjects.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layoutBlock): Ditto.
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::layoutBlock): Ditto.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layoutBlock): Ditto.
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::layoutBlock): Call layoutPositionedObjects.
        * rendering/mathml/RenderMathMLPadded.cpp:
        (WebCore::RenderMathMLPadded::layoutBlock): Ditto.
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layoutBlock): Ditto.

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

        Add ServiceWorker to WebProcess plumbery for FormData fetch responses
        https://bugs.webkit.org/show_bug.cgi?id=179694

        Reviewed by Alex Christensen.

        No observable changes since we are not actually loading FormData right now.

        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        * workers/service/context/ServiceWorkerFetch.h:

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

        Add a compile-time-checked string literal initializer for FourCC.
        https://bugs.webkit.org/show_bug.cgi?id=179706

        Reviewed by Alex Christensen.

        Add a contexpr constructor for FourCC that takes a string literal and static_asserts that it
        is exactly 4 chars long. Use this string literal constructor everywhere instead of multi-
        character literals.

        * platform/graphics/FourCC.h:
        (WebCore::FourCC::FourCC):
        * platform/graphics/iso/ISOBox.cpp:
        (WebCore::ISOBox::parse):
        * platform/graphics/iso/ISOOriginalFormatBox.h:
        (WebCore::ISOOriginalFormatBox::boxTypeName):
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.h:
        (WebCore::ISOProtectionSchemeInfoBox::boxTypeName):
        * platform/graphics/iso/ISOSchemeInformationBox.h:
        (WebCore::ISOSchemeInformationBox::boxTypeName):
        * platform/graphics/iso/ISOSchemeTypeBox.h:
        (WebCore::ISOSchemeTypeBox::boxTypeName):
        * platform/graphics/iso/ISOTrackEncryptionBox.h:
        (WebCore::ISOTrackEncryptionBox::boxTypeName):
        * platform/graphics/iso/ISOVTTCue.h:
        (WebCore::ISOWebVTTCue::boxTypeName):

2017-11-15  Adrian Perez de Castro  <aperez@igalia.com>

        [Cairo] Clang warns about mismatched declaration type tag for GraphicsContextState
        https://bugs.webkit.org/show_bug.cgi?id=179729

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * platform/graphics/cairo/CairoOperations.h: Make the forward declaration use "struct" 
        as the actual implementation of the type does.

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

        [Service Workers] Implement Client API
        https://bugs.webkit.org/show_bug.cgi?id=179709

        Reviewed by Alex Christensen.

        Implement Client API as per:
        - https://w3c.github.io/ServiceWorker/#client-interface

        Tests:
        http/tests/workers/service/Client-properties.html
        http/tests/workers/service/Client-properties-subframe.html
        http/tests/workers/service/Client-properties-auxiliary.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::ServiceWorkerClient):
        (WebCore::ServiceWorkerClient::url const):
        (WebCore::ServiceWorkerClient::type const):
        (WebCore::ServiceWorkerClient::frameType const):
        (WebCore::ServiceWorkerClient::id const):
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/ServiceWorkerClient.h:
        (WebCore::ServiceWorkerClient::create):
        * workers/service/ServiceWorkerClientData.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerWindowClient.cpp.
        (WebCore::toServiceWorkerClientFrameType):
        (WebCore::ServiceWorkerClientData::isolatedCopy const):
        (WebCore::ServiceWorkerClientData::from):
        * workers/service/ServiceWorkerClientData.h: Copied from Source/WebCore/workers/service/ServiceWorkerClient.h.
        (WebCore::ServiceWorkerClientData::encode const):
        (WebCore::ServiceWorkerClientData::decode):
        * workers/service/ServiceWorkerClientIdentifier.h:
        (WebCore::ServiceWorkerClientIdentifier::encode const):
        (WebCore::ServiceWorkerClientIdentifier::decode):
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/ServiceWorkerWindowClient.cpp:
        (WebCore::ServiceWorkerWindowClient::ServiceWorkerWindowClient):
        * workers/service/ServiceWorkerWindowClient.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWClientConnection.h:

2017-11-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224863.

        Introduced LayoutTest crashes on iOS Simulator.

        Reverted changeset:

        "Move JSONValues to WTF and convert uses of InspectorValues.h
        to JSONValues.h"
        https://bugs.webkit.org/show_bug.cgi?id=173793
        https://trac.webkit.org/changeset/224863

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

        Remove service worker selection based on registration
        https://bugs.webkit.org/show_bug.cgi?id=179705

        Reviewed by Alex Christensen.

        Covered by updated tests.

        Selection is now handled at navigation time.
        We can remove the selection/unselection of worker based on registration.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):

2017-11-15  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] GraphicsContext::setPlatformShadow() has to update state's shadow offset when ignoring transforms
        https://bugs.webkit.org/show_bug.cgi?id=179725

        Reviewed by Carlos Garcia Campos.

        In r224753, GraphicsContext::setPlatformShadow() stopped updating the
        shadow offset value that's kept in GraphicsContextState. This regressed
        a few tests, so the adjustment of the shadow offset value in the
        GraphicsContext state is brought back.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::State::setShadowValues):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2017-11-15  Gabriel Ivascu  <givascu@igalia.com>

        [GTK] Automatically adjust font size when gtk-xft-dpi changes
        https://bugs.webkit.org/show_bug.cgi?id=142673

        Some follow-up fixes for the previous patch.

        Reviewed by Carlos Garcia Campos.

        * platform/PlatformScreen.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDPIObserverHandlersMap):
        (WebCore::gtkXftDPIChangedCallback):
        (WebCore::setScreenDPIObserverHandler):
        * platform/wpe/PlatformScreenWPE.cpp:
        (WebCore::setScreenDPIObserverHandler):

2017-11-14  Nan Wang  <n_wang@apple.com>

        AX: AOM: Implement AccessibleNode class and support label and role attributes
        https://bugs.webkit.org/show_bug.cgi?id=179494

        Reviewed by Ryosuke Niwa.

        Accessibility Object Model
        Explainer: https://wicg.github.io/aom/explainer.html
        Spec: https://wicg.github.io/aom/spec/

        This change adds an accessibleNode getter on Element, and implements
        the role and label properties of AccessibleNode. 

        In existing accessibility code, places where we previously retrieve an 
        ARIA attribute are replaced with a new function that first checks the 
        AOM property and then checks the equivalent ARIA attribute.

        Test: accessibility/accessibility-object-model.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):
        (WebCore::AXObjectCache::handleLiveRegionCreated):
        * accessibility/AccessibilityAllInOne.cpp:
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::roleValue const):
        (WebCore::AccessibilityImageMapLink::accessibilityDescription const):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::stringValue const):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::ariaAccessibilityDescription const):
        (WebCore::siblingWithAriaRole):
        (WebCore::AccessibilityNodeObject::textForLabelElement const):
        (WebCore::AccessibilityNodeObject::alternativeText const):
        (WebCore::AccessibilityNodeObject::alternativeTextForWebArea const):
        (WebCore::AccessibilityNodeObject::stringValue const):
        (WebCore::accessibleNameForNode):
        (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasProperty const):
        (WebCore::AccessibilityObject::stringValueForProperty const):
        (WebCore::AccessibilityObject::supportsARIAAttributes const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue const):
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibleNode.cpp: Added.
        (WebCore::ariaAttributeMap):
        (WebCore::isPropertyValueString):
        (WebCore::AccessibleNode::hasProperty):
        (WebCore::AccessibleNode::valueForProperty):
        (WebCore::AccessibleNode::effectiveStringValueForElement):
        (WebCore::AccessibleNode::stringValueForProperty):
        (WebCore::AccessibleNode::setStringProperty):
        (WebCore::AccessibleNode::role const):
        (WebCore::AccessibleNode::setRole):
        (WebCore::AccessibleNode::label const):
        (WebCore::AccessibleNode::setLabel):
        * accessibility/AccessibleNode.h: Added.
        (WebCore::AXPropertyHashTraits::emptyValue):
        (WebCore::AXPropertyHashTraits::constructDeletedValue):
        (WebCore::AXPropertyHashTraits::isDeletedValue):
        (WebCore::AccessibleNode::AccessibleNode):
        (WebCore::AccessibleNode::ref):
        (WebCore::AccessibleNode::deref):
        * accessibility/AccessibleNode.idl: Added.
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Element.cpp:
        (WebCore::Element::canContainRangeEndPoint const):
        (WebCore::Element::accessibleNode):
        (WebCore::Element::existingAccessibleNode const):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::accessibleNode const):
        (WebCore::ElementRareData::setAccessibleNode):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setAccessibilityObjectModelEnabled):
        (WebCore::RuntimeEnabledFeatures::accessibilityObjectModelEnabled const):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::itemAccessibilityText const):

2017-11-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Add GraphicsContextImplCairo stub
        https://bugs.webkit.org/show_bug.cgi?id=179658

        Reviewed by Carlos Garcia Campos.

        Add the GraphicsContextImplCairo class, which at this point is still
        an empty implementation of the GraphicsContextImpl interface. Plan for
        the near future is to start mapping method invocations to CairoOperation
        functions, essentially mirroring what the Cairo-specific GraphicsContext
        methods do today.

        In the future this implementation would hopefully allow us to apply a
        recorded list of GraphicsContext commands against a PlatformContextCairo
        instance.

        * platform/SourcesCairo.txt:
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp: Added.
        (WebCore::GraphicsContextImplCairo::GraphicsContextImplCairo):
        (WebCore::m_platformContext):
        (WebCore::GraphicsContextImplCairo::updateState):
        (WebCore::GraphicsContextImplCairo::clearShadow):
        (WebCore::GraphicsContextImplCairo::setLineCap):
        (WebCore::GraphicsContextImplCairo::setLineDash):
        (WebCore::GraphicsContextImplCairo::setLineJoin):
        (WebCore::GraphicsContextImplCairo::setMiterLimit):
        (WebCore::GraphicsContextImplCairo::fillRect):
        (WebCore::GraphicsContextImplCairo::fillRoundedRect):
        (WebCore::GraphicsContextImplCairo::fillRectWithRoundedHole):
        (WebCore::GraphicsContextImplCairo::fillPath):
        (WebCore::GraphicsContextImplCairo::fillEllipse):
        (WebCore::GraphicsContextImplCairo::strokeRect):
        (WebCore::GraphicsContextImplCairo::strokePath):
        (WebCore::GraphicsContextImplCairo::strokeEllipse):
        (WebCore::GraphicsContextImplCairo::clearRect):
        (WebCore::GraphicsContextImplCairo::drawGlyphs):
        (WebCore::GraphicsContextImplCairo::drawImage):
        (WebCore::GraphicsContextImplCairo::drawTiledImage):
        (WebCore::GraphicsContextImplCairo::drawNativeImage):
        (WebCore::GraphicsContextImplCairo::drawPattern):
        (WebCore::GraphicsContextImplCairo::drawRect):
        (WebCore::GraphicsContextImplCairo::drawLine):
        (WebCore::GraphicsContextImplCairo::drawLinesForText):
        (WebCore::GraphicsContextImplCairo::drawLineForDocumentMarker):
        (WebCore::GraphicsContextImplCairo::drawEllipse):
        (WebCore::GraphicsContextImplCairo::drawPath):
        (WebCore::GraphicsContextImplCairo::drawFocusRing):
        (WebCore::GraphicsContextImplCairo::save):
        (WebCore::GraphicsContextImplCairo::restore):
        (WebCore::GraphicsContextImplCairo::translate):
        (WebCore::GraphicsContextImplCairo::rotate):
        (WebCore::GraphicsContextImplCairo::scale):
        (WebCore::GraphicsContextImplCairo::concatCTM):
        (WebCore::GraphicsContextImplCairo::beginTransparencyLayer):
        (WebCore::GraphicsContextImplCairo::endTransparencyLayer):
        (WebCore::GraphicsContextImplCairo::clip):
        (WebCore::GraphicsContextImplCairo::clipOut):
        (WebCore::GraphicsContextImplCairo::clipPath):
        (WebCore::GraphicsContextImplCairo::applyDeviceScaleFactor):
        * platform/graphics/cairo/GraphicsContextImplCairo.h: Added.

2017-11-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Clean up CairoOperations, GradientCairo, GraphicsContextCairo implementation files
        https://bugs.webkit.org/show_bug.cgi?id=179679

        Reviewed by Michael Catanzaro.

        Clean up random tidbits in the CairoOperations, GradientCairo and
        GraphicsContextCairo implementation files that I've been ravaging
        through over the last few days.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        Add a missing <algorithms> include, drop an unnecessary empty line.
        (WebCore::Cairo::drawLine):
        * platform/graphics/cairo/GradientCairo.cpp:
        Add a missing CairoOperations.h include.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        Drop unnecessary includes and a bunch of redundant helper functions.
        (WebCore::GraphicsContext::drawLineForText):
        Inline the DashArray object construction into the relay call.
        (WebCore::GraphicsContext::drawLinesForText):
        size_t can't be negative, so just check for DashArray being empty.
        (WebCore::fillRectWithColor): Deleted.
        (): Deleted.
        (WebCore::drawPathShadow): Deleted.
        (WebCore::fillCurrentCairoPath): Deleted.
        (WebCore::shadowAndFillCurrentCairoPath): Deleted.
        (WebCore::shadowAndStrokeCurrentCairoPath): Deleted.

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

        Unreviewed, another attempt to fix builds after r224707
        https://bugs.webkit.org/show_bug.cgi?id=179499
        <rdar://problem/35445033>

        * PlatformWin.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-11-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224860.

        This change broke the macOS and iOS builds.

        Reverted changeset:

        "Unreviewed, fix CMake debug builds after r224707"
        https://bugs.webkit.org/show_bug.cgi?id=179499
        https://trac.webkit.org/changeset/224860

2017-11-14  Antti Koivisto  <antti@apple.com>

        Media query with :host inside a custom elements doesn't get updated on window resize
        https://bugs.webkit.org/show_bug.cgi?id=176101
        <rdar://problem/34163850>

        Reviewed by Simon Fraser.

        If a media query containing :host or ::slotted stops applying we fail to update the style.

        * style/StyleScope.cpp:
        (WebCore::Style::invalidateHostAndSlottedStyleIfNeeded):

            Factor into function.

        (WebCore::Style::Scope::updateActiveStyleSheets):
        (WebCore::Style::Scope::scheduleUpdate):

            Invalidate elements that may match :host and ::slotted before clearing style resolver for full update.

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

        Move JSONValues to WTF and convert uses of InspectorValues.h to JSONValues.h
        https://bugs.webkit.org/show_bug.cgi?id=173793

        Reviewed by Brian Burg.

        Based on patch by Brian Burg.

        * ForwardingHeaders/inspector/InspectorValues.h: Removed.
        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids):
        (WebCore::sanitizeKeyids):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspect):
        * inspector/CommandLineAPIHost.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::releaseData):
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::buildArrayForVector):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        (WebCore::InspectorCanvas::buildArrayForImageData):
        (WebCore::InspectorCanvas::buildArrayForImageBitmap):
        * inspector/InspectorCanvas.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorOverlay.cpp:
        (WebCore::evaluateCommandInOverlay):
        (WebCore::InspectorOverlay::evaluateInOverlay):
        * inspector/InspectorOverlay.h:
        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createConsoleProfileData):
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createTimeStampData):
        (WebCore::TimelineRecordFactory::createAnimationFrameData):
        (WebCore::createQuad):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::appendLayoutRoot):
        * inspector/TimelineRecordFactory.h:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::computePseudoClassMask):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        * inspector/agents/InspectorCSSAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        (WebCore::parseConfigColor):
        (WebCore::parseQuad):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        (WebCore::InspectorDOMAgent::highlightSelector):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightNodeList):
        (WebCore::InspectorDOMAgent::highlightFrame):
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDatabaseAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::Inspector::idbKeyFromInspectorObject):
        (WebCore::Inspector::idbKeyRangeFromKeyRange):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/agents/InspectorIndexedDBAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::buildObjectForHeaders):
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        (WebCore::InspectorNetworkAgent::setExtraHTTPHeaders):
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setInstruments):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::didInvalidateLayout):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didScheduleStyleRecalculation):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willComposite):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setFrameIdentifier):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::sendEvent):
        (WebCore::InspectorTimelineAgent::createRecordEntry):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/agents/InspectorTimelineAgent.h:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseJSONObject):
        (WebCore::parseLicenseFormat):
        (WebCore::parseLicenseReleaseAcknowledgementFormat):
        (WebCore::CDMInstanceClearKey::updateLicense):
        (WebCore::CDMInstanceClearKey::removeSessionData):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::extractSinfData):
        * testing/Internals.cpp:

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

        Unreviewed, fix CMake debug builds after r224707
        https://bugs.webkit.org/show_bug.cgi?id=179499
        <rdar://problem/35445033>

        * PlatformWin.cmake:
        * Sources.txt:

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

        Another attempt to fix GTK/WPE debug builds
        https://bugs.webkit.org/show_bug.cgi?id=179660

        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::drawNativeImage):

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

        Fix Windows build.

        * html/canvas/WebGLRenderingContext.h:

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

        [Service Workers] Implement container.getRegistrations()
        https://bugs.webkit.org/show_bug.cgi?id=179672

        Reviewed by Brady Eidson.

        Implement container.getRegistrations():
        - https://w3c.github.io/ServiceWorker/#dom-serviceworkercontainer-getregistrations

        No new tests, rebaselined existing test.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::getOrCreate):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::isMatching const):
        (WebCore::ServiceWorkerRegistrationKey::originIsMatching const):
        * workers/service/ServiceWorkerRegistrationKey.h:
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::getRegistrations):
        * workers/service/server/SWServer.h:

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

        Fix Windows build.

        * html/canvas/WebGLRenderingContext.h:

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

        Unreviewed, fix GTK/WPE debug builds even better after r224813
        https://bugs.webkit.org/show_bug.cgi?id=179660

        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::drawNativeImage):

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

        Unreviewed, fix GTK/WPE debug builds after r224813
        https://bugs.webkit.org/show_bug.cgi?id=179660

        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::drawNativeImage):

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

        Implement ServiceWorker handle fetch for navigation loads
        https://bugs.webkit.org/show_bug.cgi?id=179404

        Reviewed by Alex Christensen and Chris Dumez.

        Covered by rebased tests.

        Step 11 of https://w3c.github.io/ServiceWorker/#on-fetch-request-algorithm is implemented in DocumentLoader as it centralizes main request loading
        and knows about the context of it.

        For each main resource load in document loader, we first check whether there is a matching service worker.
        The fetch request is updated accordingly so that there is no difference in the handling of navigation vs. subresource requests after that point.

        Updated DocumentThreadableLoader::didReceiveResponse since it can now receive responses from service worker with various response types.
        A follow-up patch should properly handle cross origin responses.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::startLoadingMainResource):
        (WebCore::DocumentLoader::doLoadingMainResource):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setNavigationServiceWorkerRegistrationData):
        * loader/cache/CachedResourceRequest.h:
        * platform/MIMETypeRegistry.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]):

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

        Log moveFile failure errors
        https://bugs.webkit.org/show_bug.cgi?id=179695

        Reviewed by Brady Eidson.

        Content extension tests are flaky. In r224790 I added logs to find out why, and they indicate that moveFile is failing.
        To further understand why, I'm adding logs to see what's happening sometimes on the bots.

        * platform/cocoa/FileSystemCocoa.mm:
        (WebCore::FileSystem::moveFile):

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

        Fix Windows build.

        * html/OffscreenCanvas.cpp:
        * html/OffscreenCanvas.h:
        * html/OffscreenCanvas.idl:

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

        Remove Cocoa CFURLConnection loading code
        https://bugs.webkit.org/show_bug.cgi?id=179688

        Reviewed by Antti Koivisto.

        CFURLConnection is only used on the AppleWin port now.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * SourcesIOS.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/cf/ResourceLoaderCFNet.cpp:
        * loader/cocoa/SubresourceLoaderCocoa.mm:
        * loader/mac/DocumentLoaderMac.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        (WebCore::Page::addSchedulePair):
        (WebCore::Page::removeSchedulePair):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::create): Deleted.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::WebCoreNSURLAuthenticationChallengeClient): Deleted.
        (): Deleted.
        * platform/network/ProtectionSpaceBase.cpp:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::createCF):
        (WebCore::core):
        (): Deleted.
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        (WebCore::createCookies):
        (WebCore::deleteAllCookiesModifiedSince):
        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::setCertificate):
        (WebCore::ResourceError::platformLazyInit):
        (WebCore::ResourceError::doPlatformIsolatedCopy):
        (WebCore::ResourceError::cfError const):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest):
        (WebCore::installHookToRemoveCFNetworkMessageBlockingMainThread):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupConnectionScheduling):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::Credential::cfCredential const): Deleted.
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::ProtectionSpace::cfSpace const): Deleted.
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::nsURLRequest const):
        (WebCore::ResourceRequest::clearOrUpdateNSURLRequest): Deleted.
        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):
        (WebCore::ResourceResponse::ResourceResponse): Deleted.
        * platform/network/ios/ResourceHandleIOS.mm: Removed.
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::AuthenticationChallenge::authenticationClient const):
        (WebCore::mac):
        (-[WebCoreAuthenticationClientAsChallengeSender setCFChallenge:]): Deleted.
        (-[WebCoreAuthenticationClientAsChallengeSender cfChallenge]): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::synchronousWillSendRequestEnabled):
        * platform/network/mac/ResourceRequestMac.mm: Removed.

2017-11-14  Daniel Bates  <dabates@apple.com>

        Update comment in FeatureDefines.xcconfig to reflect location of Visual Studio property files
        for feature defines

        Following r195498 and r201917 the Visual Studio property files for feature defines have
        moved from directory WebKitLibraries/win/tools/vsprops to directory Source/cmake/tools/vsprops.
        Update the comment in FeatureDefines.xcconfig to reflect the new location and names of these
        files.

        * Configurations/FeatureDefines.xcconfig:

2017-11-14  Antti Koivisto  <antti@apple.com>

        Remove StyleResolver::State::document()
        https://bugs.webkit.org/show_bug.cgi?id=179678

        Reviewed by Antoine Quint.

        We don't need both StyleResolver::document() and StyleResolver::State::document().

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::updateConversionData):
        (WebCore::StyleResolver::resolvedVariableValue):
        (WebCore::StyleResolver::colorFromPrimitiveValue const):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::document const): Deleted.

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

        Stub implementations of OffscreenCanvas getContext and transferToImageBitmap
        https://bugs.webkit.org/show_bug.cgi?id=179671
        <rdar://problem/35534018>

        Reviewed by Antoine Quint.

        Empty implementations of getContext and transferToImageBitmap. At the moment
        only return a WebGLRenderingContext from getContext, since we don't
        have an Offscreen 2d context type yet.

        Tests: http/wpt/offscreen-canvas/getContext-webgl.html
               http/wpt/offscreen-canvas/transferToImageBitmap.html

        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::getContext):
        (WebCore::OffscreenCanvas::transferToImageBitmap):
        * html/OffscreenCanvas.h:
        * html/OffscreenCanvas.idl:
        * html/canvas/GPUBasedCanvasRenderingContext.h: Drive-by parameter rename.
        (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext):

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

        WebSWClientConnection should do IPC to StorageProcess if its WebSWOriginTable is not yet initialized
        https://bugs.webkit.org/show_bug.cgi?id=179668

        Reviewed by Chris Dumez.

        Covered by existing updated tests.

        Removing hasServiceWorkerRegisteredForOrigin and using hasServiceWorkerRegistration instead.
        The former is only checking the shared map which might not be initialized at the time the function is called.
        The latter is going to the StorageProcess if the map is not yet initialized.

        * testing/Internals.cpp:
        (WebCore::Internals::hasServiceWorkerRegisteredForOrigin): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/server/SWClientConnection.h:

2017-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add a ServiceWorker domain to get information about an inspected ServiceWorker
        https://bugs.webkit.org/show_bug.cgi?id=179640
        <rdar://problem/35517361>

        Reviewed by Devin Rousso.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        New files.

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::createLazyAgents):
        Add a ServiceWorkerAgent when the Worker is a ServiceWorker.

        * inspector/agents/worker/ServiceWorkerAgent.h: Added.
        * inspector/agents/worker/ServiceWorkerAgent.cpp: Added.
        (WebCore::ServiceWorkerAgent::ServiceWorkerAgent):
        (WebCore::ServiceWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::ServiceWorkerAgent::willDestroyFrontendAndBackend):
        (WebCore::ServiceWorkerAgent::getInitializationInfo):
        Populate initialization info.

2017-11-14  Brady Eidson  <beidson@apple.com>

        Remove some accidentally checked-in commented-out code.

        Unreviewed.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::fireInstallEvent):
        (WebCore::SWServer::fireActivateEvent):

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

        Clean up old URL parser remnants
        https://bugs.webkit.org/show_bug.cgi?id=179573

        Reviewed by Darin Adler.

        When we transitioned to the new URLParser, we kept the old character tables which were less spec-conformant.
        Removing them and transitioning to URLParser's table makes more web platform tests pass!

        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::createBlobURL):
        There's no need to percent-encode an origin.  It's already ascii, and if it's not, then the URLParser will escape it.
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::createFileURL):
        Removed comment that no longer applies.
        * platform/URL.cpp:
        (WebCore::URL::setProtocol):
        (WebCore::percentEncodeCharacters):
        (WebCore::URL::setUser):
        (WebCore::URL::setPass):
        Percent encode the userinfo character set from the URLParser according to https://url.spec.whatwg.org/#set-the-username and https://url.spec.whatwg.org/#set-the-password
        (WebCore::URL::setPath):
        A ? or a # are the only two characters that need to be pre-encoded when setting the path because they indicate the
        beginning of a query or fragment.  All other characters will be encoded if necessary during parsing.
        (WebCore::protocolIsInternal):
        (): Deleted.
        (WebCore::isSchemeFirstChar): Deleted.
        (WebCore::isSchemeChar): Deleted.
        (WebCore::isBadChar): Deleted.
        (WebCore::isTabNewline): Deleted.
        (WebCore::appendEscapedChar): Deleted.
        (WebCore::encodeWithURLEscapeSequences):
        Encode characters needed.  I used the user info set of characters because that was most similar to the BadChar set of the old parser.
        This isn't standardized, and it's only used for the search context menu item which certainly isn't standardized.
        (WebCore::isValidProtocol): Deleted.
        Remove a bunch of old unused functions.
        * platform/URLParser.cpp:
        (WebCore::URLParser::isInUserInfoEncodeSet):
        (WebCore::URLParser::parseAuthority):
        * platform/URLParser.h:
        Expose a few functions for URL.cpp to use.

2017-11-14  Antti Koivisto  <antti@apple.com>

        Enable display:contents by default
        https://bugs.webkit.org/show_bug.cgi?id=179655

        Reviewed by Sam Weinig.

        * page/RuntimeEnabledFeatures.h:

2017-11-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move drawLine operation from GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179669

        Reviewed by Carlos Garcia Campos.

        Move the drawLine operation implementation into the CairoOperations
        implementation file, with the Cairo::drawLine() function only expecting
        a PlatformContextCairo object, two FloatingPoints, and a const reference
        to a GraphicsContextState object.

        As with drawLinesForText(), the drawLine() implementation utilized a few
        private GraphicsContext methods that we for now reimplement in the
        Cairo namespace as static functions, providing necessary state values to
        perform the computations. The GraphicsContext methods should be changed
        to become static public functions -- after that we'll be able to remove
        the new duplicated helper functions.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::dashedLineCornerWidthForStrokeWidth):
        (WebCore::Cairo::dashedLinePatternWidthForStrokeWidth):
        (WebCore::Cairo::dashedLinePatternOffsetForPatternAndStrokeWidth):
        (WebCore::Cairo::centerLineAndCutOffCorners):
        (WebCore::Cairo::drawLine):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):

2017-11-14  Tim Horton  <timothy_horton@apple.com>

        Long pressing a phone number with spaces in it results in a link sheet instead of a data detectors sheet
        https://bugs.webkit.org/show_bug.cgi?id=179646
        <rdar://problem/35337288>

        Reviewed by Simon Fraser.

        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::canBePresentedByDataDetectors):
        (WebCore::DataDetection::isDataDetectorLink):
        Expose canBePresentedByDataDetectors, which tests if the URL's
        scheme is one of Data Detectors' known long-press schemes.

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

        [GTK][WPE] Don't require brotli
        https://bugs.webkit.org/show_bug.cgi?id=178122

        Reviewed by Frédéric Wang.

        Remove stray remaining use of brotli CMake variable.

        * CMakeLists.txt:

2017-11-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move drawLinesForText operation from GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179661

        Reviewed by Carlos Garcia Campos.

        Encapsulate the drawLinesForText() operation in the WebCore::Cairo
        namespace. Apart from moving gist of the code from GraphicsContextCairo
        to CairoOperations, we also (for the moment) have to duplicate the
        GraphicsContext::computeLineBoundsAndAntialiasingModeForText() code.
        This is necessary because the given method is private on the
        GraphicsContext class, and relies on an underlying GraphicsContext
        object to retrieve the current CTM and stroke thickness values.

        The adjusted reimplementation uses PlatformContextCairo to retrieve
        the CTM (just like Cairo's GraphicsContext::getCTM() does), and
        requires the stroke thickness value to be passed in as an argument.
        Similar modifications will be proposed for the existing
        GraphicsContext::computeLineBoundsAndAntialiasingModeForText() code,
        and once that's approved the duplicated code will be eliminated.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::computeLineBoundsAndAntialiasingModeForText):
        (WebCore::Cairo::drawLinesForText):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLinesForText):

2017-11-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move native image drawing operation to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179660

        Reviewed by Carlos Garcia Campos.

        Unify the native image drawing operation behavior between the
        Cairo-specific GraphicsContext and drawNativeImage() implementations and
        then move the code into the Cairo::drawNativeImage() function, inside
        the CairoOperations implementation file.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::cairoSurfaceHasAlpha):
        (WebCore::Cairo::drawNativeImage):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::drawNativeImage):

2017-11-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Perform GraphicsContextPlatformPrivate method calls from CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179657

        Reviewed by Carlos Garcia Campos.

        To enable encapsulating remaining Cairo operations in static functions
        inside the WebCore::Cairo namespace, we have to work around the
        GraphicsContextPlatformPrivate methods that are invoked in the current
        GraphicsContext implementation for Cairo.

        A pointer to the GraphicsContextPlatformPrivate object is now kept on
        the PlatformContextCairo instance, and we take care of setting it up
        and clearing it out appropriate to the GraphicsContextPlatformPrivate
        lifetime (as managed in Cairo-specific GraphicsContext implementation).
        The GraphicsContextPlatformPrivate method invocations are then moved
        to the appropriate CairoOperations functions.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::State::setCTM):
        (WebCore::Cairo::save):
        (WebCore::Cairo::restore):
        (WebCore::Cairo::translate):
        (WebCore::Cairo::rotate):
        (WebCore::Cairo::scale):
        (WebCore::Cairo::concatCTM):
        (WebCore::Cairo::clip):
        (WebCore::Cairo::clipPath):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        * platform/graphics/cairo/PlatformContextCairo.h:
        (WebCore::PlatformContextCairo::graphicsContextPrivate):
        (WebCore::PlatformContextCairo::setGraphicsContextPrivate):

2017-11-14  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move simpler draw operations from GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179614

        Reviewed by Carlos Garcia Campos.

        Move operations that perform simpler drawing to the CairoOperations
        file. This isolates the Cairo code and encapsulates operation work
        into a limited scope. This patch only covers drawing patterns,
        rectangles, document marker lines and ellipses. A missing forward
        declaration for the drawGlyphs() function is also added in the
        CairoOperations header.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawPattern):
        (WebCore::Cairo::drawRect):
        (WebCore::Cairo::drawLineForDocumentMarker):
        (WebCore::Cairo::drawEllipse):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::GraphicsContext::drawPattern):

2017-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Give a ServiceWorker WebContentProcess a different display name
        https://bugs.webkit.org/show_bug.cgi?id=179653

        Reviewed by Brady Eidson.

        * English.lproj/Localizable.strings:

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

        Send ServiceWorkerData structs to the WebProcesses instead of ServiceWorkerIdentifiers
        https://bugs.webkit.org/show_bug.cgi?id=179649

        Reviewed by Brady Eidson.

        Send ServiceWorkerData structs to the WebProcesses instead of ServiceWorkerIdentifiers so that the
        WebProcesses can correctly construct ServiceWorker objects, with the right attributes / state.

        No new tests, rebaselined existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::getOrCreate):
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::~ServiceWorker):
        (WebCore::ServiceWorker::scheduleTaskToUpdateState):
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleTaskToUpdateRegistrationState):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerData.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerRegistrationData.cpp.
        (WebCore::ServiceWorkerData::isolatedCopy const):
        * workers/service/ServiceWorkerData.h: Copied from Source/WebCore/workers/service/server/SWServerWorker.cpp.
        (WebCore::ServiceWorkerData::encode const):
        (WebCore::ServiceWorkerData::decode):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::updateStateFromServer):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistrationData.cpp:
        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::encode const):
        (WebCore::ServiceWorkerRegistrationData::decode):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        (WebCore::SWClientConnection::updateRegistrationState):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::updateRegistrationState):
        (WebCore::SWServerRegistration::data const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::m_script):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::scriptURL const):
        (WebCore::SWServerWorker::type const):
        (WebCore::SWServerWorker::identifier const):
        (WebCore::SWServerWorker::state const):
        (WebCore::SWServerWorker::setState):
        (WebCore::SWServerWorker::data const):

2017-11-13  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Enable release asserts in updateStyleIfNeeded() and updateLayout() for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=179651

        Reviewed by Antti Koivisto.

        r224604 disabled the release assertions on iOS entirely even though the underlying bug only affected iOS WebKit1 port
        due to various time constraints. Enable them back on iOS WebKit2 port.

        * dom/Document.cpp:
        (WebCore::isSafeToUpdateStyleOrLayout):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayout):

2017-11-13  Brady Eidson  <beidson@apple.com>

        Massive "Server-process-to-context-process" connection overhaul.
        https://bugs.webkit.org/show_bug.cgi?id=179554

        Reviewed by Chris Dumez.

        No new tests (Refactor, no behavior change).

        Having the SWServer::Connection object be overloaded to mean both client->server and server->context 
        was the wrong design and was starting to crumble under its own weight.

        So this patch introduces a SWServerToContextConnection to manage the StorageProcess-side of connections
        to context processes.

        Any message that is specifically about the connection between the StorageProcess and context process
        should use this connection going forward.

        Right now there is only one context process, but this design keeps us ready for that to change.

        This patch also gets rid of a lot of "server connection identifier" integers being passed amongst processes
        that were actually pointless.

        This patch is also a prerequisite for many things that are coming up soon, such as termination.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        (WebCore::ServiceWorkerGlobalScope::serverConnectionIdentifier const): Deleted.

        * workers/service/ServiceWorkerTypes.h:

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:
        (WebCore::ServiceWorkerThread::serverConnectionIdentifier const): Deleted.

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::create): Deleted.
        * workers/service/context/ServiceWorkerThreadProxy.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::generateServiceWorkerIdentifier):
        (WebCore::SWServer::~SWServer):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::scriptContextStarted):
        (WebCore::SWServer::didFinishInstall):
        (WebCore::SWServer::didFinishActivation):
        (WebCore::SWServer::didResolveRegistrationPromise):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::serverToContextConnectionCreated):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::fireInstallEvent):
        (WebCore::SWServer::fireActivateEvent):
        (WebCore::SWServer::Connection::didFinishInstall): Deleted.
        (WebCore::SWServer::Connection::didFinishActivation): Deleted.
        (WebCore::SWServer::Connection::setServiceWorkerHasPendingEvents): Deleted.
        (WebCore::SWServer::Connection::scriptContextFailedToStart): Deleted.
        (WebCore::SWServer::Connection::scriptContextStarted): Deleted.
        (WebCore::SWServer::setServiceWorkerHasPendingEvents): Deleted.
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::install):
        (WebCore::SWServerJobQueue::didResolveRegistrationPromise):
        (WebCore::SWServerJobQueue::didFinishInstall):
        (WebCore::SWServerJobQueue::tryActivate):
        (WebCore::SWServerJobQueue::activate):
        * workers/service/server/SWServerJobQueue.h:

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::generateServiceWorkerRegistrationIdentifier):

        * workers/service/server/SWServerToContextConnection.cpp: Added.
        (WebCore::generateServerToContextConnectionIdentifier):
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::~SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::connectionForIdentifier):
        (WebCore::SWServerToContextConnection::globalServerToContextConnection):
        (WebCore::SWServerToContextConnection::scriptContextFailedToStart):
        (WebCore::SWServerToContextConnection::scriptContextStarted):
        (WebCore::SWServerToContextConnection::didFinishInstall):
        (WebCore::SWServerToContextConnection::didFinishActivation):
        (WebCore::SWServerToContextConnection::setServiceWorkerHasPendingEvents):
        * workers/service/server/SWServerToContextConnection.h: Copied from Source/WebCore/workers/service/server/SWServerWorker.h.
        (WebCore::SWServerToContextConnection::identifier const):

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::existingWorkerForIdentifier):
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::SWServerWorker::~SWServerWorker):
        (WebCore::SWServerWorker::scriptContextFailedToStart):
        (WebCore::SWServerWorker::scriptContextStarted):
        (WebCore::SWServerWorker::didFinishInstall):
        (WebCore::SWServerWorker::didFinishActivation):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::create):
        (WebCore::SWServerWorker::registrationKey const):
        (WebCore::SWServerWorker::contextConnectionIdentifier const):

2017-11-13  Don Olmstead  <don.olmstead@sony.com>

        Unreviewed build fix after r224791.

        * platform/network/NetworkStorageSessionStub.cpp:
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): Deleted.

2017-11-13  Simon Fraser  <simon.fraser@apple.com>

        Minor DisplayRefreshMonitor-related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179648

        Reviewed by Alex Christensen.

        Use more "#pragma once" and C++ initializers.

        Make more member functions of DisplayRefreshMonitor protected.

        Improve the ordering of member variables.

        Don't mix member variables and member functions in the declaration of ScriptedAnimationController.

        * dom/ScriptedAnimationController.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::mutex):
        * platform/graphics/DisplayRefreshMonitorManager.h:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        * platform/graphics/mac/DisplayRefreshMonitorMac.h:

2017-11-13  Simon Fraser  <simon.fraser@apple.com>

        When navigating back to a page, compositing layers may not use accelerated drawing
        https://bugs.webkit.org/show_bug.cgi?id=178749
        rdar://problem/35158946

        Reviewed by Dean Jackson.

        There were two issues with setting GraphicsLayerCA's "acceleratesDrawing" state which
        occurred on back navigation, related to the ordering of style recalcs and layout.

        First, at style recalc time, we created a RenderLayerCompositor but hadn't yet called
        its cacheAcceleratedCompositingFlags(), so any layers created during style update
        didn't get accelerated drawing. Fix by making cacheAcceleratedCompositingFlags() internal
        to RenderLayerCompositor and calling it from willRecalcStyle() and updateCompositingLayers().

        We have to be careful to avoid m_forceCompositingMode flip-flopping between cacheAcceleratedCompositingFlags()
        and cacheAcceleratedCompositingFlagsAfterLayout(), since, for subframes, it depends on layout.

        Secondly, GraphicsLayerCA::commitLayerChangesBeforeSublayers() needs to updateAcceleratesDrawing()
        before updating tiles, so that new tiles fetch the right acceleratesDrawing state from
        the TileController.

        Test: compositing/accelerated-layers-after-back.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayersAfterLayout):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::willRecalcStyle):
        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:

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

        matchRegistration does not need to go to StorageProcess if no service worker is registered
        https://bugs.webkit.org/show_bug.cgi?id=179480

        Reviewed by Chris Dumez.

        Covered by existing tests.

        Moving the origin store in SWServer since they share the same session ID.
        This allows updating the origin store based on each registration map update.
        This also allows clearing the origin store when clearing the SWServer.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/server/SWOriginStore.cpp: Added.
        (WebCore::SWOriginStore::add):
        (WebCore::SWOriginStore::remove):
        (WebCore::SWOriginStore::clear):
        (WebCore::SWOriginStore::clearAll):
        * workers/service/server/SWOriginStore.h: Added.
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::OriginStore::add):
        (WebCore::SWServer::OriginStore::remove):
        (WebCore::SWServer::OriginStore::clear):
        (WebCore::SWServer::OriginStore::clearAll):
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::SWServer):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::originStore):

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

        Merge NetworkProcess::EnsurePrivateBrowsingSession and NetworkProcess::AddWebsiteDataStore into one message type
        https://bugs.webkit.org/show_bug.cgi?id=178751

        Reviewed by Brady Eidson.

        The creation of private browsing sessions and persistent browsing sessions has evolved to be the same thing
        with differences in parameters, like no sandbox extensions or paths to persistent storage locations for private browsing.
        These should be united to simplify future development of WebsiteDataStore construction.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): Deleted.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::ensureSession):
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession): Deleted.

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

        Web Automation: inViewCenterPoint should not include topContentInset when computed in viewport coordinates
        https://bugs.webkit.org/show_bug.cgi?id=179129
        <rdar://problem/35297038>

        Reviewed by Simon Fraser.

        Add or export some helpers needed to compute element layout for WebDriver.

        * dom/Element.h: Export the non-DOM version of getClientBounds().
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::clientToDocumentRect const):
        Added. This does the same thing as clientToDocumentPoint. Export it, too.

2017-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include a NetworkAgent in ServiceWorkers for network debugging
        https://bugs.webkit.org/show_bug.cgi?id=179513
        <rdar://problem/35456402>

        Reviewed by Brian Burg.

        In order to show Network requests for a ServiceWorker, we need to add
        inspector networking hooks for Worker loads. While we show Network
        requests for DedicatedWorkers, we do that through the Page during Page
        inspection. In ServiceWorker inspection, the remote connection is
        connected to the ServiceWorkerThreadProxy, and interacts with the
        WorkerGlobalScope without making any assumptions about a Page existing.
        We don't want to make any assumptions about a Page/Document being needed
        for Network hooks, so we should add new hooks that will work in the
        WorkerGlobalScope's context.

        This patch adds InspectorInstrumentation networking hooks for workers inside
        of the WorkerThreadableLoader bridge. This is where the majority of Worker
        initiated network requests happen (Fetch/XHR, but not WebSockets). The hooks
        are simpler versions of the existing network hooks for a Page, and allow for
        complete inspector networking information (will send, did receive response,
        did receive data, success, failure, and timing metrics).

        This patch generalizes InspectorNetworkAgent to work for a Page and Worker.
        Some of the existing functionality was specific to a Page (frameId/loaderId)
        but did not make sense for a Worker. In order to handle these cases, all
        of the unique logic was extracted out into virtual methods that subclasses
        PageNetworkAgent and WorkerNetworkAgent provide as appropriate. The majority
        of NetworkAgent remains unchanged and algorithms are shared.

        We needed to change the existing InspectorInstrumentation networking hooks
        to allow for an optional DocumentLoader. This way we can keep all of the
        same hooks leading inside of NetworkAgent, but loads for a Page will have a
        DocumentLoader, and loads for a ServiceWorker will not.

        While the WorkerNetworkAgent would work for a DedicatedWorker, we still
        only create it for a ServiceWorker. The existing behavior of showing Network
        loads for a DedicatedWorker will continue to go through the Page inspector
        so we can avoid creating a NetworkAgent for DedicatedWorkers. If we created
        a way to directly inspect a DedicatedWorker we could look at making this
        always available, but it would require extra work to function perfectly.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add new files.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):
        Switch from InspectorNetworkAgent to PageNetworkAgent.

        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::workerAgentContext):
        (WebCore::WorkerInspectorController::createLazyAgents):
        Create a WorkerNetworkAgent when inside of a ServiceWorker.
        Also start the lazy agent pattern for agents that can defer
        creation until a frontend attached.

        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        When frontends connect/disconnect toggle the necessary states.
        Also start the execution stopwatch, otherwise it will always be at 0.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::willSendRequestOfTypeImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveData):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        Add Worker networking hooks that pass through to the same general hooks.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishTiming):
        * loader/WorkerThreadableLoader.h:
        Use the new worker networking instrumentation hooks.

        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        Drive-by: use a move.

        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::InspectorNetworkAgent):
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::willSendRequestOfType):
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        (WebCore::InspectorNetworkAgent::didFailLoading):
        (WebCore::InspectorNetworkAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorNetworkAgent::buildInitiatorObject):
        (WebCore::InspectorNetworkAgent::enable):
        (WebCore::InspectorNetworkAgent::disable):
        (WebCore::InspectorNetworkAgent::setResourceCachingDisabled):
        (WebCore::InspectorNetworkAgent::loadResource):
        (WebCore::InspectorNetworkAgent::webSocketForRequestId):
        (WebCore::InspectorNetworkAgent::resolveWebSocket):
        (WebCore::InspectorNetworkAgent::mainFrameNavigated):
        Extract logic for subclasses. Transition to DocumentLoader being null.

        * inspector/agents/page/PageNetworkAgent.h:
        * inspector/agents/page/PageNetworkAgent.cpp: Added.
        (WebCore::PageNetworkAgent::PageNetworkAgent):
        (WebCore::PageNetworkAgent::loaderIdentifier):
        (WebCore::PageNetworkAgent::frameIdentifier):
        (WebCore::PageNetworkAgent::setResourceCachingDisabled):
        (WebCore::PageNetworkAgent::scriptExecutionContext):
        Extracted Page implementation. This is just moving from the original.

        * inspector/agents/worker/WorkerNetworkAgent.h:
        * inspector/agents/worker/WorkerNetworkAgent.cpp:
        (WebCore::WorkerNetworkAgent::WorkerNetworkAgent):
        (WebCore::WorkerNetworkAgent::loaderIdentifier):
        (WebCore::WorkerNetworkAgent::frameIdentifier):
        (WebCore::WorkerNetworkAgent::setResourceCachingDisabled):
        (WebCore::WorkerNetworkAgent::scriptExecutionContext):
        Implement for a worker.
        
        * inspector/agents/worker/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        * inspector/agents/worker/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/agents/worker/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        Add some assertions for all Worker agents for clarify.

        * workers/WorkerDebuggerProxy.h:
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::identifier const):
        (WebCore::WorkerGlobalScope::createUniqueIdentifier):
        Provide a way to get unique identifiers in a worker. For the Page
        this is done through the Page's ProgressTracker. For a Worker we just
        put this on the WorkerGlobalScope. This is used for request ids.

        * workers/WorkerMessagingProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::setResourceCachingDisabled):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::setResourceCachingDisabled):
        Add a debug method for disabling the resource cache from a worker.
        In service workers this sets the override flag on the hidden page.

2017-11-08  Keith Miller  <keith_miller@apple.com>

        Async iteration should only fetch the next method once and add feature flag
        https://bugs.webkit.org/show_bug.cgi?id=179451

        Reviewed by Geoffrey Garen.

        Add feature flag for Async iteration.

        * Configurations/FeatureDefines.xcconfig:

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

        Call willPerformHTTPRedirection on WebCoreNSURLSession's delegate
        https://bugs.webkit.org/show_bug.cgi?id=179539

        Reviewed by Jer Noble.

        This is now possible!
        This will allow AVFoundation to fix redirect-related bugs.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession addDelegateOperation:]):
        (-[WebCoreNSURLSession resetWithCompletionHandler:]):
        (-[WebCoreNSURLSession flushWithCompletionHandler:]):
        (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):
        (-[WebCoreNSURLSessionDataTask resource:shouldCacheResponse:]):
        (-[WebCoreNSURLSessionDataTask resource:receivedData:length:]):
        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:completionHandler:]):
        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:]): Deleted.

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

        Add some more assertions in SWServerJobQueue
        https://bugs.webkit.org/show_bug.cgi?id=179626

        Reviewed by Alex Christensen.

        Add some more assertions in SWServerJobQueue for extra safety.

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

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

        The css properties stroke-width/stroke-color and -webkit-text-stroke-width/-webkit-text-stroke-color should not be mixed.
        https://bugs.webkit.org/show_bug.cgi?id=174737

        Reviewed by Antti Koivisto.

        Previously, the stroke width and stroke color would independently fall back to the -webkit-text-stroke-width and
        -webkit-text-stroke-color values if stroke-width and/or stroke-color were not explicitly specified. This is
        problematic, since we might end up mixing the new stroke properties with the legacy Webkit stroke properties.
        The new strategy is to use the stroke-width and stroke-color value combination only if stroke-color has been
        explicitly specified. This should work well, since there will be no visible stroke when specifying only
        stroke-width (because stroke-color by default is transparent). We can then safely fall back to the legacy Webkit
        stroke value combination. In the case where only stroke-color is specified, we should use the stroke-width/
        stroke-color combination, since stroke-width by default is 1, and we will then have a visible stroke. 

        No new tests, existing tests have been updated to reflect behavior changes.

        * rendering/TextDecorationPainter.cpp:
        (WebCore::decorationColor):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        (WebCore::computeTextSelectionPaintStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::computedStrokeWidth const):
        (WebCore::RenderStyle::hasPositiveStrokeWidth const):
        (WebCore::RenderStyle::computedStrokeColor const):
        * rendering/style/RenderStyle.h:

2017-11-13  Gabriel Ivascu  <givascu@igalia.com>

        [GTK] Automatically adjust font size when gtk-xft-dpi changes
        https://bugs.webkit.org/show_bug.cgi?id=142673

        Reviewed by Michael Catanzaro.

        * platform/PlatformScreen.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::gtkXftDPIChangedCallback):
        (WebCore::setScreenDPIObserverHandler):
        * platform/wpe/PlatformScreenWPE.cpp:
        (WebCore::setScreenDPIObserverHandler):

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

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

        test fails on iOS (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Add tests to ensure that <source> tags are only preloaded
        when the `type`"
        https://bugs.webkit.org/show_bug.cgi?id=179231
        https://trac.webkit.org/changeset/224763

2017-11-13  Antti Koivisto  <antti@apple.com>

        Don't eliminate whitespace renderer if the previous sibling is a text renderer
        https://bugs.webkit.org/show_bug.cgi?id=179620

        Reviewed by Zalan Bujtas.

        Currently whitespace elimination code doesn't consider runs of text renderers. We should always make whitespace
        renderer if the previous renderer is a text renderer. The behavior should be the same as if those were a single
        renderer with merged text. This situation can happen easily with display:contents.

        This fixes the remaining flexbox failures in display:contents tests.

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::textRendererIsNeeded):

        We need a renderer if the previous rendere is RenderText.

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

        Implement "Service Worker Has No Pending Events" / "Update Service Worker Extended Events Set" algorithms
        https://bugs.webkit.org/show_bug.cgi?id=179618

        Reviewed by Brady Eidson.

        Implement "Service Worker Has No Pending Events" / "Update Service Worker Extended Events Set" algorithms:
        - https://w3c.github.io/ServiceWorker/#service-worker-has-no-pending-events-algorithm
        - https://w3c.github.io/ServiceWorker/#update-service-worker-extended-events-set-algorithm

        Test: http/tests/workers/service/basic-unregister-then-register-again-reuse.html

        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):
        (WebCore::ServiceWorkerThread::updateExtendedEventsSet):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::setServiceWorkerHasPendingEvents):
        (WebCore::SWServer::setServiceWorkerHasPendingEvents):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::tryActivate):
        (WebCore::SWServerJobQueue::tryClearRegistration):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::hasPendingEvents const):
        (WebCore::SWServerWorker::setHasPendingEvents):

2017-11-13  Colin Bendell  <colin@bendell.ca>

        Added mime type check to the picture source preloader to avoid downloading incompatible resources.
        https://bugs.webkit.org/show_bug.cgi?id=179231

        Reviewed by Alex Christensen.

        Test: http/tests/loading/preload-picture-type.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes): include type match state when selecting candidate imgs
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): added type attribute evaluation and matching

2017-11-13  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement getAnimations()
        https://bugs.webkit.org/show_bug.cgi?id=179535
        <rdar://problem/34932475>

        Reviewed by Simon Fraser.

        We now allow a list of animations for a document, with Document.getAnimations(), or for an
        element, with Animatable.getAnimations(), to be returned. In order to support this, we maintain
        a map on AnimationTimeline of all animations for a given element. This map is invalidated
        when an animation's timeline changes and when an animation's effect changes. Note that the
        Web Animations spec mandates that an AnimationEffect can only be a single animation's effect.

        Tests: http/wpt/wk-web-animations/interfaces/document-get-animations.html
               http/wpt/wk-web-animations/interfaces/element-get-animations.html
               http/wpt/wk-web-animations/timing-model/animation-effect-unique-relationship.html

        * CMakeLists.txt: Add Animatable.idl.
        * DerivedSources.make: Add Animatable.idl.
        * WebCore.xcodeproj/project.pbxproj: Add Animatable.idl.
        * animation/Animatable.idl: A new interface that Element implements and which currently only exposes
        getAnimations(), the animate() method will be added later.
        * animation/AnimationEffect.h: Add a new m_animation member to reference the animation using this
        effect. This relationship is required so we guarantee that an effect is associated with a single
        animation at most.
        (WebCore::AnimationEffect::animation const):
        (WebCore::AnimationEffect::setAnimation):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationWasAddedToElement): New method to notify the timeline that an
        animation registered with this timeline has been associated with a new element through its effect.
        (WebCore::AnimationTimeline::animationWasRemovedFromElement): New method to notify the timeline that an
        animation registered with this timeline has been disassociated with an element through its effect.
        (WebCore::AnimationTimeline::animationsForElement): New method returning all animations registered with
        this timeline for a given element.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::animations const): All animations registered with this timeline.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::detachFromDocument): Clear the reference between this timeline and its document.
        (WebCore::DocumentTimeline::currentTime): Protect against a null Document reference.
        (WebCore::DocumentTimeline::createDisplayRefreshMonitor const): Protect against a null Document reference.
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::setEffect): As an animation's effect changes, we need to ensure that the old
        effect no longer has an associated animation, and that the new effect is associated with this animation.
        Additionally, we update the element-to-animations map on the animation's timeline.
        (WebCore::WebAnimation::setTimeline): Update the element-to-animations map on the former and new timeline.
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Clear the relationship between this document and its timeline.
        (WebCore::Document::getAnimations): Obtain all animations associated with this document's timeline.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::getAnimations): Obtain all animations associated with this element.
        * dom/Element.h:
        * dom/Element.idl:
        * testing/Internals.cpp:

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/Animatable.idl: 
        * animation/AnimationEffect.h:
        (WebCore::AnimationEffect::animation const):
        (WebCore::AnimationEffect::setAnimation):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationWasAddedToElement):
        (WebCore::AnimationTimeline::animationWasRemovedFromElement):
        (WebCore::AnimationTimeline::animationsForElement):
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::animations const):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::detachFromDocument):
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::createDisplayRefreshMonitor const):
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setTimeline):
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::getAnimations):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::getAnimations):
        * dom/Element.h:
        * dom/Element.idl:
        * testing/Internals.cpp:

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

        Make DocumentLoader::willSendRequest asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=179549

        Reviewed by Tim Horton.

        No change in behavior, except now redirects will wait for PolicyChecker::checkNavigationPolicy's completion handler.
        Before, they would just continue in DocumentLoader::redirectReceived hoping the client had responded to 
        decidePolicyForNavigationAction synchronously or that the client would have been ok with continuing.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/PolicyChecker.h:

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

        [Attachment Support] Implement SPI for clients to request data for a given attachment
        https://bugs.webkit.org/show_bug.cgi?id=179586
        <rdar://problem/35355720>

        Reviewed by Darin Adler.

        Adds support in WebCore for fetching data for a given attachment element. See per-method comments below for
        more detail.

        Test coverage by augmenting existing API tests in WKAttachmentTests, and adding 3 new tests.

        * dom/Document.cpp:
        (WebCore::Document::didInsertAttachmentElement):
        (WebCore::Document::didRemoveAttachmentElement):
        (WebCore::Document::attachmentForIdentifier const):

        Fetches an attachment element matching the given identifier. Using the identifier => attachment element map here
        allows us to avoid the cost of walking the DOM in search for HTMLAttachmentElements every time data is
        requested.

        * dom/Document.h:

        Add a map of attachment identifier => HTMLAttachmentElement in Document. This map is updated when attachment
        elements are connected to or disconnected from the document. Additionally, delegate attachment insertion and
        removal out to the Editor if possible.

        * editing/Editor.cpp:
        (WebCore::Editor::insertAttachmentFromFile):
        * editing/mac/WebContentReaderMac.mm:
        (WebCore::WebContentReader::readFilenames):
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):

        Tweak existing logic that transfers file-backed File objects when deserializing HTMLAttachmentElements from
        markup to handle the case where the attachment element is not file-backed. In this case, we construct a new
        File object using the deserializing constructor. To do this, we use the attachment element's blob URL to make
        sure that the new File references an existing blob matching that URL.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::AttachmentDataReader::create):
        (WebCore::AttachmentDataReader::AttachmentDataReader):

        Introduce AttachmentDataReader, a helper class local to HTMLAttachmentElement that is responsible for loading
        an attachment element's file and invoking a given callback when loading has succeeded or failed.
        Each AttachmentDataReader is retained exclusively by its HTMLAttachmentElement, through the
        HTMLAttachmentElement's vector of unique_ptrs to AttachmentDataReaders.

        (WebCore::HTMLAttachmentElement::~HTMLAttachmentElement):
        (WebCore::HTMLAttachmentElement::blobURL const):

        Add a convenience getter for the blob URL of the attachment's backing File object.

        (WebCore::HTMLAttachmentElement::setFile):

        When setting an attachment element's file, set the blob URL attribute as well to the blob URL. Also, tweak this
        to take a RefPtr<File>&& instead of a raw File*.

        (WebCore::HTMLAttachmentElement::insertedIntoAncestor):
        (WebCore::HTMLAttachmentElement::removedFromAncestor):

        Instead of delegating attachment insertion and removal to the Editor, just call out to the Document, which will
        now call out to the Editor.

        (WebCore::HTMLAttachmentElement::attachmentPath const):

        Add a convenience getter for the attachment path attribute.

        (WebCore::HTMLAttachmentElement::requestData):
        (WebCore::HTMLAttachmentElement::destroyReader):

        Called when a AttachmentDataReader has completed (either with success or failure), and is ready to be removed
        from the attachment element's list of active data readers.

        (WebCore::AttachmentDataReader::~AttachmentDataReader):
        (WebCore::AttachmentDataReader::didFinishLoading):
        (WebCore::AttachmentDataReader::didFail):
        (WebCore::AttachmentDataReader::invokeCallbackAndFinishReading):

        When the reader is done loading, or has failed, or is about to be destroyed, fire the callback with loaded data
        (if any) and cancel the FileReaderLoader.

        * html/HTMLAttachmentElement.h:
        * html/HTMLAttributeNames.in:

        Adds a new "webkitattachmentbloburl" attribute that keeps track of an attachment element's file's blob URL. This
        is used to ensure that information about an attachment element's file is not lost between certain editing
        operations (for instance, deleting a line break) that involve serializing and then deserializing markup into
        DocumentFragments to then insert.

2017-11-13  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Remove GraphicsContext::mustUseShadowBlur()
        https://bugs.webkit.org/show_bug.cgi?id=179612

        Reviewed by Michael Catanzaro.

        Remove the Cairo-specific mustUseShadowBlur() method on the
        GraphicsContext class. It can now be implemented as a static function
        in CairoOperations, using only a PlatformContextCairo object and a
        const reference to the relevant GraphicsContextState.

        No new tests -- no change in behavior.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::mustUseShadowBlur const): Deleted.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::mustUseShadowBlur):
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::drawGlyphs):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole):

2017-11-13  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move state change operations from GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179610

        Reviewed by Carlos Garcia Campos.

        Move operations that perform Cairo state changes to the CairoOperations
        file. This enforces only using the PlatformContextCairo object to
        achieve the state change, leveraging the cairo_t and ShadowBlur objects
        that are owned by PlatformContextCairo.

        Along with state modification operations, various state query operations
        are also placed under the Cairo::State namespace, again limited to the
        PlatformContextCairo object.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::State::setStrokeThickness):
        (WebCore::Cairo::State::setGlobalAlpha):
        (WebCore::Cairo::State::setCompositeOperation):
        (WebCore::Cairo::State::setShouldAntialias):
        (WebCore::Cairo::State::setImageInterpolationQuality):
        (WebCore::Cairo::State::setCTM):
        (WebCore::Cairo::State::getCTM):
        (WebCore::Cairo::State::setShadowValues):
        (WebCore::Cairo::State::clearShadow):
        (WebCore::Cairo::State::getClipBounds):
        (WebCore::Cairo::State::roundToDevicePixels):
        (WebCore::Cairo::State::isAcceleratedContext):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getCTM const):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::clipBounds const):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::setPlatformAlpha):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality):
        (WebCore::GraphicsContext::isAcceleratedContext const):

2017-11-13  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move glyph drawing operations from FontCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179609

        Reviewed by Carlos Garcia Campos.

        Move operations that perform glyph drawing to the CairoOperations file.
        This limits operations to only work with a PlatformContextCairo object,
        along with other required parameters, and will help with future work
        that will rely on isolated Cairo-specific code.

        Along with moving the drawGlyphs() code, the helper functions are moved
        and adjusted to work specifically on a PlatformContextCairo object and
        a const GraphicsContextState reference, only using a GraphicsContext
        reference for any required shadowed glyph drawing.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawGlyphsToContext):
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::drawGlyphs):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::drawGlyphsToContext): Deleted.
        (WebCore::drawGlyphsShadow): Deleted.

2017-11-13  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move focus ring drawing operations from GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179603

        Reviewed by Carlos Garcia Campos.

        Move operations that perform focus ring drawing to the CairoOperations
        file. This limits operations to only work with a PlatformContextCairo
        object, along with other required parameters, and will help with future
        work in this area.

        The Cairo::State namespace is introduced, with the setStrokeStyle()
        function placed there. The namespace will be used for operations that
        only change an aspect of the Cairo state. More functions will be added
        soon, and existing line and miter operations will likely move there as
        well.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::adjustFocusRingColor):
        (WebCore::Cairo::adjustFocusRingLineWidth):
        (WebCore::Cairo::focusRingStrokeStyle):
        (WebCore::Cairo::State::setStrokeStyle):
        (WebCore::Cairo::drawFocusRing):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::adjustFocusRingColor): Deleted.
        (WebCore::adjustFocusRingLineWidth): Deleted.
        (WebCore::focusRingStrokeStyle): Deleted.

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

        Unreviewed. Fix debug build with Touch Events enabled after r224740.

        * dom/EventContext.cpp:
        (WebCore::TouchEventContext::checkReachability const):

2017-11-12  Maciej Stachowiak  <mjs@apple.com>

        Remove support for UTF-32 variant text encodings
        https://bugs.webkit.org/show_bug.cgi?id=179435

        Reviewed by Darin Adler.

        Non-support for these encodings is covered by WPT tests.

        * platform/text/TextCodecICU.cpp: Remove UTF-32 variants.
        Technically, we should also ensure that UTF-32LE with a BOM
        gets sniffed as UTF-16LE instead of windows-1252. Chrome
        does this but Firefox doesn't yet. WPT tests cover it, and
        we can fix it later.

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

        [Cairo] Move rectangle and path filling, stroking, clearing operations in GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179599

        Reviewed by Carlos Garcia Campos.

        Move operations that perform filling, stroking and clearing for
        specified rectangles and paths to the CairoOperations file. This limits
        operations to only work with a PlatformContextCairo object, along with
        any required parameter, and will help with future work in this area.

        Helper functions are copied along for the time being, but will later be
        removed from the GraphicsContextCairo implementation file.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::fillRectWithColor):
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::fillCurrentCairoPath):
        (WebCore::Cairo::fillRect):
        (WebCore::Cairo::fillRoundedRect):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::fillPath):
        (WebCore::Cairo::strokeRect):
        (WebCore::Cairo::strokePath):
        (WebCore::Cairo::clearRect):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::fill):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):

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

        [Cairo] Move state stack, CTM, transparency layer operations in GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179598

        Reviewed by Carlos Garcia Campos.

        Move operations that save and restore state, adjust CTM and modify the
        transparency layer stack to the CairoOperations file. This limits
        operations to only work with a PlatformContextCairo object, along with
        any required parameter, and will help with future work in this area.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::save):
        (WebCore::Cairo::restore):
        (WebCore::Cairo::translate):
        (WebCore::Cairo::rotate):
        (WebCore::Cairo::scale):
        (WebCore::Cairo::concatCTM):
        (WebCore::Cairo::beginTransparencyLayer):
        (WebCore::Cairo::endTransparencyLayer):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):

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

        [Cairo] Move line, miter operations in GraphicsContextCairo to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=179597

        Reviewed by Carlos Garcia Campos.

        Move operations that adjust line cap, line dash, line join and miter
        limit to the CairoOperations file. This limits operations to only work
        with a PlatformContextCairo object, along with any required parameter,
        and will help with future work in this area.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::setLineCap):
        (WebCore::Cairo::setLineDash):
        (WebCore::Cairo::setLineJoin):
        (WebCore::Cairo::setMiterLimit):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::isDashArrayAllZero): Deleted.

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

        [Service Workers] Activate algorithm says terminate the active worker if it exists
        https://bugs.webkit.org/show_bug.cgi?id=179559

        Reviewed by Darin Adler.

        Activate algorithm says terminate the active worker if it exists:
        - https://w3c.github.io/ServiceWorker/#activation-algorithm (Step 2.1)

        No new tests, no-op for now as the terminate() function is not implemented
        yet.

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

2017-11-12  Darin Adler  <darin@apple.com>

        More is<> and downcast<>, less static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=179600

        Reviewed by Chris Dumez.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract): Use downcast instead of static_cast.
        (WebCore::FetchBody::bodyAsFormData const): Ditto.
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putOrAdd): Ditto.
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged): Ditto.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::libWebRTCProvider): Ditto.

        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaTimeDisplay::stringValue const): Got rid of local
        variable and used std::abs instead of fabsf. Did not use downcast here because
        it doesn't exist for this class.

        * bindings/js/JSEventTargetCustom.h:
        (WebCore::IDLOperation<JSEventTarget>::call): Use downcast instead of toDOMWindow.
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::dispatchEvent): Ditto.

        * dom/Element.h: Added is/downcast for EventTarget.

        * dom/EventContext.cpp:
        (WebCore::TouchEventContext::checkReachability const): Use downcast instead
        of toNode.
        * dom/EventContext.h:
        (WebCore::EventContext::isUnreachableNode const): Ditto.
        * dom/EventPath.cpp:
        (WebCore::shouldEventCrossShadowBoundary): Ditto.
        (WebCore::EventPath::setRelatedTarget): Ditto.
        (WebCore::EventPath::retargetTouch): Ditto.
        (WebCore::EventPath::EventPath): Ditto.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toNode): Deleted.
        (WebCore::EventTarget::isNode const): Added.
        (WebCore::EventTarget::toDOMWindow): Deleted.
        (WebCore::EventTarget::isMessagePort const): Deleted. This was not used.
        (WebCore::EventTarget::addEventListener): Use downcast instead of toDOMWindow
        and toNode.
        * dom/EventTarget.h: Updated for the above.

        * dom/MessagePort.h: Deleted unused isMessagePort.

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::toElement const): Use downcast instead of toNode.
        Also refactored to make function a little smaller.
        (WebCore::MouseEvent::fromElement const): Ditto.

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition): Use downcast
        instead of toNode.

        * dom/Node.cpp:
        (WebCore::Node::isNode const): Added.
        (WebCore::Node::toNode): Deleted.
        * dom/Node.h: Updated for the above. Also added SPECIALIZE_TYPE_TRAITS
        so we can do is/downcast.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::enqueueEvent): Use is instead of toNode.
        (WebCore::ScopedEventQueue::dispatchEvent const): Use downcast instead of toNode.

        * dom/make_names.pl:
        (printTypeHelpers): Added support for is/downcast from EventTarget.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand): Use is/downcast instead of toNode.
        * editing/EditorCommand.cpp:
        (WebCore::targetFrame): Ditto.
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition): Ditto.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContextWebGL): Use downcast instead of
        static_cast.
        (WebCore::HTMLCanvasElement::getContextWebGL): Ditto.
        (WebCore::HTMLCanvasElement::getImageData): Ditto.

        * html/HTMLElement.h: Added support for is/downcast from EventTarget.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::handleLocalEvents): Use is instead of toNode.
        (WebCore::submitElementFromEvent): Deleted. Was a duplicate of findSubmitButton.
        (WebCore::HTMLFormElement::prepareForSubmission): Rewrote code that calls
        submitElementFromEvent to call findSubmitButton instead. Also don't bother
        finding the submit button unless we are going to validate, since all we do
        after finding it is reconsider whether we should validate.
        (WebCore::HTMLFormElement::findSubmitButton const): Rewrote to use is,
        downcast, and lineageOfType rather than a handwritten loop and toNode.
        Relies on the fact that the target is an element, never a text node.

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler): Use is and downcast instead
        of toNode.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay const): Changed argument
        type to EventTarget so we can do the type checking and casting here instead of at
        each of the callers.
        * html/HTMLPlugInImageElement.h: Updated for the above.

        * html/HTMLSummaryElement.cpp:
        (WebCore::isClickableControl): Changed argument type to EventTarget so we can do
        the type checking and casting here instead of at each of the callers.
        (WebCore::HTMLSummaryElement::defaultEventHandler): Removed call to toNode.

        * html/HTMLTextFormControlElement.h: Added support for is/downcast from EventTarget.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler): Use is/downcast instead of toNode.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent): Ditto.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): Ditto.
        Also use get instead of find/end.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::containsRelatedTarget): Use is/downcast instead of toNode.
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent): Ditto.
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didAddEventListener): Ditto.
        (WebCore::InspectorDOMAgent::willRemoveEventListener): Ditto.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::maybeCreateContextMenu): Ditto.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::toDOMWindow): Deleted.
        * page/DOMWindow.h: Updated for the above. Also added SPECIALIZE_TYPE_TRAITS
        so we can do is/downcast.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Use is/downcast instead of toNode.

        * platform/graphics/WidthCache.h:
        (WebCore::WidthCache::add): Removed unneeded static_cast; length already returns unsigned.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent): Removed unneeded toNode now that
        partOfSnapshotOverlay takes an EventTarget.

2017-11-12  Gabriel Ivascu  <givascu@igalia.com>

        [GTK] Add functionality to handle font sizes in points
        https://bugs.webkit.org/show_bug.cgi?id=179285

        Reviewed by Carlos Garcia Campos and Michael Catanzaro.

        * platform/PlatformScreen.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDPI):
        * platform/wpe/PlatformScreenWPE.cpp:
        (WebCore::screenDPI):

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

        [WebCore] Implement import.meta.url
        https://bugs.webkit.org/show_bug.cgi?id=178672

        Reviewed by Darin Adler.

        This patch implements `import.meta.url` field, which holds a base url
        of the currently executing module[1].

        In the case of embedded modules, this field becomes the URL of the
        embedding HTML file. In the case of imported modules, the URL becomes
        the URL of the executed module script file.

        [1]: https://github.com/whatwg/html/pull/3141

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderCreateImportMetaProperties):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::moduleURL):
        (WebCore::ScriptModuleLoader::evaluate):
        (WebCore::ScriptModuleLoader::createImportMetaProperties):
        * bindings/js/ScriptModuleLoader.h:

2017-11-11  Dan Bernstein  <mitz@apple.com>

        [Xcode] WebCore generates unified sources during installhdrs
        https://bugs.webkit.org/show_bug.cgi?id=179578

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj: Use GenerateUnifiedSources.xcconfig, which sets
          INSTALLHDRS_SCRIPT_PHASE to NO, for the Generate Unified Sources target.

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

        Remove redundant platform-specific implementations of Image::drawPattern()
        https://bugs.webkit.org/show_bug.cgi?id=179580

        Reviewed by Sam Weinig.

        Platform-specific Image files had implementations of Image::drawPattern() but they
        were all effectively identical, so put a single implementation into Image.cpp.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/SourcesCairo.txt:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cairo/ImageCairo.cpp: Removed.
        * platform/graphics/cg/ImageCG.cpp: Removed.
        * platform/graphics/win/ImageDirect2D.cpp:
        (WebCore::Image::drawPattern): Deleted.

2017-11-11  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: show detailed status during canvas recording
        https://bugs.webkit.org/show_bug.cgi?id=178185
        <rdar://problem/34939862>

        Reviewed by Brian Burg.

        Updated existing tests to assert that the correct number of progress events are fired.

        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        After each recorded frame, fire a progress event with the recorded frames as data. This will
        release the frames from the associated InspectorCanvas, meaning that the frames must be
        aggregated in the frontend before a Recording can be created.

        The protocol is designed with arrays so that if we decide to add throttling (e.g. one event
        per second) we are able to do so without modifying the protocol.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::hasRecordingData const):
        (WebCore::InspectorCanvas::currentFrameHasData const):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::finalizeFrame):
        (WebCore::InspectorCanvas::markCurrentFrameIncomplete):
        Add additional checks that the list of recorded frames is not nullptr when finalizing or
        marking as incomplete.

2017-11-11  Helmut Grohne  <helmut@subdivi.de>

        [GTK] PlatformGTK.cmake: use the PKG_CONFIG_EXECUTABLE variable
        https://bugs.webkit.org/show_bug.cgi?id=179547

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake: Use PKG_CONFIG_EXECUTABLE instead of
        hardcoding the executable name.

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

        [Service Workers] Registration promise should be rejected when the service worker fails to start
        https://bugs.webkit.org/show_bug.cgi?id=179566

        Reviewed by Brady Eidson.

        Registration promise should be rejected when the service worker fails to start.

        Though our code intended to do this, there were several issues:
        - Our code failed to properly detect when the script failed to evaluate. This is
          because it relied on the exception message being non-null but it was always
          null when same origin due to a bug.
        - Our scriptContextFailedToStart() handler failed to rejected the promise
          and finish the job as per:
          - https://w3c.github.io/ServiceWorker/#update-algorithm (step 9.7)

        Test: http/tests/workers/service/worker-fails-to-start.html

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):

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

        Unreviewed Win Debug build fix; add FourCC.cpp to the cmake source list for Windows.

        * PlatformWin.cmake:

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

        [CG] PDF document cached image is regenerated every time the destination rectangle changes
        https://bugs.webkit.org/show_bug.cgi?id=179516

        Reviewed by Tim Horton.

        The PDF document cached image was regenerated if m_cachedImageRect didn't
        contain the dirty rectangle. When moving the image, its new rectangle is
        invalidated. This will set a new dirty rectangle outside m_cachedImageRect
        which may not be fully inside m_cachedImageRect.

        The PDF document cached image should be reused if we still draw the same
        part of the image (srcRet did not change) and we use the same zooming factor        
        (dstSize did not change).

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::cacheParametersMatch const): Remove a check
        that was added mainly to force recalculating m_cachedImageRect when the
        dirty rectangle changes. 

        (WebCore::PDFDocumentImage::updateCachedImageIfNeeded): Recalculate
        m_cachedImageRect every time this function is called regardless the cached
        image will be regenerated or not.

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

        Compositing layers in UIWebView are often missing content after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=179564
        rdar://problem/33885639

        Reviewed by Tim Horton.
        
        When dropping backing store for layers outside the viewport, we rely on a compositing
        layer flush to compute layer visibility and bring the backing store back when necessary.

        In UIWebView, we have a mechanism to trigger flushing on user scrolling but it only triggers
        when there are tiled layers. Remove that condition so it triggers always, now that
        backing store availability also depends on this.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportOffsetChanged):
        (WebCore::anyFrameHasTiledLayers): Deleted.

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

        Contents of composited overflow-scroll are missing when newly added
        https://bugs.webkit.org/show_bug.cgi?id=179556
        rdar://problem/20368294

        Reviewed by Tim Horton.

        When content is appended to an oveflow:scroll, we do a subtree layout. That triggered
        a compositing code path that failed to call updateAfterDescendants() which is where
        we compute whether we can be a simple composited layer without backing store. Fix to
        call that after the updateGeometry() call, as we do elsewhere.

        Test: compositing/backing/overflow-gains-content.html

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

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

        Remove the 'CompositingChildrenOnly' flag which was always on
        https://bugs.webkit.org/show_bug.cgi?id=179546

        Reviewed by Antoine Quint.

        All calls to updateAfterLayout() passed the CompositingChildrenOnly flag, so all calls
        to updateCompositingDescendantGeometry() had compositedChildrenOnly=true, so remove
        these flags.

        Also use an OptionSet<>.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::contentChanged):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        * rendering/RenderLayerCompositor.h:

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

        Remove dead code from ServiceWorkerRegistration
        https://bugs.webkit.org/show_bug.cgi?id=179555

        Reviewed by Ryosuke Niwa.

        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::setInstallingWorker): Deleted.
        (WebCore::ServiceWorkerRegistration::setWaitingWorker): Deleted.
        (WebCore::ServiceWorkerRegistration::setActiveWorker): Deleted.
        * workers/service/ServiceWorkerRegistration.h:

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

        [Service Workers] Implement better support for "Clear Registration" algorithm
        https://bugs.webkit.org/show_bug.cgi?id=179441

        Reviewed by Brady Eidson.

        Implement better support for "Clear Registration" algorithm as per:
        - https://w3c.github.io/ServiceWorker/#clear-registration-algorithm

        In particular, we now properly clear the service workers on the ServiceWorkerRegistration
        object and we properly update its service workers' state to "redundant".

        Test: http/tests/workers/service/registration-clear-redundant-worker.html

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

2017-11-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224705.

        Introduced a LayoutTest crash on WK1.

        Reverted changeset:

        "[Web Animations] Implement getAnimations()"
        https://bugs.webkit.org/show_bug.cgi?id=179535
        https://trac.webkit.org/changeset/224705

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

        Add a FairPlay Streaming based CDM for Modern EME
        https://bugs.webkit.org/show_bug.cgi?id=179499
        <rdar://problem/35445033>

        Reviewed by Eric Carlson.

        Tests: platform/mac/media/encrypted-media/fps-createMediaKeys.html
               platform/mac/media/encrypted-media/fps-requestMediaKeySystemAccess.html

        Add new CDMFairPlayStreaming and CDMInstanceFairPlayStreamingAVFObjC platform classes which implement
        the basics of FairPlay Streaming support in Modern EME.

        Drive-by fixes:

        - Add a != operator to FourCC
        - Add a virtual setStorageDirectory() method to CDMInstance (and default implementations to CDMClearKey
          and MockCDM)
        - Move ISOVTTCue into the platform/graphics/iso directory and update all the places where it is called.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::mediaKeysStorageDirectory const):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/encryptedmedia/CDMFactory.cpp:
        * platform/encryptedmedia/CDMInstance.h:
        * platform/encryptedmedia/CDMRestrictions.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::setStorageDirectory):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/FourCC.h:
        (WebCore::FourCC::operator!= const):
        * platform/graphics/iso/ISOBox.cpp: Added.
        (WebCore::ISOBox::peekBox):
        (WebCore::ISOBox::read):
        (WebCore::ISOBox::parse):
        (WebCore::ISOFullBox::parse):
        * platform/graphics/iso/ISOBox.h: Added.
        (WebCore::ISOBox::minimumBoxSize):
        (WebCore::ISOBox::size const):
        (WebCore::ISOBox::boxType const):
        (WebCore::ISOBox::extendedType const):
        (WebCore::ISOBox::checkedRead):
        (WebCore::ISOFullBox::version const):
        (WebCore::ISOFullBox::flags const):
        * platform/graphics/iso/ISOOriginalFormatBox.cpp: Added.
        (WebCore::ISOOriginalFormatBox::parse):
        * platform/graphics/iso/ISOOriginalFormatBox.h: Added.
        (WebCore::ISOOriginalFormatBox::boxTypeName):
        (WebCore::ISOOriginalFormatBox::dataFormat const):
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.cpp: Added.
        (WebCore::ISOProtectionSchemeInfoBox::parse):
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.h: Added.
        (WebCore::ISOProtectionSchemeInfoBox::boxTypeName):
        (WebCore::ISOProtectionSchemeInfoBox::schemeTypeBox const):
        (WebCore::ISOProtectionSchemeInfoBox::schemeInformationBox const):
        * platform/graphics/iso/ISOSchemeInformationBox.cpp: Added.
        (WebCore::ISOSchemeInformationBox::parse):
        * platform/graphics/iso/ISOSchemeInformationBox.h: Added.
        (WebCore::ISOSchemeInformationBox::boxTypeName):
        (WebCore::ISOSchemeInformationBox::schemeSpecificData const):
        * platform/graphics/iso/ISOSchemeTypeBox.cpp: Added.
        (WebCore::ISOSchemeTypeBox::parse):
        * platform/graphics/iso/ISOSchemeTypeBox.h: Added.
        (WebCore::ISOSchemeTypeBox::boxTypeName):
        (WebCore::ISOSchemeTypeBox::schemeType const):
        (WebCore::ISOSchemeTypeBox::schemeVersion const):
        * platform/graphics/iso/ISOTrackEncryptionBox.cpp: Added.
        (WebCore::ISOTrackEncryptionBox::parse):
        * platform/graphics/iso/ISOTrackEncryptionBox.h: Added.
        (WebCore::ISOTrackEncryptionBox::boxTypeName):
        (WebCore::ISOTrackEncryptionBox::defaultCryptByteBlock const):
        (WebCore::ISOTrackEncryptionBox::defaultSkipByteBlock const):
        (WebCore::ISOTrackEncryptionBox::defaultIsProtected const):
        (WebCore::ISOTrackEncryptionBox::defaultPerSampleIVSize const):
        (WebCore::ISOTrackEncryptionBox::defaultKID const):
        (WebCore::ISOTrackEncryptionBox::defaultConstantIV const):
        * platform/graphics/iso/ISOVTTCue.cpp: Added.
        (WebCore::ISOStringBox::contents):
        (WebCore::vttIdBoxType):
        (WebCore::vttSettingsBoxType):
        (WebCore::vttPayloadBoxType):
        (WebCore::vttCurrentTimeBoxType):
        (WebCore::vttCueSourceIDBoxType):
        (WebCore::ISOWebVTTCue::ISOWebVTTCue):
        (WebCore::ISOWebVTTCue::parse):
        * platform/graphics/iso/ISOVTTCue.h: Renamed from Source/WebCore/platform/graphics/ISOVTTCue.h.
        (WebCore::ISOWebVTTCue::boxTypeName):
        (WebCore::ISOWebVTTCue::presentationTime const):
        (WebCore::ISOWebVTTCue::duration const):
        (WebCore::ISOWebVTTCue::sourceID const):
        (WebCore::ISOWebVTTCue::id const):
        (WebCore::ISOWebVTTCue::originalStartTime const):
        (WebCore::ISOWebVTTCue::settings const):
        (WebCore::ISOWebVTTCue::cueText const):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp: Added.
        (WebCore::extractSinfData):
        (WebCore::extractSchemeAndKeyIdFromSinf):
        (WebCore::extractKeyIDsSinf):
        (WebCore::sanitizeSinf):
        (WebCore::CDMFactory::platformRegisterFactories):
        (WebCore::CDMFactoryFairPlayStreaming::singleton):
        (WebCore::CDMFactoryFairPlayStreaming::createCDM):
        (WebCore::CDMFactoryFairPlayStreaming::supportsKeySystem):
        (WebCore::CDMPrivateFairPlayStreaming::supportsInitDataType const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsConfiguration const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsConfigurationWithRestrictions const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsSessionTypeWithConfiguration const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsRobustness const):
        (WebCore::CDMPrivateFairPlayStreaming::distinctiveIdentifiersRequirement const):
        (WebCore::CDMPrivateFairPlayStreaming::persistentStateRequirement const):
        (WebCore::CDMPrivateFairPlayStreaming::distinctiveIdentifiersAreUniquePerOriginAndClearable const):
        (WebCore::CDMPrivateFairPlayStreaming::createInstance):
        (WebCore::CDMPrivateFairPlayStreaming::loadAndInitialize):
        (WebCore::CDMPrivateFairPlayStreaming::supportsServerCertificates const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsSessions const):
        (WebCore::CDMPrivateFairPlayStreaming::supportsInitData const):
        (WebCore::CDMPrivateFairPlayStreaming::sanitizeResponse const):
        (WebCore::CDMPrivateFairPlayStreaming::sanitizeSessionId const):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h: Added.
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm: Added.
        (-[WebCoreFPSContentKeySessionDelegate initWithParent:]):
        (-[WebCoreFPSContentKeySessionDelegate invalidate]):
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:didProvideContentKeyRequest:]):
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:didProvideRenewingContentKeyRequest:]):
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:didProvidePersistableContentKeyRequest:]):
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:didUpdatePersistableContentKey:forContentKeyIdentifier:]):
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:contentKeyRequest:didFailWithError:]):
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:shouldRetryContentKeyRequest:reason:]):
        (-[WebCoreFPSContentKeySessionDelegate contentKeySessionContentProtectionSessionIdentifierDidChange:]):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::CDMInstanceFairPlayStreamingAVFObjC):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::~CDMInstanceFairPlayStreamingAVFObjC):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistableState):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::supportsPersistentKeys):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::mimeTypeIsPlayable):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::initializeWithConfiguration):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setDistinctiveIdentifiersAllowed):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setPersistentStateAllowed):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setServerCertificate):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setStorageDirectory):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::isLicenseTypeSupported const):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::requestLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::loadSession):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::closeSession):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::storeRecordOfKeyUsage):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::keySystem const):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRenewingRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvidePersistableRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didFailToProvideRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::shouldRetryRequestForReason):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionIdentifierChanged):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples):
        (WebCore::InbandTextTrackPrivateAVF::readNativeSampleBuffer):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::setStorageDirectory):
        * testing/MockCDMFactory.h:

2017-11-10  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement getAnimations()
        https://bugs.webkit.org/show_bug.cgi?id=179535
        <rdar://problem/34932475>

        Reviewed by Simon Fraser.

        We now allow a list of animations for a document, with Document.getAnimations(), or for an
        element, with Animatable.getAnimations(), to be returned. In order to support this, we maintain
        a map on AnimationTimeline of all animations for a given element. This map is invalidated
        when an animation's timeline changes and when an animation's effect changes. Note that the
        Web Animations spec mandates that an AnimationEffect can only be a single animation's effect.

        Additionally, we ensure that the Document-to-DocumentTimeline relationship is cleared when
        is being prepared for teardown to avoid a ref-cycle.

        Tests: http/wpt/wk-web-animations/interfaces/document-get-animations.html
               http/wpt/wk-web-animations/interfaces/element-get-animations.html
               http/wpt/wk-web-animations/timing-model/animation-effect-unique-relationship.html

        * CMakeLists.txt: Add Animatable.idl.
        * DerivedSources.make: Add Animatable.idl.
        * WebCore.xcodeproj/project.pbxproj: Add Animatable.idl.
        * animation/Animatable.idl: A new interface that Element implements and which currently only exposes
        getAnimations(), the animate() method will be added later.
        * animation/AnimationEffect.h: Add a new m_animation member to reference the animation using this
        effect. This relationship is required so we guarantee that an effect is associated with a single
        animation at most.
        (WebCore::AnimationEffect::animation const):
        (WebCore::AnimationEffect::setAnimation):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationWasAddedToElement): New method to notify the timeline that an
        animation registered with this timeline has been associated with a new element through its effect.
        (WebCore::AnimationTimeline::animationWasRemovedFromElement): New method to notify the timeline that an
        animation registered with this timeline has been disassociated with an element through its effect.
        (WebCore::AnimationTimeline::animationsForElement): New method returning all animations registered with
        this timeline for a given element.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::animations const): All animations registered with this timeline.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::detachFromDocument): Clear the reference between this timeline and its document.
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::setEffect): As an animation's effect changes, we need to ensure that the old
        effect no longer has an associated animation, and that the new effect is associated with this animation.
        Additionally, we update the element-to-animations map on the animation's timeline.
        (WebCore::WebAnimation::setTimeline): Update the element-to-animations map on the former and new timeline.
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Clear the relationship between this document and its timeline.
        (WebCore::Document::getAnimations): Obtain all animations associated with this document's timeline.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::getAnimations): Obtain all animations associated with this element.
        * dom/Element.h:
        * dom/Element.idl:
        * testing/Internals.cpp:

2017-11-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make http status codes be "integer" instead of "number" in protocol
        https://bugs.webkit.org/show_bug.cgi?id=179543

        Reviewed by Antoine Quint.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        No need for the temporary or type change.

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

        Unreviewed, rolling out r224602 and r224697.
        https://bugs.webkit.org/show_bug.cgi?id=179545

        The LayoutTest for this change is flaky. (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "Add tests to ensure that <source> tags are only preloaded
        when the `type`"
        https://bugs.webkit.org/show_bug.cgi?id=179231
        https://trac.webkit.org/changeset/224602

        "Fix race conditions with setBackingScaleFactor, page refresh
        and preloader"
        https://bugs.webkit.org/show_bug.cgi?id=179488
        https://trac.webkit.org/changeset/224697

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

        [Service Workers] Implement "Try Activate" / "Activate" algorithms
        https://bugs.webkit.org/show_bug.cgi?id=179436

        Reviewed by Brady Eidson.

        Implement proper "Try Activate" / "Activate" algorithms as per:
        - https://w3c.github.io/ServiceWorker/#try-activate-algorithm
        - https://w3c.github.io/ServiceWorker/#activation-algorithm

        Test: http/tests/workers/service/basic-activate-event.html

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::fireActivateEvent):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::fireActivateEvent):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::didFinishActivation):
        (WebCore::SWServer::didFinishActivation):
        (WebCore::SWServer::fireActivateEvent):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::didFinishInstall):
        (WebCore::SWServerJobQueue::tryActivate):
        (WebCore::SWServerJobQueue::activate):
        (WebCore::SWServerJobQueue::didFinishActivation):
        * workers/service/server/SWServerJobQueue.h:

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

        Fix debug build after r224700
        https://bugs.webkit.org/show_bug.cgi?id=179460

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::addToTextEncodingNameMap):

2017-11-10  Maciej Stachowiak  <mjs@apple.com>

        Remove TEC decoders that duplicate ICU decoders
        https://bugs.webkit.org/show_bug.cgi?id=179460

        Reviewed by Darin Adler.

        Test: fast/encoding/duplicate-tec-encodings.html

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::checkExistingName): Deleted.
        (WebCore::addToTextEncodingNameMap): Move the check from checkExistingName here,
        and make it an ASSERT, since we should now be guaranteed no duplicate encodings.
        * platform/text/mac/mac-encodings.txt: Remove encodings that duplicate ones we
        implement with ICU.
        * platform/text/TextCodecICU.cpp: Add some extra encoding aliases that only TEC 
        knew about.

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

        Make CachedResource::redirectReceived asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=179503

        Reviewed by Antti Koivisto.

        There were a few loops where we called redirectReceived many times in a row,
        and these are replaced with a completion handler that recursively calls the next
        redirectReceived or the code after the loop.

        No change in behavior.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setLastCheckedRequest):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        * loader/DocumentThreadableLoader.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::redirectReceived):
        * loader/MediaResourceLoader.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::iterate):
        (WebCore::CachedRawResource::didAddClient):
        (WebCore::CachedRawResource::redirectReceived):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::redirectReceived):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::redirectReceived):
        * loader/cache/CachedResource.h:
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::redirectReceived):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):

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

        Ignore HSTS for partitioned, cross-origin subresource requests
        https://bugs.webkit.org/show_bug.cgi?id=178993
        <rdar://problem/34962462>

        Reviewed by Brent Fulgham.

        No new tests. HSTS is not supported in layout tests.
        Tested manually.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary):

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

        REGRESSION(r224267): WebViews scheduled with custom run loop modes don't load
        https://bugs.webkit.org/show_bug.cgi?id=179515
        <rdar://problem/35445245>

        Reviewed by Andy Estes.

        Covered by a new API test which would have timed out without this change.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (schedulePairHashSet):
        Collect run loop modes from the NetworkingContext similarly to how we did before https://trac.webkit.org/changeset/224267/webkit#file40
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

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

        Simplify SWServerRegistration::forEachConnection()
        https://bugs.webkit.org/show_bug.cgi?id=179523

        Reviewed by Alex Christensen.

        Simplify SWServerRegistration::forEachConnection() by dropping the hack
        introduced in r224590 to work around the fact that we had a race
        between Storage & WebProcess processes during registration. After
        r224652, we do an IPC handshake between those 2 processes after
        resolving the registration promise so we know for sure the
        ServiceWorkerRegistration object has registered itself with the
        Storage process before we keep going with the install steps.

        No new tests, no expected Web-facing behavior change.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::install):
        (WebCore::SWServerJobQueue::didResolveRegistrationPromise):
        (WebCore::SWServerJobQueue::didFinishInstall):
        (WebCore::SWServerJobQueue::runRegisterJob):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::updateRegistrationState):
        (WebCore::SWServerRegistration::updateWorkerState):
        (WebCore::SWServerRegistration::fireUpdateFoundEvent):
        (WebCore::SWServerRegistration::forEachConnection):
        * workers/service/server/SWServerRegistration.h:

2017-11-10  Ms2ger  <Ms2ger@igalia.com>

        Allow XHR to override the User-Agent header.
        https://bugs.webkit.org/show_bug.cgi?id=179527

        Reviewed by Chris Dumez.

        Also rename FrameLoader::applyUserAgent to FrameLoader::applyUserAgentIfNeeded
        for clarity.

        Test: imported/w3c/web-platform-tests/XMLHttpRequest/setrequestheader-header-allowed.htm

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::applyUserAgentIfNeeded):
        * loader/FrameLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::willSendRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateReferrerOriginAndUserAgentHeaders):

2017-11-10  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Use fallible allocation in ImageBuffer::ImageBuffer().
        https://bugs.webkit.org/show_bug.cgi?id=179051

        Reviewed by Michael Catanzaro.

        Test: imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2017-11-10  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] CoordinatedGraphicsLayer::setNeedsDisplayInRect() converts FloatRect to IntRect erroneously
        https://bugs.webkit.org/show_bug.cgi?id=179476

        Reviewed by Žan Doberšek.

        Convert the passed FloatRect into an IntRect using enclosingIntRect(), so we are guaranteed that
        the rectangle to paint fits into the buffer that the backingStore will allocate.

        No behaviour change.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplayInRect):

2017-11-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        WebInjectedScriptHost.cpp: warning: variable ‘scope’ set but not used
        https://bugs.webkit.org/show_bug.cgi?id=179524

        Reviewed by Joseph Pecoraro.

        r224606 has introduced a new compilation warning if not
        ENABLE(PAYMENT_REQUEST).

        No new tests (No behavior change).

        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::getInternalProperties): Do not
        define the variable 'scope' if not ENABLE(PAYMENT_REQUEST). Marked
        a variable 'vm' with UNUSED_PARAM.

2017-11-10  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Start grouping Cairo GraphicsContext operations behind a separate interface
        https://bugs.webkit.org/show_bug.cgi?id=179467

        Reviewed by Carlos Garcia Campos.

        Start moving the Cairo operations in GraphicsContext into a separate
        translation unit, CairoOperations.cpp. This will ease leveraging these
        operations from a pre-recorded list of GraphicsContext commands, or
        from a Cairo-specific GraphicsContextImpl, without undermining the
        current GraphicsContext implementation that we'll want to maintain
        in a working state until necessary.

        We start with the clipping operations. Each operation is encapsulated
        in a static function inside the WebCore::Cairo namespace that expects
        PlatformContextCairo reference as the first argument, which makes sense
        since we have to utilize the cairo_t state object that's kept there.
        Other parameters are passed as well, as required for some specific
        operation.

        In the Cairo implementation of GraphicsContext, the affected methods
        are changed to assert presence of the platform context (i.e. this is a
        GraphicsContext that operates on a valid cairo_t object, and is not
        using an m_impl object or is in non-painting mode) before the
        PlatformContextCairo object is dereferenced and passed along with
        other arguments to the Cairo::clip*() function.

        No new tests -- no change in behavior.

        * platform/SourcesCairo.txt:
        * platform/graphics/cairo/CairoOperations.cpp: Added.
        (WebCore::Cairo::clip):
        (WebCore::Cairo::clipOut):
        (WebCore::Cairo::clipPath):
        (WebCore::Cairo::clipToImageBuffer):
        * platform/graphics/cairo/CairoOperations.h: Added.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::clipOut):

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

        Unreviewed, rolling out r224661.

        Broke build on several internal Mac/iOS bots

        Reverted changeset:

        "Ignore HSTS for partitioned, cross-origin subresource
        requests"
        https://bugs.webkit.org/show_bug.cgi?id=178993
        https://trac.webkit.org/changeset/224661

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

        ServiceWorkerRegistration objects may get recycled for different SWServerRegistration objects
        https://bugs.webkit.org/show_bug.cgi?id=179517

        Reviewed by Brady Eidson.

        ServiceWorkerRegistration objects could get recycled for different SWServerRegistration objects, leading to
        flakiness in the tests. We uses ServiceWorkerRegistrationKey as key in the m_registration map on WebProcess
        side. The lifetime of the ServiceWorkerRegistration objects is tied to the lifetime of their JS wrapper.
        When a test does a registration for a given scope, then unregisters, then registers again for the same scope,
        we would end up creating a new SWServerRegistration object on server side, but possibly reuse the same
        ServiceWorkerRegistration object on WebProcess side, if its wrapper has not yet been garbage collected.
        This is because the registrations have the same ServiceWorkerRegistrationKey in this case.

        To address the issue, we now use the ServiceWorkerRegistrationIdentifier as key in the m_registration
        hash map. A SWServerRegistration has a unique ServiceWorkerRegistrationIdentifier on server side.
        All its clients ServiceWorkerRegistration also use the same ServiceWorkerRegistrationIdentifier.

        Test: http/tests/workers/service/basic-unregister-then-register-again-no-reuse.html

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::scheduleTaskToUpdateRegistrationState):
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireUpdateFoundEvent):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::decode):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::fireUpdateFoundEvent):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::addServiceWorkerRegistrationInServer):
        (WebCore::SWServer::Connection::removeServiceWorkerRegistrationInServer):
        (WebCore::SWServer::resolveRegistrationJob):
        (WebCore::SWServer::addClientServiceWorkerRegistration):
        (WebCore::SWServer::removeClientServiceWorkerRegistration):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::generateServiceWorkerRegistrationIdentifier):
        (WebCore::SWServerRegistration::SWServerRegistration):
        (WebCore::SWServerRegistration::updateRegistrationState):
        (WebCore::SWServerRegistration::fireUpdateFoundEvent):
        (WebCore::SWServerRegistration::forEachConnection):
        (WebCore::SWServerRegistration::addClientServiceWorkerRegistration):
        (WebCore::SWServerRegistration::removeClientServiceWorkerRegistration):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::identifier const):

2017-11-09  John Wilander  <wilander@apple.com>

        Ignore HSTS for partitioned, cross-origin subresource requests
        https://bugs.webkit.org/show_bug.cgi?id=178993
        <rdar://problem/34962462>

        Reviewed by Brent Fulgham.

        No new tests. HSTS is not supported in layout tests.
        Tested manually.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary):

2017-11-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] Remove explicit pop from LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=179509
        <rdar://problem/35454323>

        Reviewed by Antti Koivisto.

        Both relayoutForPagination()/relayoutToAvoidWidows() call layout recursively which requires
        manual layout state pop. This patch addresses this issue by constructing a new LayoutState object
        for the positioned descendants.

        Covered by existing tests.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutStateMaintainer::~LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::pop): Deleted.
        * rendering/LayoutState.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::relayoutToAvoidWidows):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockFlow.h:

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

        Implement real post 'install' event steps of the Install algorithm (steps 14+)
        https://bugs.webkit.org/show_bug.cgi?id=179401

        Reviewed by Brady Eidson.

        Implement step 14+ of Install algorithm, as per:
        - https://w3c.github.io/ServiceWorker/#installation-algorithm

        * dom/Microtasks.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::scheduleTaskToUpdateState):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleTaskToUpdateRegistrationState):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireUpdateFoundEvent):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::resolvedWithRegistration):
        * workers/service/ServiceWorkerJob.h:
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        * workers/service/ServiceWorkerTypes.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::forEachContainer):
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::updateWorkerState):
        (WebCore::SWClientConnection::fireUpdateFoundEvent):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::didResolveRegistrationPromise):
        (WebCore::SWServer::resolveRegistrationJob):
        (WebCore::SWServer::didResolveRegistrationPromise):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::install):
        (WebCore::SWServerJobQueue::didResolveRegistrationPromise):
        (WebCore::SWServerJobQueue::didFinishInstall):
        (WebCore::SWServerJobQueue::runRegisterJob):
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.cpp:
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::installingWorker const):
        (WebCore::SWServerRegistration::waitingWorker const):
        (WebCore::SWServerRegistration::activeWorker const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::terminate):
        * workers/service/server/SWServerWorker.h:

2017-11-09  Doug Russell  <d_russell@apple.com>

        Bug 179068 - AX: search predicate returns containing group for plain text instead of text element
        https://bugs.webkit.org/show_bug.cgi?id=179068

        Reviewed by Darin Adler

        Implement a check in AccessibilityRenderObject::hasPlainText(), AccessibilityObject::canHavePlainText(), to confirm the element is capable of providing text.

        Tests: accessibility/mac/search-predicate-plaintext.html
               accessibility/mac/search-predicate-visible-button.html
               accessibility/mac/search-predicate-visited-links.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::text const):
        (WebCore::AccessibilityNodeObject::stringValue const):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isARIAStaticText const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue const):
        (WebCore::AccessibilityRenderObject::canHavePlainText const):
        (WebCore::AccessibilityRenderObject::hasPlainText const):
        * accessibility/AccessibilityRenderObject.h:

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

        Inserting an image, selecting, underlining, and then deleting leaves the typing style with both "-webkit-text-decorations-in-effect" and "text-decoration"
        https://bugs.webkit.org/show_bug.cgi?id=179431

        Reviewed by Ryosuke Niwa.

        When inserting an image element, selecting it, underlining the selection, deleting, and then inserting text, we
        crash on a debug assert. This codepath was exercised by an API test added in <https://trac.webkit.org/r224512>.
        This assertion happens due to the following sequence of events:
        1. DeleteSelectionCommand::saveTypingStyleState computes a typing style.
        2. In doing so, it calls into EditingStyle::init, which observes that "-webkit-text-decorations-in-effect" is
           present and appends "text-decoration" with an identical CSS value to the EditingStyle's mutable style
           properties.
        3. DeleteSelectionCommand::calculateTypingStyleAfterDelete sets the current selection's typing style to the
           above typing style.
        4. Later on, when we try to insert text, we compute the StyleChange using the above typing style, which calls
           into reconcileTextDecorationProperties.
        5. reconcileTextDecorationProperties debug asserts that "-webkit-text-decorations-in-effect" and
           "text-decoration" don't coexist on the EditingStyle's (i.e. the typing style's) mutable properties; since (2)
           added both properties, this assertion fires.

        It appears that step (2) shouldn't be adding "text-decoration" in addition to EditingStyle's mutable style
        properties, since doing so would violate the requirements of reconcileTextDecorationProperties. As such, we can
        tweak EditingStyle::init to *replace* the "-webkit-text-decorations-in-effect" property with "text-decoration"
        instead; this matches the behavior of reconcileTextDecorationProperties, and ensures that we only have the
        "text-decorations" property when we try to insert text in step (4).

        Test: editing/execCommand/underline-selection-containing-image.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init):

2017-11-09  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: support undo/redo of insertAdjacentHTML
        https://bugs.webkit.org/show_bug.cgi?id=179283

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/insertAdjacentHTML.html

        Create another version of Element::insertAdjacentHTML that keeps track of the nodes that are
        added. This is necessary because the children of a DocumentFragment are removed when it is
        added to a ContainerNode. In this way, it is possible to remove those nodes during an undo.

        * dom/Element.h:
        * dom/Element.cpp:
        (WebCore::Element::insertAdjacentHTML):

        * inspector/DOMEditor.h:
        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::insertAdjacentHTML):
        Drive-by fix: sort functions and class declarations.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::insertAdjacentHTML):

2017-11-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] Remove redundant LayoutState c'tor
        https://bugs.webkit.org/show_bug.cgi?id=179505
        <rdar://problem/35450650>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/LayoutState.cpp:
        * rendering/LayoutState.h:

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

        FetchResponse should set the mime type of its internal ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=179487

        Reviewed by Chris Dumez.

        No observable change.
        Setting the mime type of the response as navigation loads use that field.
        This will be used for navigation loads served by service worker.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):

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

        ServiceWorker ResourceResponse should not assert in platformCertificateInfo()
        https://bugs.webkit.org/show_bug.cgi?id=179486

        Reviewed by Chris Dumez.

        No change of behavior.
        In case a Response is returned by Service Worker, there may be no related internal response.
        In that case, platformCertificateInfo is returning an empty CertificateInfo.

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):

2017-11-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] Remove conditional push from RenderTableSection::calcRowLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=179493
        <rdar://problem/35446631>

        Reviewed by Antti Koivisto.

        Pushing layout states is cheap and we do it for every container anyway.

        Covered by existing tests.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::~LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::pop):
        (WebCore::LayoutStateMaintainer::push): Deleted.
        * rendering/LayoutState.h:
        (WebCore::LayoutStateMaintainer::didPush const): Deleted.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

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

        CachedResourceLoader::requestRawResource should not assert when destination is set in the context of a service worker
        https://bugs.webkit.org/show_bug.cgi?id=179491

        Reviewed by Chris Dumez.

        No change of behavior.
        requestRawResource on web page should have the destination set as the empty string as per fetch spec.
        In the context of a service worker, requestRawResource may be used with any destination.
        Updating assertion accordingly.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestRawResource):

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

        ResourceErrorBase::setType should not ASSERT if it is a no op
        https://bugs.webkit.org/show_bug.cgi?id=179490

        Reviewed by Chris Dumez.

        No change of behavior.

        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::setType):

2017-11-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] Remove renderer data members from state maintainers.
        https://bugs.webkit.org/show_bug.cgi?id=179483
        <rdar://problem/35442548>

        Reviewed by Darin Adler.

        Although layout is not supposed to mutate the tree anymore, it's safer to use LayoutContext instead.

        No change in functionality.

        * page/LayoutContext.cpp:
        * page/LayoutContext.h:
        * rendering/LayoutState.cpp:
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer):
        * rendering/LayoutState.h:

2017-11-09  Maciej Stachowiak  <mjs@apple.com>

        Remove support for iOS-only softbank-sjis encoding if possible
        https://bugs.webkit.org/show_bug.cgi?id=179416

        Reviewed by Darin Adler.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames): Remove support for softbank-sjis
        codec, because by code inspection it couldn't have possibly worked.
        (WebCore::TextCodecICU::registerCodecs): Ditto.

2017-11-09  Christopher Reid  <chris.reid@sony.com>

        Use enum classes within FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=175172

        Reviewed by Darin Adler.

        No new tests, no change in behavior.

        Further cleanup to FileSystem's enum classes.
        Shortening FileSystem's enum names now that they are enum classes.
        Adding OptionSet<FileLockMode> to functions using the FileLockMode enum.

        * Modules/webdatabase/OriginLock.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * platform/FileHandle.h:
        * platform/FileStream.cpp:
        * platform/FileSystem.cpp:
        * platform/FileSystem.h:
        * platform/cocoa/FileMonitorCocoa.mm:
        * platform/glib/FileSystemGlib.cpp:
        * platform/network/curl/CurlCacheEntry.cpp:
        * platform/network/curl/CurlCacheManager.cpp:
        * platform/posix/FileSystemPOSIX.cpp:
        * platform/win/FileSystemWin.cpp:
        * rendering/RenderThemeWin.cpp:

2017-11-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] LayouState::m_lineGrid should be a weak pointer
        https://bugs.webkit.org/show_bug.cgi?id=179484
        <rdar://problem/35442725>

        Reviewed by Darin Adler.

        Covered by existing tests.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::propagateLineGridInfo):
        (WebCore::LayoutState::establishLineGrid):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::lineGrid const):

2017-11-09  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] Add pagination parameter to subtree LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=179465
        <rdar://problem/35434096>

        Reviewed by Antti Koivisto.

        It enables us to remove the last setters from LayoutState.

        No change in functionality.

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::pushLayoutStateForPaginationIfNeeded):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::layoutDeltaMatches const):
        (WebCore::LayoutState::layoutDeltaMatches): Deleted.
        * rendering/LayoutState.h:
        (WebCore::LayoutState::isPaginated const):
        (WebCore::LayoutState::setIsPaginated): Deleted.
        (WebCore::LayoutState::setPageLogicalHeight): Deleted.

2017-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        AVSampleBufferGenerator leaks seen on leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=179464

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::readSampleMetadata):
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):
        Adopt the allocation into our RetainPtr.

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

        Content not painted when scrolling an overflow node inside an iframe
        https://bugs.webkit.org/show_bug.cgi?id=179315
        rdar://problem/35364166

        Reviewed by Tim Horton.

        When scrolling overflow:scroll, we need to check for overlap updates just as we do
        for page scrolls.

        Test: compositing/ios/overflow-scroll-update-overlap.html

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

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

        Cordova: elements with tag position:fixed disappears (flickering) when a long content is scrolling and appears again when the scroll is finished.
        https://bugs.webkit.org/show_bug.cgi?id=178066

        Reviewed by Tim Horton.

        In UIWebView, we were failing to call setIsViewportConstrained() on layers for position:fixed,
        causing us to detach their backing store sometimes on page scrolling.
        
        Fix by hoisting the call to RenderLayerBacking::setIsScrollCoordinatedWithViewportConstrainedRole()
        up the stack into code that runs for both UIWebView and WKWebView. This required moving some of
        the sanity check code up out of updateScrollCoordinatedLayer() into the caller.

        Not testable because the bug only manifested in UIWebView.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::canCoordinateScrollingForLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

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

        [LayoutState cleanup] Move RenderMultiColumnFlow::computeLineGridPaginationOrigin to LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=179462

        Reviewed by Antti Koivisto.

        This is in preparation for having no setters on LayoutState.
        Having all the related functions (pagination/line-grid) in one place also helps with moving
        them to a more appropriate place later.

        No change in functionality.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::computePaginationInformation):
        (WebCore::LayoutState::computeLineGridPaginationOrigin):
        (WebCore::LayoutState::establishLineGrid):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::setLineGridPaginationOrigin): Deleted.
        (WebCore::LayoutState::currentRenderFragmentedFlow const): Deleted.
        (WebCore::LayoutState::setCurrentRenderFragmentedFlow): Deleted.
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::computeLineGridPaginationOrigin const): Deleted.

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

        Replace some stack raw pointers with RefPtrs within WebCore/svg
        https://bugs.webkit.org/show_bug.cgi?id=179314
        <rdar://problem/34842204>

        Reviewed by Ryosuke Niwa.

        Besides replacing pointers directly, some of the methods are changed to return
        RefPtrs as well.

        No changes in behaviors.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement const):
        * dom/EventPath.h:
        (WebCore::EventPath::eventTargetRespectingTargetRules):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements const):
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::hasValidAttributeType):
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
        (WebCore::SVGAnimateElementBase::calculateFromAndToValues):
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        (WebCore::SVGAnimateElementBase::resetAnimatedType):
        (WebCore::SVGAnimateElementBase::applyResultsToTarget):
        (WebCore::SVGAnimateElementBase::calculateDistance):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType):
        (WebCore::SVGAnimateMotionElement::updateAnimationPath):
        (WebCore::SVGAnimateMotionElement::resetAnimatedType):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidAttributeType):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::adjustForInheritance):
        (WebCore::SVGAnimationElement::determinePropertyValueTypes):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::rootElement):
        (WebCore::SVGDocument::zoomAndPanEnabled const):
        (WebCore::SVGDocument::startPan):
        (WebCore::SVGDocument::updatePan const):
        * svg/SVGDocument.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemovalMap):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::correspondingUseElement const):
        (WebCore::SVGElement::setCorrespondingElement):
        (WebCore::SVGElement::resolveCustomStyle):
        (WebCore::SVGElement::computedStyle):
        (WebCore::SVGElement::buildPendingResourcesIfNeeded):
        (WebCore::SVGElement::updateRelativeLengthsInformation):
        (WebCore::SVGElement::invalidateInstances):
        * svg/SVGElement.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::buildPendingResource):
        (WebCore::SVGFEImageElement::notifyFinished):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::findLightSource):
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::invalidateFilterPrimitiveParent):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::childrenChanged):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::childrenChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::rendererIsNeeded):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::determineViewport const):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        (WebCore::SVGMPathElement::pathElement):
        * svg/SVGMPathElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::frameForCurrentScale const):
        (WebCore::SVGSVGElement::currentScale const):
        (WebCore::SVGSVGElement::setCurrentScale):
        (WebCore::SVGSVGElement::deselectAll):
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform const):
        (WebCore::SVGSVGElement::scrollToAnchor):
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGSVGElement.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::setDisabled):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::detachTarget):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::elementFromRenderer):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferSizeAttributesToTargetClone const):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::targetClone const):
        (WebCore::SVGUseElement::toClipPath):
        (WebCore::SVGUseElement::rendererClipChild const):
        (WebCore::SVGUseElement::findTarget const):
        (WebCore::SVGUseElement::invalidateDependentShadowTrees):
        (WebCore::SVGUseElement::selfHasRelativeLengths const):
        * svg/SVGUseElement.h:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):
        (WebCore::SVGSMILElement::insertedIntoAncestor):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::rootElement const):
        (WebCore::SVGImage::hasSingleSecurityOrigin const):
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::containerSize const):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::embeddedContentBox const):
        (WebCore::SVGImage::hasRelativeWidth const):
        (WebCore::SVGImage::hasRelativeHeight const):
        (WebCore::SVGImage::computeIntrinsicDimensions):
        (WebCore::SVGImage::startAnimation):
        (WebCore::SVGImage::stopAnimation):
        (WebCore::SVGImage::isAnimating const):
        (WebCore::SVGImage::reportApproximateMemoryCost const):
        * svg/graphics/SVGImage.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::getEffectById const):
        * svg/graphics/filters/SVGFilterBuilder.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGListPropertyTearOff.h:

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

        [LayoutState cleanup] LayoutContext should own the stack of LayoutState objects
        https://bugs.webkit.org/show_bug.cgi?id=179408
        <rdar://problem/35423075>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layoutDelta const):
        (WebCore::LayoutContext::addLayoutDelta):
        (WebCore::LayoutContext::layoutDeltaMatches):
        (WebCore::LayoutContext::layoutState const):
        (WebCore::LayoutContext::pushLayoutState):
        (WebCore::LayoutContext::pushLayoutStateForPaginationIfNeeded):
        (WebCore::LayoutContext::popLayoutState):
        * page/LayoutContext.h:
        (WebCore::LayoutContext::isPaintOffsetCacheEnabled const):
        (WebCore::LayoutContext::layoutState const): Deleted.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::computeOffsets):
        (WebCore::LayoutState::computeClipRect):
        (WebCore::LayoutState::computePaginationInformation):
        (WebCore::LayoutState::propagateLineGridInfo):
        (WebCore::LayoutState::establishLineGrid):
        (WebCore::LayoutState::clearPaginationInformation): Deleted.
        * rendering/LayoutState.h:
        (WebCore::LayoutState::setIsPaginated):

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

        ServiceWorkerRegistration::updateStateFromServer fix! (Don't always create a new ServiceWorker every time).
        https://bugs.webkit.org/show_bug.cgi?id=179456

        Reviewed by Chris Dumez.

        No new tests (No behavior change yet).

        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::updateStateFromServer): Re-use a previous worker instead of always creating a new one.

2017-11-08  Brent Fulgham  <bfulgham@apple.com>

        XMLHttpRequest should not treat file URLs as same origin
        https://bugs.webkit.org/show_bug.cgi?id=178565
        <rdar://problem/11115901>

        Reviewed by Daniel Bates.

        Based on a Blink patch by <jannhorn@googlemail.com>.
        https://chromium.googlesource.com/chromium/src/+/c362e001551abc2bea392773f32eaf043d8bc29f

        Test: security/cannot-read-self-from-file.html

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::passesFileCheck const): Do not treat file as same-origin.

2017-11-08  Jeremy Jones  <jeremyj@apple.com>

        HTMLMediaElement should not use element fullscreen on iOS
        https://bugs.webkit.org/show_bug.cgi?id=179418
        rdar://problem/35409277

        Reviewed by Eric Carlson.

        Add ENABLE_VIDEO_USES_ELEMENT_FULLSCREEN to determine if HTMLMediaElement should use element full screen or not.

        * Configurations/FeatureDefines.xcconfig:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):

2017-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show Internal properties of PaymentRequest in Web Inspector Console
        https://bugs.webkit.org/show_bug.cgi?id=179276

        Reviewed by Andy Estes.

        Test: http/tests/inspector/runtime/internal-properties-payment-request.https.html

        * Modules/paymentrequest/PaymentRequest.h:
        Expose access to internal state.

        * inspector/WebInjectedScriptHost.h:
        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::constructInternalProperty):
        (WebCore::WebInjectedScriptHost::getInternalProperties):
        Provide internal properties for a PaymentRequest.

        * testing/Internals.cpp:
        (WebCore::Internals::withUserGesture):
        * testing/Internals.h:
        * testing/Internals.idl:
        Provide a simple way to run code inside of a user gesture.

2017-11-08  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r224534): Crash inside Document::updateStyleIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=179442

        Reviewed by Simon Fraser.

        Disable the assertion when the web thread is used.

        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayout):

2017-11-08  Colin Bendell  <colin@bendell.ca>

        Added mime type check to the picture source preloader to avoid downloading incompatible resources.
        https://bugs.webkit.org/show_bug.cgi?id=179231

        Reviewed by Alex Christensen.

        Test: http/tests/loading/preload-picture-type.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes): include type match state when selecting candidate imgs
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): added type attribute evaluation and matching

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

        Some SW Container and Registration tweaks.
        https://bugs.webkit.org/show_bug.cgi?id=179450

        Reviewed by Chris Dumez.

        No new tests (Progression in an existing test).

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):

2017-11-08  Antti Koivisto  <antti@apple.com>

        Move inlineElementContinuation function to RenderBoxModelObject and rename to inlineContinuation
        https://bugs.webkit.org/show_bug.cgi?id=179437

        Reviewed by Zalan Bujtas.

        Unify RenderInline::inlineElementContinuation and RenderBlock::inlineElementContinuation.
        It is simply a function to find the next RenderInline in the continuation chain.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):
        (WebCore::startOfContinuations):
        (WebCore::endOfContinuations):
        (WebCore::childBeforeConsideringContinuations):
        (WebCore::AccessibilityRenderObject::nextSibling const):
        (WebCore::nextContinuation):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::absoluteRects const):
        (WebCore::RenderBlock::addFocusRingRects):
        (WebCore::RenderBlock::inlineElementContinuation const): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::accumulateInFlowPositionOffsets):
        (WebCore::RenderBoxModelObject::inlineContinuation const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::updateStyleOfAnonymousBlockContinuations):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::positionForPoint):
        (WebCore::RenderInline::inlineElementContinuation const): Deleted.
        * rendering/RenderInline.h:
        * rendering/line/LineInlineHeaders.h:
        (WebCore::hasInlineDirectionBordersPaddingOrMargin):

2017-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Eliminate unnecessary hash lookups with NetworkResourceData
        https://bugs.webkit.org/show_bug.cgi?id=179361

        Reviewed by Brian Burg.

        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::setURL):
        (WebCore::NetworkResourcesData::ResourceData::setUrl): Deleted.
        Drive-by fix the name `setUrl` to `setURL`.

        * inspector/NetworkResourcesData.h:
        Store unique_ptrs in the HashMap.

        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::resourceCreated):
        (WebCore::NetworkResourcesData::responseReceived):
        Create new versions of methods that combine two operations.

        (WebCore::NetworkResourcesData::removeCachedResource):
        (WebCore::NetworkResourcesData::clear):
        (WebCore::NetworkResourcesData::ensureNoDataForRequestId):
        Handle unique_ptrs in the HashMap.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::frameIdentifier):
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::InspectorNetworkAgent::didFailLoading):
        Use the new version of operations to avoid multiple lookups.

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

        [Attachment Support] Implement delegate hooks for attachment element insertion and removal
        https://bugs.webkit.org/show_bug.cgi?id=179016
        <rdar://problem/35250890>

        Reviewed by Tim Horton.

        Relanding this patch with a tweaked API test. WKAttachmentTests.AttachmentUpdatesWhenChangingFontStyles, in its
        original form, hit a debug assertion and exposed an existing bug related to EditingStyles and text decoration.
        After some investigation, this debug assertion is unrelated to the attachment logic introduced here; see
        <https://bugs.webkit.org/show_bug.cgi?id=179431> for additional analysis, and several proposed fixes.

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::editorUIUpdateTimerFired):
        (WebCore::Editor::scheduleEditorUIUpdate):
        (WebCore::Editor::didInsertAttachmentElement):
        (WebCore::Editor::didRemoveAttachmentElement):
        (WebCore::Editor::notifyClientOfAttachmentUpdates):
        (WebCore::Editor::insertAttachmentFromFile):
        * editing/Editor.h:
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::HTMLAttachmentElement):
        (WebCore::HTMLAttachmentElement::insertedIntoAncestor):
        (WebCore::HTMLAttachmentElement::removedFromAncestor):
        (WebCore::HTMLAttachmentElement::uniqueIdentifier const):
        (WebCore::HTMLAttachmentElement::setUniqueIdentifier):
        * html/HTMLAttachmentElement.h:
        * html/HTMLAttributeNames.in:
        * page/EditorClient.h:
        (WebCore::EditorClient::didInsertAttachment):
        (WebCore::EditorClient::didRemoveAttachment):

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

        Simplify ServiceWorkerContainer::jobResolvedWithRegistration()
        https://bugs.webkit.org/show_bug.cgi?id=179429

        Reviewed by Brady Eidson.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):

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

        [Service Workers] Make sure SWServerRegistration update functions always message back the connection that scheduled the job
        https://bugs.webkit.org/show_bug.cgi?id=179428

        Reviewed by Brady Eidson.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::install):
        (WebCore::SWServerJobQueue::didFinishInstall):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::updateRegistrationState):
        (WebCore::SWServerRegistration::updateWorkerState):
        (WebCore::SWServerRegistration::fireUpdateFoundEvent):
        (WebCore::SWServerRegistration::firePostInstallEvents):
        (WebCore::SWServerRegistration::forEachConnection):
        * workers/service/server/SWServerRegistration.h:

2017-11-08  Maciej Stachowiak  <mjs@apple.com>

        iOS supports some text encodings supposedly due to lack of TEC that aren't supported by the TEC decoder on macOS
        https://bugs.webkit.org/show_bug.cgi?id=179309

        Reviewed by Darin Adler.

        Test: fast/encoding/legacy-ios-encodings.html

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames): Remove most iOS-specific adding of names, leaving only softbank-sjis. 
        Most were either redundant or unnecessary.
        (WebCore::TextCodecICU::registerCodecs): ditto

2017-11-08  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Attempting to unbork the WinCairo bot after r224578.

        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        Add a missing semicolon after the deafult initialization of a member
        variable in the GraphicsContextPlatformPrivate class.

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

        [Service Workers] Support waitUntil() on the 'install' event
        https://bugs.webkit.org/show_bug.cgi?id=179396

        Reviewed by Brady Eidson.

        Support waitUntil() on the 'install' event:
        - https://w3c.github.io/ServiceWorker/#installation-algorithm (step 10.4)
        - https://w3c.github.io/ServiceWorker/#wait-until-method

        Tests: http/tests/workers/service/basic-install-event-waitUntil-multiple-promises.html
               http/tests/workers/service/basic-install-event-waitUntil-reject.html
               http/tests/workers/service/basic-install-event-waitUntil-resolve.html

        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::waitUntil):
        (WebCore::ExtendableEvent::addExtendLifetimePromise):
        (WebCore::ExtendableEvent::whenAllExtendLifetimePromisesAreSettled):
        * workers/service/ExtendableEvent.h:
        (WebCore::ExtendableEvent::pendingPromiseCount const):
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::respondWith):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::fireInstallEvent):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::didFinishInstall):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::firePostInstallEvents):

2017-11-08  Antti Koivisto  <antti@apple.com>

        Remove Element::isInlineElementContinuation
        https://bugs.webkit.org/show_bug.cgi?id=179425

        Reviewed by Zalan Bujtas.

        It is really just isInline+isContinuation test and most callers know it is an inline already.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::firstChildConsideringContinuation):
        (WebCore::startOfContinuations):
        (WebCore::firstChildIsInlineContinuation):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addContinuationWithOutline):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setIsContinuation):
        (WebCore::RenderElement::isElementContinuation const): Deleted.
        (WebCore::RenderElement::isInlineElementContinuation const): Deleted.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        (WebCore::RenderInline::updateHitTestResult):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::hasInlineDirectionBordersPaddingOrMargin):

2017-11-08  David Hyatt  <hyatt@apple.com>

        [Experiment] Implement code to detect high frequency painting
        https://bugs.webkit.org/show_bug.cgi?id=179118
        <rdar://problem/35347068>

        Reviewed by Simon Fraser.

        This patch implements a model for detecting that objects whose
        graphics resources we want to cache (like glyphs or paths) are painting
        frequently enough that it's worth taking the memory hit to cache them.

        Paint frequency detection is done at the self-painting RenderLayer level, since
        a lower level of granularity (e.g., per-RenderObject) would be too memory-intensive.

        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        (WebCore::PaintInfo::enclosingSelfPaintingLayer):
        Add the enclosing self-painting layer that is currently painting to the PaintInfo
        so that objects that have cachaeble graphics resources can notify the layer when
        they actually paint them.

        * rendering/RenderLayer.cpp:
        (WebCore::PaintFrequencyInfo::PaintFrequencyInfo):
        (WebCore::PaintFrequencyInfo::paintingFrequently const):
        (WebCore::PaintFrequencyInfo::updatePaintFrequency):
        (WebCore::PaintFrequencyInfo::paintingCacheableResource):
        RenderLayers have a pointer to PaintFrequencyInfo that is allocated once you've
        painted cachaeble resources.

        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintChildClippingMaskForFragments):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        Patch to pass the layer with the PaintInfo.

        * testing/Internals.cpp:
        (WebCore::Internals::isPaintingFrequently):
        (WebCore::Internals::incrementFrequentPaintCounter):
        * testing/Internals.h:
        * testing/Internals.idl:
        Test methods for making layout tests to ensure we go into the mode properly.

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

        [LayoutState cleanup] Make public data members private.
        https://bugs.webkit.org/show_bug.cgi?id=179409
        <rdar://problem/35406184>

        Reviewed by Sam Weinig.

        No change in functionality.

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layoutDelta const):
        (WebCore::LayoutContext::addLayoutDelta):
        (WebCore::LayoutContext::layoutDeltaMatches):
        (WebCore::LayoutContext::pushLayoutStateForPaginationIfNeeded):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::addLayoutDelta):
        (WebCore::LayoutState::layoutDeltaMatches):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::setIsPaginated):
        (WebCore::LayoutState::setPageLogicalHeight):
        (WebCore::LayoutState::paintOffset const):
        (WebCore::LayoutState::renderer const):
        (WebCore::LayoutState::clipRect const):
        (WebCore::LayoutState::isClipped const):
        (WebCore::LayoutState::layoutDelta const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const):
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::pageLogicalTopForOffset const):
        (WebCore::RenderBlockFlow::pageLogicalHeightForOffset const):
        (WebCore::RenderBlockFlow::pageRemainingLogicalHeightForOffset const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer const):
        (WebCore::RenderBox::computeRectForRepaint const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint const):
        (WebCore::RenderInline::mapLocalToContainer const):

2017-11-08  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Improve PlatformContextCairo lifetime management in GraphicsContextPlatformPrivate
        https://bugs.webkit.org/show_bug.cgi?id=179424

        Reviewed by Carlos Garcia Campos.

        When the PlatformContextCairo object is owned by GraphicsContextPlatformPrivate,
        the latter should hold it in a std::unique_ptr<>. When PlatformContextCairo is
        not owned, the std::unique_ptr<> should remain null, and the PlatformContextCairo
        reference should point to the externally-managed object.

        A new GraphicsContextPlatformPrivate constructor accepts a std::unique_ptr<> that
        manages a PlatformContextCairo object and moves it into the member variable, tying
        lifetime of that PlatformContextCairo object to the private object.

        This enables dropping the GraphicsContextPlatformPrivateToplevel class, and the
        virtual table is no longer required. Small cleanups to the remaining class are
        also performed.

        No new tests -- no changes in behavior.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformContext const):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::flush):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        (WebCore::GraphicsContextPlatformPrivate::setCTM):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate): Deleted.
        (WebCore::GraphicsContextPlatformPrivateToplevel::GraphicsContextPlatformPrivateToplevel): Deleted.
        (WebCore::GraphicsContextPlatformPrivateToplevel::~GraphicsContextPlatformPrivateToplevel): Deleted.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::platformInit):

2017-11-08  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move transparency layers Vector to PlatformContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=179420

        Reviewed by Carlos Garcia Campos.

        Move the Vector of transparency layer float values from the
        GraphicsContextPlatformPrivate class to PlatformContextCairo.
        It fits better there since it's a platform-specific context
        state, just like e.g. the ShadowBlur member.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/PlatformContextCairo.h:
        (WebCore::PlatformContextCairo::layers):
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::drawBitmapToContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContext::drawWindowsBitmap):

2017-11-08  Jeremy Jones  <jeremyj@apple.com>

        Disable implicit animations when adding or removing text track representation layers.
        https://bugs.webkit.org/show_bug.cgi?id=179406
        rdar://problem/34369835

        Reviewed by Simon Fraser.

        No new tests because this has no effect on the DOM.

        This change prevents implicit animations when the text track layer is added or removed from
        the video layer.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::syncTextTrackBounds):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setTextTrackRepresentation):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::syncTextTrackBounds):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setTextTrackRepresentation):
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        (WebCore::VideoFullscreenLayerManager::setVideoFullscreenLayer):

2017-11-07  Maciej Stachowiak  <mjs@apple.com>

        Get rid of unsightly hex numbers from unified build object files
        https://bugs.webkit.org/show_bug.cgi?id=179410

        Reviewed by Saam Barati.

        * WebCore.xcodeproj/project.pbxproj: Rename UnifiedSource*.mm to UnifiedSource*-mm.mm for more readable build output.

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

        Remove RenderBlock::isAnonymousBlockContinuation()
        https://bugs.webkit.org/show_bug.cgi?id=179403

        Non-anonymous blocks don't have continuations so this is the same as simply calling continuation().

        Some of these are also really isContinuation() tests. This ends up being the same as calling
        continuation() as block continuations always have next continuation too. This patch uses
        isContinuation() where appropriate.

        Reviewed by Zalan Bujtas.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeForHitTest const):
        (WebCore::RenderBlock::absoluteRects const):
        (WebCore::RenderBlock::absoluteQuads const):
        (WebCore::RenderBlock::rectWithOutlineForRepaint const):
        (WebCore::RenderBlock::hoverAncestor const):
        (WebCore::RenderBlock::outlineStyleForRepaint const):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::isAnonymousBlockContinuation const): Deleted.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::propagateStyleToAnonymousChildren):
        * rendering/RenderInline.cpp:
        (WebCore::updateStyleOfAnonymousBlockContinuations):

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

        There is no such thing as block element continuation
        https://bugs.webkit.org/show_bug.cgi?id=179400

        Reviewed by Zalan Bujtas.

        There are no non-anonymous block continuations. This is dead code.

        * rendering/RenderBlock.cpp:
        (WebCore::borderOrPaddingLogicalWidthChanged):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::blockElementContinuation const): Deleted.

            This would always return null.

        * rendering/RenderBlock.h:

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

        [LayoutState cleanup] Rename enable/disableLayoutState
        https://bugs.webkit.org/show_bug.cgi?id=179399
        <rdar://problem/35400245>

        Reviewed by Antti Koivisto.

        It only enables/disables paint offset caching.

        No change in functionality.

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::pushLayoutState):
        (WebCore::LayoutContext::checkLayoutState):
        * page/LayoutContext.h:
        (WebCore::LayoutContext::isPaintOffsetCacheEnabled const):
        (WebCore::LayoutContext::disablePaintOffsetCache):
        (WebCore::LayoutContext::enablePaintOffsetCache):
        (WebCore::LayoutContext::layoutStateEnabled const): Deleted.
        (WebCore::LayoutContext::disableLayoutState): Deleted.
        (WebCore::LayoutContext::enableLayoutState): Deleted.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):
        (WebCore::LayoutStateDisabler::LayoutStateDisabler):
        (WebCore::LayoutStateDisabler::~LayoutStateDisabler):
        (WebCore::shouldDisablePaintOffsetCacheForSubtree):
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::shouldDisableLayoutStateForSubtree): Deleted.
        * rendering/LayoutState.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer const):
        (WebCore::RenderBox::computeRectForRepaint const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint const):
        (WebCore::RenderInline::computeRectForRepaint const):
        (WebCore::RenderInline::mapLocalToContainer const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeRectForRepaint const):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):

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

        Implement "UpdateWorkerState" and use it
        https://bugs.webkit.org/show_bug.cgi?id=179318

        Reviewed by Chris Dumez.

        No new tests (Existing tests and changes there-to).

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::allWorkers):
        (WebCore::ServiceWorker::mutableAllWorkers):
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::~ServiceWorker):
        (WebCore::ServiceWorker::updateWorkerState):
        (WebCore::ServiceWorker::setState): Deleted.
        * workers/service/ServiceWorker.h:

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::updateRegistrationState):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerContainer.h:

        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::~ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::updateStateFromServer):

        * workers/service/ServiceWorkerRegistrationData.cpp:
        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::encode const):
        (WebCore::ServiceWorkerRegistrationData::decode):

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::loggingString const):
        * workers/service/ServiceWorkerRegistrationKey.h:

        * workers/service/ServiceWorkerTypes.h:

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::registerServiceWorkerThreadForInstall):
        (WebCore::SWContextManager::registerServiceWorkerThreadForUpdate): Deleted.
        * workers/service/context/SWContextManager.h:

        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::updateWorkerState):
        * workers/service/server/SWClientConnection.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::workerByID const):

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::install):
        (WebCore::SWServerJobQueue::tryClearRegistration):

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::updateRegistrationState):
        (WebCore::SWServerRegistration::updateWorkerState):
        (WebCore::SWServerRegistration::data const):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::setActiveServiceWorkerIdentifier): Deleted.

        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::state const):
        (WebCore::SWServerWorker::setState):

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

        [LayoutState cleanup] Remove explicit LayoutStateMaintainer::pop calls.
        https://bugs.webkit.org/show_bug.cgi?id=179380
        <rdar://problem/35392161>

        Reviewed by Antti Koivisto.

        Besides the pagination related explicit pops (FIXME), all LayoutStateMaintainer pops are
        now in LayoutStateMaintainer's d'tor.

        Covered by existing tests.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutStateMaintainer::~LayoutStateMaintainer):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layoutShadowControls):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):

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

        Unreviewed, rolling out r224512 and r224521.
        https://bugs.webkit.org/show_bug.cgi?id=179388

        An API test added with this change is failing an assertion on
        the bots. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "[Attachment Support] Implement delegate hooks for attachment
        element insertion and removal"
        https://bugs.webkit.org/show_bug.cgi?id=179016
        https://trac.webkit.org/changeset/224512

        "Remove stray logging from a newly added API test"
        https://trac.webkit.org/changeset/224521

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

        <video> does not respect pointer-events
        https://bugs.webkit.org/show_bug.cgi?id=179378
        <rdar://problem/34687668>

        Reviewed by Simon Fraser.

        We now honor the "pointer-events" property value set on the <video> element by setting it to "inherit"
        on the media controls shadow root container.

        Test: media/modern-media-controls/css/pointer-events-none.html

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

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

        [Service Workers] Add support for "install" event
        https://bugs.webkit.org/show_bug.cgi?id=179338

        Reviewed by Youenn Fablet.

        Add support for "install" event as per:
        - https://w3c.github.io/ServiceWorker/#installation-algorithm (Step 10)

        For now, install always succeeds as our support for ExtendableEvent.waitUntil() is
        still incomplete.

        Test: http/tests/workers/service/basic-install-event.html

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::firePostInstallEvents):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::fireInstallEvent):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::fireInstallEvent):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::firePostInstallEvents):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::didFinishInstall):
        (WebCore::SWServer::didFinishInstall):
        (WebCore::SWServer::fireInstallEvent):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::install):
        (WebCore::SWServerJobQueue::didFinishInstall):
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::firePostInstallEvents):
        * workers/service/server/SWServerRegistration.h:

2017-11-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224498.

        The LayoutTest for this change is flaky and affecting EWS
        results.

        Reverted changeset:

        "Add tests to ensure that <source> tags are only preloaded
        when the `type`"
        https://bugs.webkit.org/show_bug.cgi?id=179231
        https://trac.webkit.org/changeset/224498

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

        Web Inspector: Add some fast returns in cases where we only call through to a NetworkAgent
        https://bugs.webkit.org/show_bug.cgi?id=179359

        Reviewed by Devin Rousso.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::willSendRequestOfType):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::didReceiveThreadableLoaderResponse):
        (WebCore::InspectorInstrumentation::didReceiveData):
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponse):
        Fast return if no frontend in cases that only call into NetworkAgent
        because the NetworkAgent is only available if there is a frontend.

2017-10-31  Filip Pizlo  <fpizlo@apple.com>

        bmalloc should support strictly type-segregated isolated heaps
        https://bugs.webkit.org/show_bug.cgi?id=178108

        Reviewed by Saam Barati, Simon Fraser, and Ryosuke Niwa.

        No new tests because no new change in behavior. Though, the bmalloc change has a unit test.
        
        Adopting IsoHeap means dropping in macros in both the .h and .cpp file of each class that we
        opt in. It's not pretty, but it helps ensure speedy allocation since it means that we never
        have to do any kind of switch or dynamic lookup to find the right allocator for a type.
        
        This change is perf-neutral on MotionMark, PLT3, and membuster.

        * Sources.txt:
        * html/shadow/SliderThumbElement.cpp:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        * rendering/RenderAttachment.cpp:
        * rendering/RenderAttachment.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.cpp:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.cpp:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.cpp:
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFragmentContainer.cpp:
        * rendering/RenderFragmentContainer.h:
        * rendering/RenderFragmentContainerSet.cpp:
        * rendering/RenderFragmentContainerSet.h:
        * rendering/RenderFragmentedFlow.cpp:
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderFrameBase.cpp:
        * rendering/RenderFrameBase.h:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.cpp:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderImage.h:
        * rendering/RenderImageResourceStyleImage.cpp:
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderInline.h:
        * rendering/RenderLayerModelObject.cpp:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.cpp:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.cpp:
        * rendering/RenderMedia.h:
        * rendering/RenderMediaControlElements.cpp:
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.cpp:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnFlow.cpp:
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderMultiColumnSet.cpp:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.cpp:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.cpp:
        * rendering/RenderQuote.h:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.cpp:
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.cpp:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.cpp:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.cpp:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbarPart.cpp:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.cpp:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.cpp:
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTextFragment.cpp:
        * rendering/RenderTextFragment.h:
        * rendering/RenderVTTCue.cpp:
        * rendering/RenderVTTCue.h:
        * rendering/RenderVideo.cpp:
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFencedOperator.cpp:
        * rendering/mathml/RenderMathMLFencedOperator.h:
        * rendering/mathml/RenderMathMLFraction.cpp:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.cpp:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLMenclose.cpp:
        * rendering/mathml/RenderMathMLMenclose.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLPadded.cpp:
        * rendering/mathml/RenderMathMLPadded.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.cpp:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLToken.cpp:
        * rendering/mathml/RenderMathMLToken.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        * rendering/mathml/RenderMathMLUnderOver.h:
        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.cpp:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.cpp:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.cpp:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.cpp:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.cpp:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.cpp: Added.
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.cpp:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.cpp:
        * rendering/svg/RenderSVGViewportContainer.h:

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

        Dynamic media queries don't update in shadow tree stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=179324

        Reviewed by Ryosuke Niwa.

        Viewport and accessibility queries should work dynamically also in shadow trees.

        Test: fast/shadow-dom/media-query-in-shadow-style.html

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::updateStyleForLayout):
        * page/Page.cpp:
        (WebCore::Page::accessibilitySettingsDidChange):

            Evaluate media query list (JS API) unconditionally as it is independent from style queries.
            Remove some logging.

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

            Factor into functions in style scope.

        (WebCore::Style::Scope::evaluateMediaQueries):

            Evaluate queries in all shadow trees too.

        * style/StyleScope.h:

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

        Release-assert NoEventDispatchAssertion in canExecute, updateLayout, and updateStyle
        https://bugs.webkit.org/show_bug.cgi?id=179281
        <rdar://problem/35008993>

        Reviewed by Antti Koivisto.

        Surgically enable NoEventDispatchAssertion::InMainThread::isEventAllowed() in release builds to prevent
        against insecure execution of author scripts.

        No new tests since there should be no behavioral changes (other than preventing potential security bugs
        from being exploited).

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts): Use the release assert here. This function is consulted
        whenever author scripts are executed in event handler, script element, etc... in the main thread so
        enabling the release assert here should basically prevent all unwanted script executions protected by
        NoEventDispatchAssertion.
        * dom/ContainerNode.cpp:
        (NoEventDispatchAssertion::s_count): Now always compiled.
        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded): Use the release assert here. This assertion would prevent
        unwanted style updating. This part of the change can be reverted if it turns out to be too crashy since
        just updating the style would not directly introduce a security vulnerability.
        (WebCore::Document::updateLayout): Ditto for updating the layout.
        * dom/NoEventDispatchAssertion.h:
        (WebCore::NoEventDispatchAssertion::NoEventDispatchAssertion): Enabled this in release builds.
        (WebCore::NoEventDispatchAssertion::~NoEventDispatchAssertion): Ditto.
        (WebCore::NoEventDispatchAssertion::isEventAllowedInMainThread): Ditto.
        (WebCore::NoEventDispatchAssertion::InMainThread::InMainThread): Ditto.
        (WebCore::NoEventDispatchAssertion::InMainThread::~InMainThread): Ditto.
        (WebCore::NoEventDispatchAssertion::InMainThread::isEventDispatchAllowedInSubtree): We still don't enable
        this assertion because this check requires O(n) operation. Added a comment to that end.
        (WebCore::NoEventDispatchAssertion::InMainThread::isEventAllowed): Enabled this in release builds.
        (WebCore::NoEventDispatchAssertion::DisableAssertionsInScope): Ditto.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeClassicScript): Use the release assert here. This is the function used by
        the HTML parser to run scripts via HTMLScriptRunner::executePendingScriptAndDispatchEvent. Having a release
        assertion here should prevent the rest of the unwanted script executions in the HTML parser not caught by
        canExecuteScripts.

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

        [WPE][GTK] Building with ENABLE_VIDEO=OFF fails to find AudioTrack.idl
        https://bugs.webkit.org/show_bug.cgi?id=179372

        Reviewed by Michael Catanzaro.

        Arrange MSE extensions defined in {Audio,Text,Video}TrackMediaSource.idl to be
        only used for building when both ENABLE_VIDEO_TRACK and ENABLE_MEDIA_SOURCE are
        enabled.

        No new tests needed.

        * CMakeLists.txt: Add conditional for ENABLE_MEDIA_SOURCE and move the addition
        of the IDL files to the build there.
        * Sources.txt: Conversely, source unification should skip sources derived from
        the IDL files when ENABLE_MEDIA_SOURCE disabled, so add guards as well.

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

        Support the case of fetch events that are not responded
        https://bugs.webkit.org/show_bug.cgi?id=179336

        Reviewed by Chris Dumez.

        Covered by updated test.

        Implementing https://w3c.github.io/ServiceWorker/#on-fetch-request-algorithm step 19.
        Making FetchEvent cancellable.

        * workers/service/FetchEvent.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:

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

        Web Inspector: Create inspector agents lazily
        https://bugs.webkit.org/show_bug.cgi?id=179360

        Reviewed by Sam Weinig.

        * inspector/CommandLineAPIHost.h:
        Modernize style.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::pageAgentContext):
        (WebCore::InspectorController::createLazyAgents):
        (WebCore::InspectorController::connectFrontend):
        Move many of the agent construction to happen lazily. These
        agent's aren't needed until an inspector connects, so defer
        creation until an inspector connects.

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

        [LayoutState cleanup] Move m_layoutState from RenderView to LayoutContext
        https://bugs.webkit.org/show_bug.cgi?id=179282
        <rdar://problem/35348653>

        Reviewed by Antti Koivisto.

        LayoutContext now owns the top level LayoutState object.
        It makes RenderView behave like any other renderer by constructing a LayoutStateMaintainer on the stack.
        This is mostly moving code from RenderView.h/.cpp to LayoutContext.h/.cpp and fixing the callsites.
        (While view().frameView().layoutContext().layoutState() is a bit lengthy, it's
        temporary only, since LayoutState is planned to be an argument of the layout() method.  

        Covered by existing test.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layoutDelta const):
        (WebCore::LayoutContext::addLayoutDelta):
        (WebCore::LayoutContext::layoutDeltaMatches):
        (WebCore::LayoutContext::pushLayoutState):
        (WebCore::LayoutContext::pushLayoutStateForPaginationIfNeeded):
        (WebCore::LayoutContext::popLayoutState):
        (WebCore::LayoutContext::checkLayoutState):
        * page/LayoutContext.h:
        (WebCore::LayoutContext::layoutState const):
        (WebCore::LayoutContext::layoutStateEnabled const):
        (WebCore::LayoutContext::disableLayoutState):
        (WebCore::LayoutContext::enableLayoutState):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::computeClipRect):
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):
        (WebCore::LayoutStateDisabler::LayoutStateDisabler):
        (WebCore::LayoutStateDisabler::~LayoutStateDisabler):
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer):
        * rendering/LayoutState.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setLogicalLeftForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::layoutPositionedObject):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::adjustLogicalLeftOffsetForLine const):
        (WebCore::RenderBlock::adjustLogicalRightOffsetForLine const):
        (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const):
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChildren):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::collapseMarginsWithChildInfo):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::hasNextPage const):
        (WebCore::RenderBlockFlow::pageLogicalTopForOffset const):
        (WebCore::RenderBlockFlow::pageLogicalHeightForOffset const):
        (WebCore::RenderBlockFlow::pageRemainingLogicalHeightForOffset const):
        (WebCore::RenderBlockFlow::repaintOverhangingFloats):
        (WebCore::RenderBlockFlow::insertFloatingObject):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint const):
        (WebCore::RenderBox::mapLocalToContainer const):
        (WebCore::RenderBox::clippedOverflowRectForRepaint const):
        (WebCore::RenderBox::computeRectForRepaint const):
        (WebCore::RenderBox::offsetFromLogicalTopOfFirstPage const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        (WebCore::layoutChildIfNeededApplyingDelta):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::takeChildInternal):
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::repaintRectangleInFragments const):
        * rendering/RenderGrid.cpp:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint const):
        (WebCore::RenderInline::computeRectForRepaint const):
        (WebCore::RenderInline::mapLocalToContainer const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::layout):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        (WebCore::RenderMediaControlTimelineContainer::layout):
        (WebCore::RenderTextTrackContainerElement::layout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintRectangle const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint const):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::markForPaginationRelayoutIfNeeded):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint const):
        (WebCore::RenderTableCell::computeRectForRepaint const):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::setLogicalPositionForCell const):
        * rendering/RenderVTTCue.cpp:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        (WebCore::RenderView::layoutContent): Deleted.
        (WebCore::RenderView::checkLayoutState): Deleted.
        (WebCore::RenderView::initializeLayoutState): Deleted.
        (WebCore::RenderView::pushLayoutState): Deleted.
        (WebCore::RenderView::pushLayoutStateForPaginationIfNeeded): Deleted.
        * rendering/RenderView.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineSnapAdjustment const):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::RenderTreeUpdater::FirstLetter::update):
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):

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

        [CG] Adopt CGContextDrawPathDirect()
        https://bugs.webkit.org/show_bug.cgi?id=179339
        <rdar://problem/26283575>

        Reviewed by Simon Fraser.

        Adopt this function on macOS >= 10.12 and iOS >= 10.0. Instead of clearing
        the current path and creating a new one by calling CGContextBeginPath()
        and then adding a CGPath by calling CGContextAddPath() and then calling 
        one of the drawing path functions, we just call CGContextDrawPathDirect().

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath): Don't call CGContextBeginPath()
        and CGContextAddPath() for the drawing CGContext in the case of gradient
        shadow because we add the CGPath to the layerContext and at the end we
        draw this CGLayer into the drawing context.

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

        Make ResourceLoader::willSendRequestInternal asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=179251

        Reviewed by Andy Estes.

        ResourceLoader::willSendRequestInternal is used for redirects, which need to be asynchronous, and for the initial request.
        Making it asynchronous requires making load initialization asynchronous, too.

        No change in behavior.  This will allow us to make more things asynchronous.

        * loader/LoaderStrategy.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create):
        (WebCore::NetscapePlugInStreamLoader::init):
        (WebCore::NetscapePlugInStreamLoader::willSendRequest):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::willSendRequestInternal):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::willSendRequestAsync):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::startLoading):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        (WebCore::SubresourceLoader::startLoading):
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):
        Calling autorelease from a non-main thread was causing crashes.  This is because we need to set up an autorelease pool on that thread, which we have not done.  See:
        https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-1041876
        I replaced the calls to RetainPtr::autorelease with RetainPtr::get.  This causes us to keep the NSURLRequest and NSURLResponse alive as long as the request is being
        responded to in WebKitLegacy and in El Capitan.  Given the number of ResourceRequest and ResourceResponse copies we store, this shouldn't be a problem memory-wise.
        This will all go away once NSURLSession is used for loading in WebKitLegacy, and this is a large step towards that.

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

        [Attachment Support] Implement delegate hooks for attachment element insertion and removal
        https://bugs.webkit.org/show_bug.cgi?id=179016
        <rdar://problem/35250890>

        Reviewed by Tim Horton.

        Implements a mechanism for notifying WebKit2 clients when attachment elements are inserted into or removed from
        the document. See per-change comments below for more details.

        API tests: WKAttachmentTests.AttachmentElementInsertion
                   WKAttachmentTests.AttachmentUpdatesWhenInsertingAndDeletingNewline
                   WKAttachmentTests.AttachmentUpdatesWhenUndoingAndRedoing
                   WKAttachmentTests.AttachmentUpdatesWhenChangingFontStyles
                   WKAttachmentTests.AttachmentUpdatesWhenInsertingLists
                   WKAttachmentTests.AttachmentUpdatesWhenInsertingRichMarkup

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::editorUIUpdateTimerFired):

        Additionally notify the client of any attachment updates.

        (WebCore::Editor::scheduleEditorUIUpdate):

        Add a new helper that starts the editor UI update timer with 0 delay, and use it everywhere we schedule an
        editor UI update.

        (WebCore::Editor::didInsertAttachmentElement):
        (WebCore::Editor::didRemoveAttachmentElement):

        Maintain two sets of attachment element identifiers -- the first one tracking insertions, and the second one
        tracking removals. When an attachment element is inserted, we first check to see if that attachment element has
        just been removed; if so, we don't add it to the inserted identifiers set, but instead remove it from the set of
        removed identifiers. We perform a similar check in the opposite case. This prevents us from notifying the client
        of extraneous insertions and removals during certain editing commands which may reparent and move attachment
        elements around. In both cases, we schedule an editor UI update afterwards, where we will notify the client of
        attachment updates.

        (WebCore::Editor::notifyClientOfAttachmentUpdates):
        (WebCore::Editor::insertAttachmentFromFile):
        * editing/Editor.h:
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::HTMLAttachmentElement):

        Remove the version of HTMLAttachmentElement's constructor that takes a unique identifier.

        (WebCore::HTMLAttachmentElement::insertedIntoAncestor):
        (WebCore::HTMLAttachmentElement::removedFromAncestor):

        Implement these hooks to observe insertion into and removal from the DOM. If the element was attached to or
        removed from an ancestor that was connected to the document, call out to the document's frame's editor. This
        "document-connected" rule prevents us from calling out to the client in cases where (for instance) we append an
        attachment element to a newly created DocumentFragment in preparation for executing a ReplaceSelectionCommand.

        (WebCore::HTMLAttachmentElement::uniqueIdentifier const):
        (WebCore::HTMLAttachmentElement::setUniqueIdentifier):

        Refactor unique identifier to refer to the new attachment identifier attribute instead of a member variable.

        * html/HTMLAttachmentElement.h:
        * html/HTMLAttributeNames.in:

        Add a new attribute representing an attachment element's identifier. This enables us to keep track of particular
        attachments as they are destroyed and recreated as different objects, as a result of some editing commands.

        * page/EditorClient.h:
        (WebCore::EditorClient::didInsertAttachment):
        (WebCore::EditorClient::didRemoveAttachment):

        Add boilerplate editor client hooks for attachment insertion and removal.

2017-11-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224494.

        Introduced LayoutTest flakiness on WK1.

        Reverted changeset:

        "[LayoutState cleanup] Move m_layoutState from RenderView to
        LayoutContext"
        https://bugs.webkit.org/show_bug.cgi?id=179282
        https://trac.webkit.org/changeset/224494

2017-11-03  Simon Fraser  <simon.fraser@apple.com>

        UIWebView is not rendering content that comes on screen during overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=179277
        rdar://problem/34272949

        Reviewed by Tim Horton

        When page or overflow scrolling happens, we do a traversal of GraphicsLayers to determine
        whether the exposed part of tiled layers changed in a way that requires a change in the tile
        coverage. If so, we schedule a compositing layer flush.

        There was no equivalent logic for computing whether the "backing store detached" state
        of a layer changed (which we use to throw away backing store of layers outside the viewport),
        so after scrolling an accelerated overflow:scroll which contained composited layers, we
        would sometimes fail to recompute that we should re-create backing store for revealed
        layers.

        Fix by having GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush() determine
        whether 'intersectsCoverageRect' changed, and if so trigger a flush. This requires
        tracking CommitState for isViewportConstrained-ness, just like we do during commits.

        Also clean up code related to computing the visible rect passed into visibleRectChangeRequiresFlush() and
        flushCompositingState(); these diverged for no good reason. Also clean up the logging a little.
        
        Not testable because UIWebView layout tests are unreliable.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportOffsetChanged):
        (WebCore::Frame::overflowScrollPositionChangedForNode):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const):
        (WebCore::GraphicsLayerCA::visibleRectChangeRequiresFlush const):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::visibleRectForLayerFlushing const):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::didChangeVisibleRect):
        * rendering/RenderLayerCompositor.h:

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

        [Service Workers] Add proper implementation for 'updatefound' event
        https://bugs.webkit.org/show_bug.cgi?id=179302

        Reviewed by Brady Eidson.

        Add proper implementation for 'updatefound' event instead of faking it.
        The 'updatefound' event firing is now triggered from the StorageProcess,
        during the install steps, instead of being fired on WebContent process
        side in jobResolvedWithRegistration().

        Specification:
        - https://w3c.github.io/ServiceWorker/#install (step 7)

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::fireUpdateFoundEvent):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::fireUpdateFoundEvent):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::install):
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::fireUpdateFoundEvent):
        * workers/service/server/SWServerRegistration.h:

2017-11-06  Christopher Reid  <chris.reid@sony.com>

        Use enum classes within FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=175172

        Reviewed by Myles C. Maxfield.

        No new tests, no change in behavior.

        Using enum classes in filesystem to enforce stronger type safety.

        * Modules/webdatabase/OriginLock.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * platform/FileHandle.h:
        * platform/FileStream.cpp:
        * platform/FileSystem.cpp:
        * platform/FileSystem.h:
        * platform/cocoa/FileMonitorCocoa.mm:
        * platform/glib/FileSystemGlib.cpp:
        * platform/network/curl/CurlCacheEntry.cpp:
        * platform/network/curl/CurlCacheManager.cpp:
        * platform/posix/FileSystemPOSIX.cpp:
        * platform/win/FileSystemWin.cpp:
        * rendering/RenderThemeWin.cpp:

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

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

        It is breaking internal builds (Requested by youenn on
        #webkit).

        Reverted changeset:

        "Use VCP H264 encoder for platforms supporting it"
        https://bugs.webkit.org/show_bug.cgi?id=179076
        https://trac.webkit.org/changeset/224497

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

        ScriptExecutionContext::serviceWorkerContainer() should avoid constructing a Navigator object
        https://bugs.webkit.org/show_bug.cgi?id=179322

        Reviewed by Sam Weinig.

        ScriptExecutionContext::serviceWorkerContainer() should avoid constructing a Navigator object
        unnecessarily.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::serviceWorkerContainer):
        * page/DOMWindow.h:

2017-11-06  Colin Bendell  <colin@bendell.ca>

        Added mime type check to the picture source preloader to avoid downloading incompatible resources.
        https://bugs.webkit.org/show_bug.cgi?id=179231

        Reviewed by Alex Christensen.

        Test: http/tests/loading/preload-picture-type.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes): include type match state when selecting candidate imgs
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): added type attribute evaluation and matching

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

        Use VCP H264 encoder for platforms supporting it
        https://bugs.webkit.org/show_bug.cgi?id=179076
        rdar://problem/35180773

        Reviewed by Eric Carlson.

        Covered by existing test coverage.

        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp:
        (WebCore::VideoToolboxVideoEncoderFactory::setActive):
        (WebCore::VideoToolboxVideoEncoderFactory::CreateSupportedVideoEncoder):
        (WebCore::VideoToolboxVideoEncoderFactory::DestroyVideoEncoder):
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.h:

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

        ServiceWorkerContainer should take a PendingActivity while a service worker job is pending
        https://bugs.webkit.org/show_bug.cgi?id=179321

        Reviewed by Youenn Fablet.

        ServiceWorkerContainer should take a PendingActivity while a service worker job is pending.
        ServiceWorkerContainer is an ActiveDOMObject and taking such pending activity makes sure
        the object stays alive while a job is pending (and a promise is not resolved yet). It also
        makes sure the document does not get suspended in the middle of a job.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::jobDidFinish):

2017-11-06  Antti Koivisto  <antti@apple.com>

        @media rules ignored in user agent style sheet html.css
        https://bugs.webkit.org/show_bug.cgi?id=169245
        <rdar://problem/30885951>

        Reviewed by Darin Adler.

        To support accessibility features, allow non-trivial @media rules in user agent stylesheet.

        This patch creates a special stylesheet consisting of rules with media queries seen on user agent stylesheets.
        The queries on this sheet are evaluated with the document's media query evaluator.

        No tests as I don't want to add things to UA style just for testing purposes. This will
        gain coverage when the feature is used.

         * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::addToDefaultStyle):

            Add a helper.
            Build a new stylesheet that consists of complex media rules seen in user agent sheets.

        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSDefaultStyleSheets.h:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::userAgentMediaQueryStyle const):

            Rule set constructed from media queries seen on UA sheet.

        (WebCore::DocumentRuleSets::updateUserAgentMediaQueryStyleIfNeeded const):

            Evalute the media queries if needed.
            Re-evaluate if the rule count of the media query stylesheet increases
            (this could happen when additional UA style is added).

        (WebCore::DocumentRuleSets::resetUserAgentMediaQueryStyle):
        (WebCore::DocumentRuleSets::collectFeatures const):

            Collect the features from userAgentMediaQueryStyle.

        * css/DocumentRuleSets.h:
        (WebCore::DocumentRuleSets::setIsForShadowScope):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        (WebCore::ElementRuleCollector::matchUARules):

            Also match rules in userAgentMediaQueryStyle.

        * css/ElementRuleCollector.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectDocumentWrappers):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):

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

        [LayoutState cleanup] Move m_layoutState from RenderView to LayoutContext
        https://bugs.webkit.org/show_bug.cgi?id=179282
        <rdar://problem/35348653>

        Reviewed by Antti Koivisto.

        LayoutContext now owns the top level LayoutState object.
        It makes RenderView behave like any other renderer by constructing a LayoutStateMaintainer on the stack.
        This is mostly moving code from RenderView.h/.cpp to LayoutContext.h/.cpp and fixing the callsites.
        (While view().frameView().layoutContext().layoutState() is a bit lengthy, it's
        temporary only, since LayoutState is planned to be an argument of the layout() method.  

        Covered by existing test.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layoutDelta const):
        (WebCore::LayoutContext::addLayoutDelta):
        (WebCore::LayoutContext::layoutDeltaMatches):
        (WebCore::LayoutContext::pushLayoutState):
        (WebCore::LayoutContext::pushLayoutStateForPaginationIfNeeded):
        (WebCore::LayoutContext::popLayoutState):
        (WebCore::LayoutContext::checkLayoutState):
        * page/LayoutContext.h:
        (WebCore::LayoutContext::layoutState const):
        (WebCore::LayoutContext::layoutStateEnabled const):
        (WebCore::LayoutContext::disableLayoutState):
        (WebCore::LayoutContext::enableLayoutState):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::computeClipRect):
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):
        (WebCore::LayoutStateDisabler::LayoutStateDisabler):
        (WebCore::LayoutStateDisabler::~LayoutStateDisabler):
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer):
        * rendering/LayoutState.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setLogicalLeftForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::layoutPositionedObject):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::adjustLogicalLeftOffsetForLine const):
        (WebCore::RenderBlock::adjustLogicalRightOffsetForLine const):
        (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const):
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChildren):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::collapseMarginsWithChildInfo):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::hasNextPage const):
        (WebCore::RenderBlockFlow::pageLogicalTopForOffset const):
        (WebCore::RenderBlockFlow::pageLogicalHeightForOffset const):
        (WebCore::RenderBlockFlow::pageRemainingLogicalHeightForOffset const):
        (WebCore::RenderBlockFlow::repaintOverhangingFloats):
        (WebCore::RenderBlockFlow::insertFloatingObject):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::outlineBoundsForRepaint const):
        (WebCore::RenderBox::mapLocalToContainer const):
        (WebCore::RenderBox::clippedOverflowRectForRepaint const):
        (WebCore::RenderBox::computeRectForRepaint const):
        (WebCore::RenderBox::offsetFromLogicalTopOfFirstPage const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        (WebCore::layoutChildIfNeededApplyingDelta):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::takeChildInternal):
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::repaintRectangleInFragments const):
        * rendering/RenderGrid.cpp:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint const):
        (WebCore::RenderInline::computeRectForRepaint const):
        (WebCore::RenderInline::mapLocalToContainer const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::layout):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        (WebCore::RenderMediaControlTimelineContainer::layout):
        (WebCore::RenderTextTrackContainerElement::layout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintRectangle const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint const):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::markForPaginationRelayoutIfNeeded):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint const):
        (WebCore::RenderTableCell::computeRectForRepaint const):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::setLogicalPositionForCell const):
        * rendering/RenderVTTCue.cpp:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        (WebCore::RenderView::layoutContent): Deleted.
        (WebCore::RenderView::checkLayoutState): Deleted.
        (WebCore::RenderView::initializeLayoutState): Deleted.
        (WebCore::RenderView::pushLayoutState): Deleted.
        (WebCore::RenderView::pushLayoutStateForPaginationIfNeeded): Deleted.
        * rendering/RenderView.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineSnapAdjustment const):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::layout):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::RenderTreeUpdater::FirstLetter::update):
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):

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

        JIT call inline caches should cache calls to objects with getCallData/getConstructData traps
        https://bugs.webkit.org/show_bug.cgi?id=144458

        Reviewed by Saam Barati.

        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        (JSC::RuntimeMethod::getCallData): Deleted.
        * bridge/runtime_method.h:

2017-11-06  Maciej Stachowiak  <mjs@apple.com>

        Canonical name of EUC-KR encoding should be EUC-KR, not windows-949
        https://bugs.webkit.org/show_bug.cgi?id=179305

        Reviewed by Alexey Proskuryakov.

        Already covered by:
        LayoutTests/imported/w3c/web-platform-tests/encoding/textdecoder-labels.html
        LayoutTests/imported/w3c/web-platform-tests/encoding/textencoder-constructor-non-utf-expected.html
        LayoutTests/fast/encoding/charset-decode.html
        
        * platform/text/TextCodecICU.cpp: Change registration so the EUC-KR name
        is canonical.
        (WebCore::TextCodecICU::registerCodecs): However, we still want to use the windows-949
        decoder. It's not exactly the same, but the spec calls for that.

2017-11-06  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] CairoGlyphToPathTranslator::path() shouldn't fill out the glyph path
        https://bugs.webkit.org/show_bug.cgi?id=179159

        Reviewed by Michael Catanzaro.

        In case of non-zero synthetic bold offset in CairoGlyphToPathTranslator::path(),
        cairo_glyph_path() should be called just like in the generic case.
        cairo_show_glyphs() performs the actual rasterization of the glyph, but we're
        only interested in the generated path operations.

        No new tests -- covered by existing tests.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::CairoGlyphToPathTranslator::path):

2017-11-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Fix build after r224463
        https://bugs.webkit.org/show_bug.cgi?id=179310

        Unreviewed build fix.

        No new tests (No behavior change).

        * platform/graphics/win/GraphicsContextCairoWin.cpp: Include "GraphicsContextImpl.h".

2017-11-05  Antoine Quint  <graouts@apple.com>

        [Web Animations] Schedule animations registered on the document timeline
        https://bugs.webkit.org/show_bug.cgi?id=179236
        <rdar://problem/35332669>

        Reviewed by Dean Jackson.

        We now schedule animations contained in the document timeline using a three-step approach.

        1. Each time an object that is part of the timing model changes one of its timing properties, we call
           animationTimingModelDidChange() on the document timeline. This schedules performInvalidationTask()
           to be called when the current run loop completes, such that we invalidate the timing model just once
           per run loop.

        2. Once performInvalidationTask() is called, the timing model is invalidated in updateAnimationSchedule().
           We iterate over the registered animations on the timineline and identify the shortest interval between
           the current time and the next moment one of the animations requires a tick to update its value. If we
           find a value below 15ms, we schedule animations to be resolved with scheduleAnimationResolution() right
           away. If the value is above 15ms, and not inifinity, we schedule a one-shot timer for that interval to
           call scheduleAnimationResolution().

        3. Once scheduleAnimationResolution() is called, we call scheduleAnimation() on the shared DisplayRefreshMonitorManager
           to be notified when the next display refresh occurs to actually resolve animations with resolveAnimations().

        Note that, in this patch, resolveAnimations() does nothing, we will add support for interpolating values in
        a future patch.

        Another important thing to note is that every time the document timeline's current time is requested, we cache
        it for the duration of the run loop such that the timing model always uses the same value during a given run loop.

        Finally, to support tests where we check the state of the timing model by manually advancing time, we expose a
        new pause() method on AnimationTimeline for tests to call to avoid the timeline to self-advance.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::addAnimation): Mark that the timing model changed as a result of adding an animation.
        (WebCore::AnimationTimeline::removeAnimation): Mark that the timing model changed as a result of removing an animation.
        (WebCore::AnimationTimeline::bindingsCurrentTime): Update the method signature to no longer be const and call into
        currentTime() instead of reading directly from the m_currentTime member variable since a subclass, like DocumentTimeline,
        may have a custom currentTime() implementation.
        (WebCore::AnimationTimeline::setCurrentTime): Mark that the timing model changed as a result of the timeline current time
        changing.
        (WebCore::AnimationTimeline::bindingsCurrentTime const): Deleted.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::currentTime): Change both methods signatures to no longer be const so that DocumentTimeline's
        implementation of currentTime() may cache the current time in a member variable, enqueuing a callback when the run loop
        completes for this member variable to be reset, and updating some states.
        (WebCore::AnimationTimeline::pause): To be implemented by subclasses.
        (WebCore::AnimationTimeline::animationTimingModelDidChange): Add a new virtual method to indicate that the timing model
        needs invalidating.
        (WebCore::AnimationTimeline::animations const): Add an accessor to allow animations to be accessed by a subclass.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::create):
        (WebCore::DocumentTimeline::DocumentTimeline): Update the constructor signature to receive a Document and a PlatformDisplayID
        since we need a reference to the Document to get at the nowTime() and a PlatformDisplayID to create the DisplayRefreshMonitor.
        (WebCore::DocumentTimeline::~DocumentTimeline): Close the task queue when the timeline gets destroyed.
        (WebCore::DocumentTimeline::currentTime): If we don't have a current cahed current time, compute one and schedule
        the invalidation task if needed so that we may reset the cached value as the run loop completes.
        (WebCore::DocumentTimeline::pause): Allows the timeline not to self-advance, for testing purposes only.
        (WebCore::DocumentTimeline::animationTimingModelDidChange): If we haven't already done so, mark that we need to update our
        animation schedule in the invalidation task and schedule that task if not scheduled yet.
        (WebCore::DocumentTimeline::scheduleInvalidationTaskIfNeeded): Schedule the invalidation task to run as the run loop completes
        if we haven't already done so.
        (WebCore::DocumentTimeline::performInvalidationTask): Update the animation schedule if needed and reset the cached current
        time value.
        (WebCore::DocumentTimeline::updateAnimationSchedule): Iterate over registed animations and find the shortest interval until
        one of them needs to update their animation. If the shortest interval is below 15ms, schedule the animation resolution right
        away. If the shortest inverval is finite and above 15ms, then schedule a one-shot timer for that interval to perform the
        animation resolution then. 
        (WebCore::DocumentTimeline::animationScheduleTimerFired): The one-shot timer to perform the animation resolution has fired,
        we call scheduleAnimationResolution().
        (WebCore::DocumentTimeline::scheduleAnimationResolution): We call scheduleAnimation() on the shared DisplayRefreshMonitorManager
        so that we may resolve animations on the next display refresh, or start a timer if the DisplayRefreshMonitorManager is not available.
        (WebCore::DocumentTimeline::displayRefreshFired): The display is about to refresh, we call resolveAnimations().
        (WebCore::DocumentTimeline::animationResolutionTimerFired): The fallback animation resolution timer has fired, we call resolveAnimations().
        (WebCore::DocumentTimeline::resolveAnimations): Currently do nothing, this is where we'll iterate over registered animations to
        update them with the current time.
        (WebCore::DocumentTimeline::windowScreenDidChange): Notify the shared DisplayRefreshMonitorManager that the PlatformDisplayID
        changed.
        (WebCore::DocumentTimeline::createDisplayRefreshMonitor const): Provide a DisplayRefreshMonitor as part of the
        DisplayRefreshMonitorClient protocol. 
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create): Remove extra white space.
        (WebCore::WebAnimation::setStartTime): Mark that the timing model changed as a result of changing this animation's start time.
        (WebCore::WebAnimation::timeToNextRequiredTick const): Compute the interval until the next time we need to resolve this animation.
        If the provided current time is before this animation's start time, compute the delay until the start time. If the current time
        is after the animation's start time but before the animation's end time, indicate that we want to resolve the animation again
        right away and return 0ms. In any other case, return an infinite interval to indicate that we don't need to be refreshed after
        the provided time.
        * animation/WebAnimation.h:
        * dom/Document.cpp:
        (WebCore::Document::windowScreenDidChange): Notify the document timeline that the PlatformDisplayID changed.
        (WebCore::Document::timeline): Provide the Document and the PlatformDisplayID to the DocumentTimeline.
        * testing/Internals.cpp:
        (WebCore::Internals::pauseTimeline):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Implement ServiceWorkerRegistration.update()
        https://bugs.webkit.org/show_bug.cgi?id=179270

        Reviewed by Youenn Fablet.

        Implement ServiceWorkerRegistration.update():
        - https://w3c.github.io/ServiceWorker/#service-worker-registration-update

        We already had support for the Update algorithm in SWServerJobQueue but
        this patch enhances our support a bit to get us closer to the specification:
        - https://w3c.github.io/ServiceWorker/#update-algorithm

        No new tests, rebaselined existing tests.

        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/ServiceWorkerJobType.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::installing):
        (WebCore::ServiceWorkerRegistration::waiting):
        (WebCore::ServiceWorkerRegistration::active):
        (WebCore::ServiceWorkerRegistration::setInstallingWorker):
        (WebCore::ServiceWorkerRegistration::setWaitingWorker):
        (WebCore::ServiceWorkerRegistration::setActiveWorker):
        (WebCore::ServiceWorkerRegistration::getNewestWorker):
        (WebCore::ServiceWorkerRegistration::update):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::runNextJobSynchronously):
        (WebCore::SWServerJobQueue::runUpdateJob):

2017-11-04  Simon Fraser  <simon.fraser@apple.com>

        Move code that maps a CompositeOperator and BlendMode to a CGBlendMode into a helper function
        https://bugs.webkit.org/show_bug.cgi?id=179290

        Reviewed by Darin Adler.

        Move the code, and use nested switch rather than conditionals.

        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::selectCGBlendMode):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):

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

        Index properties on cross origin Window objects should be enumerable
        https://bugs.webkit.org/show_bug.cgi?id=179289

        Reviewed by Darin Adler.

        Index properties on cross origin Window objects should be enumerable:
        - https://github.com/whatwg/html/pull/3186
        - https://github.com/w3c/web-platform-tests/pull/8045

        All exposed properties used to be enumerable but we had to revert this in
        r224287 because it was not Web-compatible. The HTML specification has now
        been updated so that only index properties are enumerable cross origin.

        No new tests, rebaselined existing tests.

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

2017-11-04  Simon Fraser  <simon.fraser@apple.com>

        Add a GraphicsContextImpl and use it for DispayList::Recorder
        https://bugs.webkit.org/show_bug.cgi?id=179286

        Reviewed by Sam Weinig.

        Start moving towards a model when GraphicsContext has a pointer to an implementation
        ("pimpl") by adding GraphicsContextImpl, and converting display list recording to
        be an implementation of a GraphicsContextImpl.

        No behavior change.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::DisplayListDrawingContext::DisplayListDrawingContext):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::setLegacyShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms):
        (WebCore::GraphicsContext::setShouldAntialias):
        (WebCore::GraphicsContext::setShouldSmoothFonts):
        (WebCore::GraphicsContext::setShouldSubpixelQuantizeFonts):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::drawGlyphs):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::setTextDrawingMode):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::setDrawLuminanceMask):
        (WebCore::GraphicsContext::applyDeviceScaleFactor):
        (WebCore::GraphicsContext::fillEllipse):
        (WebCore::GraphicsContext::strokeEllipse):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::hasPlatformContext const):
        (WebCore::GraphicsContext::paintingDisabled const):
        (WebCore::GraphicsContext::setDisplayListRecorder): Deleted.
        (WebCore::GraphicsContext::isRecording const): Deleted.
        * platform/graphics/GraphicsContextImpl.cpp: Added.
        (WebCore::GraphicsContextImpl::GraphicsContextImpl):
        (WebCore::GraphicsContextImpl::~GraphicsContextImpl):
        * platform/graphics/GraphicsContextImpl.h: Added.
        (WebCore::GraphicsContextImpl::graphicsContext const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getCTM const):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clipBounds const):
        (WebCore::GraphicsContext::drawLinesForText):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality):
        (WebCore::GraphicsContext::isAcceleratedContext const):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clipBounds const):
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::getCTM const):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::drawLinesForText):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setIsCALayerContext):
        (WebCore::GraphicsContext::isCALayerContext const):
        (WebCore::GraphicsContext::setIsAcceleratedContext):
        (WebCore::GraphicsContext::isAcceleratedContext const):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setPlatformShouldSmoothFonts):
        (WebCore::GraphicsContext::setPlatformAlpha):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor):
        (WebCore::GraphicsContext::platformFillEllipse):
        (WebCore::GraphicsContext::platformStrokeEllipse):
        (WebCore::GraphicsContext::setDestinationForRect):
        (WebCore::GraphicsContext::addDestinationAtPoint):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::Recorder):
        (WebCore::DisplayList::Recorder::updateItemExtent const):
        (WebCore::DisplayList::Recorder::extentFromLocalBounds const):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::itemCount const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):

2017-11-04  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] Move all LayoutState* classes to LayoutState.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=179280
        <rdar://problem/35348452>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * page/LayoutContext.cpp:
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer): Deleted.
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer): Deleted.
        (WebCore::SubtreeLayoutStateMaintainer::shouldDisableLayoutStateForSubtree): Deleted.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::~LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):
        (WebCore::LayoutStateDisabler::LayoutStateDisabler):
        (WebCore::LayoutStateDisabler::~LayoutStateDisabler):
        (WebCore::shouldDisableLayoutStateForSubtree):
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer):
        (WebCore::PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer):
        * rendering/LayoutState.h:
        (WebCore::LayoutStateMaintainer::didPush const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer): Deleted.
        (WebCore::PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer): Deleted.
        (): Deleted.
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer): Deleted.
        (WebCore::LayoutStateMaintainer::~LayoutStateMaintainer): Deleted.
        (WebCore::LayoutStateMaintainer::push): Deleted.
        (WebCore::LayoutStateMaintainer::pop): Deleted.
        (WebCore::LayoutStateMaintainer::didPush const): Deleted.
        (WebCore::LayoutStateDisabler::LayoutStateDisabler): Deleted.
        (WebCore::LayoutStateDisabler::~LayoutStateDisabler): Deleted.

2017-11-04  Zalan Bujtas  <zalan@apple.com>

        [LayoutState cleanup] Move offset/cliprect/pagination code to dedicate methods
        https://bugs.webkit.org/show_bug.cgi?id=179279
        <rdar://problem/35348171>

        Reviewed by Antti Koivisto.

        This is in preparation for creating the initial LayoutSate through LayoutStateMaintainer.

        Moving code around. No change in functionality.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::computeOffsets):
        (WebCore::LayoutState::computeClipRect):
        (WebCore::LayoutState::computePaginationInformation):
        * rendering/LayoutState.h:

2017-11-01  Darin Adler  <darin@apple.com>

        Simplify event dispatch code and make it a bit more consistent
        https://bugs.webkit.org/show_bug.cgi?id=178991

        Reviewed by Chris Dumez.

        Straighten out event dispatch code in three ways:

        1) Add an Event::resetAfterDispatch function, and use it instead of the multiple
           separate functions that were used before to reset after dispatching. This fixed
           an extremely minor bug where we would leave some kinds of state on some event
           objects in unusual cases after dispatching the events.

        2) Remove IDBEventDispatcher and make its callers use EventDispatcher instead.
           This leaves us with one less event dispatch code path to maintain, more shared code.

        3) Remove boolean return values from functions that take event objects and
           dispatch the events. The return values are redundant with various things that
           can be checked by looking at the event itself. The legacy return value indicates
           whether the event has its "canceled flag" set, which means that the default
           behavior should be prevented. If that is what we need to check, it's easier
           to read the code and see that it's correct if it calls the named function
           "defaultPrevented" directly. More importantly, callers can also call whatever
           other function is appropriate to ask the specific relevant question to their needs.
           The general rule is that default behavior that we want to allow even with an
           untrusted event can be inside a default event handler function. Default behavior
           that should only happen for the browser-generated event can and should be done
           after dispatching the event, in the code that dispatches it; but that requires
           explicitly checking "defaultPrevented".

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::dispatchEvent): Removed boolean return value.
        * Modules/indexeddb/IDBDatabase.h: Ditto.

        * Modules/indexeddb/IDBEventDispatcher.cpp: Removed.
        * Modules/indexeddb/IDBEventDispatcher.h: Removed.

        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::dispatchEvent): Removed boolean return value.
        Added protection for "this" since the function accesses it after dispatching the event.
        * Modules/indexeddb/IDBOpenDBRequest.h: Ditto.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent): Removed boolean return value. Instead of using
        IDBEventDispatcher, use EventDispatcher's new function that takes an initializer_list
        with a list of event targets. Added protection for "this" since the function accesses
        it after dispatching the event.
        * Modules/indexeddb/IDBRequest.h: Ditto.
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::dispatchEvent): Ditto.
        * Modules/indexeddb/IDBTransaction.h: Ditto.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::dispatchEvent): Removed boolean return value.
        * Modules/mediastream/RTCPeerConnection.h: Ditto.
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::shippingAddressChanged): Don't dispatch an event if
        m_isUpdating is true; preserves behavior that was implemented in
        PaymentRequest::dispatchEvent before. Since this is the source of the trusted
        event, cleaner to implement the rule here instead of overriding dispatchEvent.
        (WebCore::PaymentRequest::shippingOptionChanged): Ditto.
        (WebCore::PaymentRequest::dispatchEvent): Deleted.
        * Modules/paymentrequest/PaymentRequest.h: Ditto.

        * Sources.txt: Removed IDBEventDispatcher.cpp.
        * WebCore.xcodeproj/project.pbxproj: Removed IDBEventDispatcher.h/cpp.

        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent): Updated to call defaultPrevented
        directly instead of using the return value of dispatchEvent.
        (WebCore::Element::dispatchWheelEvent): Ditto.
        (WebCore::Element::dispatchKeyEvent): Ditto.
        (WebCore::Element::dispatchFocusInEvent): Removed assertion, since the
        underlying event dispatching takes care of it.
        (WebCore::Element::dispatchFocusOutEvent): Ditto.
        (WebCore::Element::dispatchFocusEvent): Call dispatchEvent instead of
        calling EventDispatcher::dispatchEvent. There is no good reason to use
        EventDispatcher directly.
        (WebCore::Element::dispatchBlurEvent): Ditto.

        * dom/Event.cpp:
        (WebCore::Event::eventInterface const): Deleted. Moved into header since this is
        short and if called in a non-polymorphic context it's good to have it be inlined.
        (WebCore::Event::isUIEvent const): Ditto.
        (WebCore::Event::isMouseEvent const): Ditto.
        (WebCore::Event::isFocusEvent const): Ditto.
        (WebCore::Event::isKeyboardEvent const): Ditto.
        (WebCore::Event::isInputEvent const): Ditto.
        (WebCore::Event::isCompositionEvent const): Ditto.
        (WebCore::Event::isTouchEvent const): Ditto.
        (WebCore::Event::isClipboardEvent const): Ditto.
        (WebCore::Event::isBeforeTextInsertedEvent const): Ditto.
        (WebCore::Event::isBeforeUnloadEvent const): Ditto.
        (WebCore::Event::isErrorEvent const): Ditto.
        (WebCore::Event::isTextEvent const): Ditto.
        (WebCore::Event::isWheelEvent const): Ditto.
        (WebCore::Event::receivedTarget): Ditto.
        (WebCore::Event::resetAfterDispatch): Added. Replaces functions like
        clearEventPath and resetPropagationFlags, covering all the things we need to clear
        after dispatching an event.

        * dom/Event.h: Removed some unneeded includes and forward declarations. Moved bodies
        of multi-line inline member functions out of the class definition. Changed argument
        type of setEventPhase and m_eventPhase to an enum rather than just an integer, since
        only the getter is for use from the bindings. Removed clearEventPath, srcElement, and
        resetPropagationFlags. Sorted the isXXX functions alphabetically and removed previous
        attempts to make categories out of them. Marked the constructor explicit since it has
        a single argument. Moved trivially short bodies into the class definition.

        * dom/Event.idl: Use ImplementedAs to implement srcElement so we don't need it in
        the C++ code.

        * dom/EventContext.cpp:
        (WebCore::EventContext::EventContext): Removed assertion since we now handle event
        contexts without nodes so we can use this to dispatch events for IDB, for example.
        (WebCore::EventContext::handleLocalEvents const): Add code to handle non-node event
        targets by calling fireEventListeners directly.
        (WebCore::MouseOrFocusEventContext::MouseOrFocusEventContext): Take a reference
        insetad of a pointer for the node.
        (WebCore::TouchEventContext::TouchEventContext): Ditto.
        (WebCore::TouchEventContext::handleLocalEvents const): Streamline a bit by improving
        the checkReachability function to be easier to call. Also removed an unneeded assertion
        just before calling downcast<>, the same assertion that downcast<> itself does.
        (WebCore::TouchEventContext::checkReachability const): Chagned argument type to take
        a Ref& so the caller doesn't have to call get() or ptr().

        * dom/EventContext.h: Removed unneeded FIXME and currentTargetSameAsTarget function.
        Changed arguemnt types to use Node& instead of Node* as appropriate. Removed unused
        functions from TouchEventContext, made more private, and changed data members to Ref
        instead of RefPtr. Removed unused NotTouchList value from TouchListType enumeration.
        Changed touchList function to return a reference instead of a pointer.

        * dom/EventDispatcher.cpp: Removed unneeded includes.
        (WebCore::dispatchEventInDOM): Removed use of currentTargetSameAsTarget since it's
        clearer if written out.
        (WebCore::EventDispatcher::dispatchEvent): Changed no-event dispatch assertion to
        use RELEASE_ASSERT_WITH_SECURITY_IMPLICATION since the style checker says so, but
        it still doesn't assert anything in release builds because the check in
        NoEventDispatchAssertion itself is debug-only. Moved the calls to EventPath's
        setRelatedTarget and retargetTouchLists functions inside the EventPath constructor.
        Removed the second no-event dispatch assertion because we only need one. Replaced
        calls to clearEventPath, setCurrentTarget(nullptr), resetPropagationFlags,
        and setEventPhase(NONE) and with a call to resetAfterDispatch. Moved the code that
        temporarily sets the target to a different value when calling default event handlers
        into the block that calls the default event handlers. Added a new overload that
        takes an initializer list of event targets so we can dispatch events that are not
        being sent to nodes.

        * dom/EventDispatcher.h: Fixed misleading copyright dates and names since this file
        just contains a couple of function declarations. Added new overload of dispatchEvent.

        * dom/EventPath.cpp:
        (WebCore::WindowEventContext::WindowEventContext): Take references instead of pointers.
        (WebCore::EventPath::EventPath): Moved the bulk of construction into a new function
        named buildPath, so it can still use "return" without skipping the additions here.
        Added calls to setRelatedTarget and retargetTouchLists and now both can be private.
        Also added a new overload that takes event targets that are not nodes.
        (WebCore::EventPath::buildPath): Added. Contains what used to be in the constructor.
        But use some references instead of pointers and refactor a bit using lambdas.
        (WebCore::EventPath::retargetTouchList): Added. Makes the retargetTouchLists function
        shorter and less repetetive.
        (WebCore::EventPath::retargetTouchLists): Updated to call retargetTouchList.
        (WebCore::EventPath::hasEventListeners const): Deleted. This was unused.
        * dom/EventPath.h: Added a constructor that takes an initializer list of event targets.
        Made retargetTouchEvents and setRelatedTarget private and used them in the constructor
        insead of expecting clients to call them. Removed unused hasEventListeners and
        lastContextIfExists functions. Moved body of the eventTargetRespectingTargetRules
        function out of the class definition.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::dispatchEventForBindings): Updated so it does not expect
        dispatchEvent to return a boolean. Instead call a function on the event after dispatching.
        Decided to use legacyReturnValue instead of !defaultPrevented, because this is exactly
        the return value that the returnValue property is referring to.
        (WebCore::EventTarget::dispatchEvent): Removed return value. Replaced calls to
        resetPropagationFlags and setEventPhase(NONE) with a call to resetAfterDispatch.
        I noticed that there was a local boolean here named "defaultPrevented", which was
        backwards; the value in that local was "default not prevented". Doesn't matter since
        the boolean return value was removed.
        (WebCore::EventTarget::fireEventListeners): Removed the boolean return value.

        * dom/EventTarget.h: Added initial values to members of ListenerOptions and
        AddEventListenerOptions; maybe we can get rid of the constructors some day.
        Removed booelan return values from dispatchEvent and fireEventListeners.

        * dom/KeyboardEvent.cpp: Removed unneeded include of EventDispatcher.h.

        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent): Got rid of boolean return value.
        Removed special case code that sometimes called dispatchTouchEvent, since that
        just turns around and calls EventDispatcher::dispatchEvent just like this function.
        (WebCore::Node::dispatchDOMActivateEvent): Removed boolean return value, removed
        integer detail argument and moved the logic to compute the value of the detail
        peroprty and to call setDefaultHandled on the underlying click event in here.
        This is a private helper function used only in one place.
        (WebCore::Node::dispatchTouchEvent): Deleted.
        (WebCore::Node::defaultEventHandler): Updated for change to dispatchDOMActivateEvent.
        * dom/Node.h: Updated for the above changes.

        * dom/RejectedPromiseTracker.cpp:
        (WebCore::RejectedPromiseTracker::reportUnhandledRejections): Use defaultPrevented
        directly instead of the return value from dispatchEvent.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::enqueueEvent): Moved assertions here ...
        (WebCore::ScopedEventQueue::dispatchEvent const): ... from here. Also changed this
        to call Node::dispatchEvent instead of calling EventDispatcher::dispatchEvent directly.

        * dom/SimulatedClick.cpp:
        (WebCore::simulateMouseEvent): Call Element::dispatchEvent instead of calling
        EventDispatcher::dispatchEvent directly.

        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent): Use defaultPrevented directly instead of the
        return value from dispatchEvent.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll): Ditto.
        (WebCore::FrameSelection::dispatchSelectStart): Ditto.

        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::didDispatchClick): Take a reference instead of a pointer.
        * html/CheckboxInputType.h: Updated for above and to use final instead of override.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity): Use defaultPrevented directly instead
        of the return value from dispatchEvent.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareForSubmission): Use defaultPrevented directly instead
        of the return value from dispatchEvent.
        (WebCore::HTMLFormElement::reset): Ditto.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didDispatchClickEvent): Updated to pass references instead
        of pointer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::dispatchEvent): Got rid of boolean return value.
        * html/HTMLMediaElement.h: Ditto.

        * html/HTMLPlugInElement.h: Use "delete" instead of just a private function for something
        that should never be called.

        * html/InputType.cpp:
        (WebCore::InputType::didDispatchClick): Take a reference instead of a pointer.
        * html/InputType.h: Ditto.
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::didDispatchClick): Ditto.
        * html/RadioInputType.h: Updated for above and to use final instead of override.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::dispatchEvent): Got rid of boolean return value.
        * html/track/TextTrackCue.h: Ditto.

        * inspector/InspectorInstrumentation.cpp: Removed unneeded include of EventDispatcher.h.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent): Streamlined code a bit so we only have a single
        call to dispatchEvent. Improved comments.
        (WebCore::DOMWindow::dispatchEvent): Removed return value. Added comments. Replaced
        calls to setCurrentTarget(null), setEventPhase(NONE), and resetPropagationFlags with
        a call to resetAfterDispatch.
        * page/DOMWindow.h: Updated to get rid of the boolean return value.

        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor): Use defaultPrevented directly instead
        of the return value from dispatchEvent.

        * page/EventHandler.cpp:
        (WebCore::dispatchSelectStart): Use defaultPrevented directly instead
        of the return value from dispatchEvent.
        (WebCore::EventHandler::accessibilityPreventsEventPropagation): Fixed spelling error in the
        name of this function.
        (WebCore::EventHandler::dispatchDragSrcEvent): Got rid of boolean return value.
        (WebCore::EventHandler::handleTouchEvent): Call dispatchEvent instead of dispatchTouchEvent;
        there was no difference between the two except that dispatchTouchEvent required downcasting
        and might some day lead to us missing some behavior implemented in an override to dispatchEvent.
        * page/EventHandler.h: Updated for above changes.

        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::clone): Removed dead code that was causing a compiler warning.

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject): Use defaultPrevented
        directly instead of the return value from dispatchEvent.

2017-11-04  Aishwarya Nirmal  <anirmal@apple.com>

        [Touch Bar Web API] Add support for menuitem tag
        https://bugs.webkit.org/show_bug.cgi?id=179020

        Reviewed by Ryosuke Niwa.

        The Touch Bar Web API will make use of the menu and menuitem tags
        to represent the NSTouchBar and NSTouchBarItem respectively.
        Since WebKit currently does not offer support for the menuitem tag,
        this change adds it in. There is a runtime flag for this tag, which
        is set to false by default.

        A specification for the menuitem element can be found at
        https://www.w3.org/TR/2013/WD-html51-20130528/interactive-elements.html#the-menuitem-element.
        More attributes of this element will be implemented in future patches.

        Test: fast/html/menuitem-element.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLMenuItemElement.cpp: Added.
        (WebCore::HTMLMenuItemElement::HTMLMenuItemElement):
        (WebCore::HTMLMenuItemElement::create):
        * html/HTMLMenuItemElement.h: Added.
        * html/HTMLMenuItemElement.idl: Added.
        * html/HTMLTagNames.in:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setMenuItemElementEnabled):
        (WebCore::RuntimeEnabledFeatures::menuItemElementEnabled const):

2017-11-03  Zalan Bujtas  <zalan@apple.com>

        LayoutState should take RenderBox reference.
        https://bugs.webkit.org/show_bug.cgi?id=179272
        <rdar://problem/35345247>

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::propagateLineGridInfo):
        (WebCore::LayoutState::establishLineGrid):
        * rendering/LayoutState.h: type tightening.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutState):
        * rendering/RenderView.h:

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

        Implement ServiceWorkerContainer.getRegistration
        https://bugs.webkit.org/show_bug.cgi?id=179253

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/service-worker-getRegistration.html

        Added a map of ServiceWorkerRegistration in ServiceWorkerContainer.
        Removing a similar map from SWClientConnection as it is more convenient to have this map per ScriptExecutionContext.

        This map allows returning the same JS object for different getRegistration.
        Delegating the actual matching to SWServer::Connection which is implemented on the StorageProcess through IPC.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContainer.idl:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::~ServiceWorkerRegistration):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::updateRegistrationState):
        (WebCore::SWClientConnection::addServiceWorkerRegistration): Deleted.
        (WebCore::SWClientConnection::removeServiceWorkerRegistration): Deleted.
        * workers/service/server/SWClientConnection.h:

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

        [iOS-WK1] Fix thread safety issue in WebSQLiteDatabaseTrackerClient
        https://bugs.webkit.org/show_bug.cgi?id=179190

        Reviewed by David Kilzer.

        WebSQLiteDatabaseTrackerClient and its HystererisActivity member are constructed on the UIThread. The
        HystererisActivity activity also fires on the UIThread, which means that WebSQLiteDatabaseTrackerClient::hysteresisUpdated()
        gets called on the UIThread.

        However, the code in WebSQLiteDatabaseTrackerClient::willBeginFirstTransaction() / WebSQLiteDatabaseTrackerClient::didFinishLastTransaction()
        uses callOnMainThread() before calling methods on the HysteresisActivity. callOnMainThread() dispatches to the WebThread on WK1 iOS, which
        would lead to crashes when calling methods of the HystererisActivity object:
        *** -[CFRunLoopTimer respondsToSelector:]: message sent to deallocated instance 0x1c0b6a500

        To address the issue, we now dispatch_async() to the main queue in willBeginFirstTransaction() / didFinishLastTransaction()
        instead of using callOnMainThread(). I also added assertions to catch issues like these.

        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        (WebCore::WebSQLiteDatabaseTrackerClient::willBeginFirstTransaction):
        (WebCore::WebSQLiteDatabaseTrackerClient::didFinishLastTransaction):
        (WebCore::WebSQLiteDatabaseTrackerClient::hysteresisUpdated):

2017-11-03  Ryosuke Niwa  <rniwa@webkit.org>

        ASSERTION FAILED: NoEventDispatchAssertion::InMainThread::isEventAllowed() || (frameView && frameView->isInChildFrameWithFrameFlattening())
        https://bugs.webkit.org/show_bug.cgi?id=179259

        Reviewed by Youenn Fablet.

        Avoid updating the layout inside HTMLMediaElement::stop() and MediaElementSession::~MediaElementSession

        No new tests since existing tests cover this.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::userCancelledLoad): Don't update VTT cues when the active DOM objects are being stopped.
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::removeSession): Update the updateNowPlayingInfo asynchronously
        since this function can be called inside HTMLMediaElement::~HTMLMediaElement.

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

        Add WEBCORE_EXPORT to CachedResourceHandleBase
        https://bugs.webkit.org/show_bug.cgi?id=179251

        * loader/cache/CachedResourceHandle.h:
        (WebCore::CachedResourceHandleBase::get const): Deleted.
        (WebCore::CachedResourceHandleBase::operator! const): Deleted.
        (WebCore::CachedResourceHandleBase::operator UnspecifiedBoolType const): Deleted.
        (WebCore::CachedResourceHandleBase::operator=): Deleted.
        I'll need this soon for bug 179251, and having to touch CachedResourceHandle.h causes me to rebuild everything.
        Committing it separately greatly increases my debugging and comparison speed.

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

        Unreviewed, rolling out r224428, r224435, and r224440.
        https://bugs.webkit.org/show_bug.cgi?id=179274

        Broke iOS and internal builds (Requested by ryanhaddad on
        #webkit).

        Reverted changesets:

        "Use VCP H264 encoder for platforms supporting it"
        https://bugs.webkit.org/show_bug.cgi?id=179076
        https://trac.webkit.org/changeset/224428

        "Use VCP H264 encoder for platforms supporting it"
        https://bugs.webkit.org/show_bug.cgi?id=179076
        https://trac.webkit.org/changeset/224435

        "Use VCP H264 encoder for platforms supporting it"
        https://bugs.webkit.org/show_bug.cgi?id=179076
        https://trac.webkit.org/changeset/224440

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

        Requests handled by Service Worker should not go through preflighting
        https://bugs.webkit.org/show_bug.cgi?id=179250

        Reviewed by Alex Christensen.

        Test: http/tests/workers/service/service-worker-crossorigin-fetch.html
        In case of cross origin requests needed preflighting that may be served through SW, the following is done:
        - Bypass preflight
        - Put service workers mode as Only so that if SW is not handling the request, the load will fail
        - If load fails, restart DocumentThreadableLoader load with preflight.

        Additional testing should be added when we properly handle the case where no fetch event handler is registered in the service worker.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::didFail):
        * loader/DocumentThreadableLoader.h:
        * loader/ResourceLoaderOptions.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setSelectedServiceWorkerIdentifierIfNeeded):
        * platform/network/ResourceErrorBase.h:

2017-11-03  Zalan Bujtas  <zalan@apple.com>

        Remove redundant LayoutStateMaintainer argument (RenderView&)
        https://bugs.webkit.org/show_bug.cgi?id=179269
        <rdar://problem/35344397>

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layoutShadowControls):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::layout):
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):

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

        Use VCP H264 encoder for platforms supporting it
        https://bugs.webkit.org/show_bug.cgi?id=179076
        rdar://problem/35180773

        Reviewed by Eric Carlson.

        Covered by existing test coverage.

        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp:
        (WebCore::VideoToolboxVideoEncoderFactory::setActive):
        (WebCore::VideoToolboxVideoEncoderFactory::CreateSupportedVideoEncoder):
        (WebCore::VideoToolboxVideoEncoderFactory::DestroyVideoEncoder):
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.h:

2017-11-03  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix build after r224373
        https://bugs.webkit.org/show_bug.cgi?id=179265

        Unreviewed build fix.

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

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

        Remove an invalid ASSERT that is seen intermittently.
        https://bugs.webkit.org/show_bug.cgi?id=179186

        Unreviewed.

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::removeClientServiceWorkerRegistration): This is an invalid ASSERT,
          it's definitely racey over IPC.

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

        [WPE] Remove unneeded USE(LIBEPOXY) guards
        https://bugs.webkit.org/show_bug.cgi?id=179228

        Reviewed by Carlos Garcia Campos.

        USE(LIBEPOXY) is already mandatory for WPE.

        * platform/graphics/egl/GLContextEGLWPE.cpp:
        * platform/graphics/wpe/PlatformDisplayWPE.cpp:

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

        Layout viewport rect is too wide after window resize
        https://bugs.webkit.org/show_bug.cgi?id=175235

        Fix a formatting mistake that was introduced by r224241.

        Reviewed by Simon Fraser.

        No change in behavior.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

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

        Implement Service Worker Matching Registration algorithm
        https://bugs.webkit.org/show_bug.cgi?id=178882

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/service-worker-clear.html

        Adding support for scope as part of the ServiceWorkerRegistrationKey to disambiguate several service workers registered with different scopes.
        Adding the Service Worker Registration algorithm in SWServer and adding internals API to test it.
        Making ServiceWorkerRegistrationKey a class to protect its internal field to be reused in wrong places.

        Added preliminary support for clearing service workers for a given session ID as this is needed by WTR for stable testing.

        * testing/Internals.cpp:
        (WebCore::Internals::hasServiceWorkerRegistration):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::registrationKey const):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::hash const):
        (WebCore::ServiceWorkerRegistrationKey::operator== const):
        (WebCore::ServiceWorkerRegistrationKey::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationKey.h:
        (WebCore::ServiceWorkerRegistrationKey::encode const):
        (WebCore::ServiceWorkerRegistrationKey::decode):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::clear):
        (WebCore::SWServer::doRegistrationMatching const):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::doRegistrationMatching const):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::~SWServerJobQueue):
        * workers/service/server/SWServerRegistration.h:

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

        Add basic OffscreenCanvas interface
        https://bugs.webkit.org/show_bug.cgi?id=179213
        <rdar://problem/35326778>

        Reviewed by Sam Weinig.

        Add the basic infrastructure for the OffscreenCanvas
        object, so it can be created from script.

        Test: http/wpt/offscreen-canvas/offscreencanvas.constructor.html

        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventTargetCustom.cpp:
        * dom/EventTargetFactory.in:
        * html/OffscreenCanvas.cpp: Added.
        (WebCore::OffscreenCanvas::create):
        (WebCore::OffscreenCanvas::OffscreenCanvas):
        (WebCore::OffscreenCanvas::width const):
        (WebCore::OffscreenCanvas::setWidth):
        (WebCore::OffscreenCanvas::height const):
        (WebCore::OffscreenCanvas::setHeight):
        * html/OffscreenCanvas.h: Added.
        * html/OffscreenCanvas.idl: Added.

2017-11-03  Ryosuke Niwa  <rniwa@webkit.org>

        Crash inside ChildListMutationAccumulator::enqueueMutationRecord()
        https://bugs.webkit.org/show_bug.cgi?id=179234
        <rdar://problem/35287748>

        Reviewed by Darin Adler.

        Fixed the crash by keeping MutationObserver referenced by MutationObserverInterestGroup alive.

        Also added hasCallback() virtual function on MutationObserver to check whether the callback is alive
        to work around the bug that JS function referenced by MutationObserver isn't kept alive.
        We'll address this bug separately in https://webkit.org/b/179224.

        Test: fast/dom/MutationObserver/disconnect-observer-while-mutation-records-are-enqueued-crash.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeaderContent): Added an override for the newly added virtual hasCallback().
        * dom/MutationCallback.h:
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::deliver): Added the aforementioned workaround.
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::MutationObserverInterestGroup): Fixed the crash by using Ref.
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord): Ditto.
        * dom/MutationObserverInterestGroup.h:
        * dom/NativeNodeFilter.cpp:
        (WebCore::NativeNodeFilter::hasCallback const): Always return true here. This function is never called
        but we still need to implement it since NodeFilter has a pure virtual hasCallback() now.
        * dom/NativeNodeFilter.h:
        * dom/Node.cpp:
        (WebCore::collectMatchingObserversForMutation): Use Ref to fix the crash.
        (WebCore::Node::registeredMutationObservers): Ditto.
        * dom/Node.h:
        * dom/NodeFilter.h:

2017-11-03  Zalan Bujtas  <zalan@apple.com>

        RenderObject::*positioned() naming cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179206
        <rdar://problem/35325254>

        Reviewed by Darin Adler.

        +isFixedPositioned()
        +isAbsolutelyPositioned()
        isRelPositioned() -> isRelativelyPositioned()

        Covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue):
        * dom/Element.cpp:
        (WebCore::layoutOverflowRectContainsAllDescendants):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::renderName const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::fixedElementLaysOutRelativeToFrame const):
        (WebCore::RenderBox::foregroundIsKnownToBeOpaqueInRect const):
        (WebCore::RenderBox::mapLocalToContainer const):
        (WebCore::RenderBox::pushMappingToContainer const):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint const):
        (WebCore::RenderBox::offsetFromContainer const):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned const):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderBoxModelObject::offsetForInFlowPosition const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::renderName const):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::adjustedPositionRelativeToOffsetParent const):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderersViaLayers):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::renderName const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::renderName const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::computeExtent const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer const):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock const):
        (WebCore::RenderObject::outputRenderObject const):
        (WebCore::RenderObject::offsetParent const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isPositioned const):
        (WebCore::RenderObject::isInFlowPositioned const):
        (WebCore::RenderObject::isFixedPositioned const):
        (WebCore::RenderObject::isAbsolutePositioned const):
        (WebCore::RenderObject::isRelativePositioned const):
        (WebCore::RenderObject::isStickyPositioned const):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::RenderObjectBitfields::isRelativePositioned const):
        (WebCore::RenderObject::RenderObjectBitfields::isPositioned const):
        (WebCore::RenderObject::isRelPositioned const): Deleted.
        (WebCore::RenderObject::RenderObjectBitfields::isRelPositioned const): Deleted.

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

        Use a single identifier type to identify Service Workers
        https://bugs.webkit.org/show_bug.cgi?id=179192

        Reviewed by Brady Eidson.

        Use a single identifier type to identify Service Workers. We had both a String
        identifier and a uint64_t identifier for each service worker. We now consistently
        use a ServiceWorkerIdentifier which is a strongly typed identifier backed by a
        uint64_t.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoaderOptions.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setSelectedServiceWorkerIdentifierIfNeeded):
        * loader/cache/CachedResourceRequest.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::ServiceWorker):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerIdentifier.h: Copied from Source/WebCore/workers/service/ServiceWorkerContextData.cpp.
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::decode):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::serviceWorkerThreadProxy const):
        (WebCore::SWContextManager::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThread.h:
        (WebCore::ServiceWorkerThread::identifier const):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::generateServiceWorkerIdentifier):
        (WebCore::SWServer::Connection::scriptContextFailedToStart):
        (WebCore::SWServer::Connection::scriptContextStarted):
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::scriptContextStarted):
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::scriptContextStarted):
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::setActiveServiceWorkerIdentifier):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::create):
        (WebCore::SWServerWorker::identifier const):

2017-11-02  Andy Estes  <aestes@apple.com>

        [Payment Request] show() should only be called with user activation
        https://bugs.webkit.org/show_bug.cgi?id=179056

        Reviewed by Sam Weinig.

        Updated existing tests to call PaymentRequest.show() with user activation.

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

2017-11-03  Daniel Bates  <dabates@apple.com>

        Invalidate node list when associated form control element is removed
        https://bugs.webkit.org/show_bug.cgi?id=179232
        <rdar://problem/35308269>

        Reviewed by Ryosuke Niwa.

        A node list represents a live view of the DOM. Invalidate the node list
        associated with a form element whenever one of its associated form control
        elements is removed.

        Test: fast/forms/node-list-remove-button-from-form.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::removeFormElement):

2017-11-03  Frederic Wang  <fwang@igalia.com>

        Add USE(APPLE_INTERNAL_SDK)-guards around SPI in ResourceHandle code
        https://bugs.webkit.org/show_bug.cgi?id=136107

        Based on patch by Daniel Bates <dabates@apple.com>
        Reviewed by Darin Adler.

        No new tests, behavior unchanged.

        * platform/network/ResourceHandleClient.h: Replace includes of private headers with CFNetworkSPI.h.
        * platform/network/ResourceHandleInternal.h: Ditto.
        * platform/network/ios/ResourceHandleIOS.mm: Add USE(APPLE_INTERNAL_SDK)-guard around SPI
        headers and forward declare NSURLRequest SPI and constant _kCFStreamSSLTrustedLeafCertificates
        for clients that build without the internal SDK. Add BSD license block to file.
        (WebCore::ResourceHandle::createSSLPropertiesFromNSURLRequest): Fix code style issues; use
        nullptr instead of 0, use reinterpret_cast instead of C-style cast, remove unnecessary
        "using namespace WebCore"
        and rename variables to improve readability.
        * platform/network/mac/ResourceErrorMac.mm: Add USE(APPLE_INTERNAL_SDK)-guard around private
        headers and add typedef for CFCachedURLResponseRef for clients that build without the
        internal SDK.

2017-11-03  Antti Koivisto  <antti@apple.com>

        Crash in WebCore::RenderStyle::overflowX with display:contents
        https://bugs.webkit.org/show_bug.cgi?id=178857
        <rdar://problem/35201120>

        Reviewed by Zalan Bujtas.

        Crash test by Renata Hodovan.

        Tests: fast/css/display-contents-all.html
               fast/css/display-contents-document-element.html

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

        For document element 'display:contents' should adjust to 'display:block' like it does for other display types.

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

        Replace some auto* with RefPtr within WebCore/html
        https://bugs.webkit.org/show_bug.cgi?id=179218
        <rdar://problem/35102567>

        Reviewed by Ryosuke Niwa.

        No changes in behaviors.

        In this patch, it replace some auto* pointers with RefPtrs. The way it achieves this goal is to wrap
        the RHS with makeRefPtr(). Also, some methods have been modified to return RefPtrs directly. Those
        include:
            HTMLInputElement::list,
            HTMLInputElement::dataList,
            HTMLLabelElement::control,
            HTMLLegendElement::associatedControl,
            HTMLSummaryElement::detailsElement,
            HTMLTableElement::tHead,
            HTMLTableElement::tFoot,
            HTMLTablePartElement::findParentTable,
            HTMLTableRowElement.cpp::findTable, local function
            RadioNodeList.cpp::toRadioButtonInputElement, local function
            CanvasStyle::canvasGradient,
            CanvasStyle::canvasPattern,
            WebGLRenderingContextBase::validateTextureBinding,
            GraphicsContext::strokeGradient,
            GraphicsContext::fillGradient.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::labelChanged):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement const):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::title const):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetCaption):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions const):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):
        (WebCore::FileInputType::disabledAttributeChanged):
        (WebCore::FileInputType::multipleAttributeChanged):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::formOwnerRemovedFromTree):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedIntoAncestor):
        (WebCore::HTMLBodyElement::didFinishInsertingNode):
        (WebCore::HTMLBodyElement::scrollTo):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::isActiveSummary const):
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::namedItem):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::editabilityFromContentEditableAttr):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore:: const):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::namedItem):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedByParser):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::list const):
        (WebCore::HTMLInputElement::dataList const):
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * html/HTMLInputElement.h:
        * html/HTMLLabelElement.cpp:
        (WebCore::firstElementWithIdIfLabelable):
        (WebCore::HTMLLabelElement::control const):
        (WebCore::HTMLLabelElement::form const):
        (WebCore::HTMLLabelElement::setActive):
        (WebCore::HTMLLabelElement::setHovered):
        (WebCore::HTMLLabelElement::willRespondToMouseClickEvents):
        (WebCore::HTMLLabelElement::focus):
        (WebCore::HTMLLabelElement::accessKeyAction):
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::associatedControl):
        (WebCore::HTMLLegendElement::focus):
        (WebCore::HTMLLegendElement::accessKeyAction):
        (WebCore::HTMLLegendElement::form const):
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs const):
        * html/HTMLMediaElement.cpp:
        (WebCore::needsAutoplayPlayPauseEventsQuirk):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::removeTextTrack):
        (WebCore::HTMLMediaElement::layoutSizeChanged):
        * html/HTMLObjectElement.cpp:
        (WebCore::shouldBeExposed):
        (WebCore::HTMLObjectElement::appendFormData):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::recalcSelectOptions):
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::viewportChangeAffectedPicture const):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::bindingsInstance):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::willDetachRenderers):
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay const):
        (WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting):
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::attributeChanged):
        (WebCore:: const):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::parseAttribute):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::addSubresourceAttributeURLs const):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement const):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption const):
        (WebCore::HTMLTableElement::tHead const):
        (WebCore::HTMLTableElement::tFoot const):
        (WebCore::HTMLTableElement::createTHead):
        (WebCore::HTMLTableElement::deleteTHead):
        (WebCore::HTMLTableElement::createTFoot):
        (WebCore::HTMLTableElement::deleteTFoot):
        (WebCore::HTMLTableElement::createCaption):
        (WebCore::HTMLTableElement::deleteCaption):
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::findParentTable const):
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowElement.cpp:
        (WebCore::findTable):
        (WebCore::HTMLTableRowElement::rowIndex const):
        (WebCore::findRows):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalPresentationAttributeStyle const):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::mediaElement const):
        * html/LinkIconCollector.cpp:
        (WebCore::LinkIconCollector::iconsOfTypes):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/MediaElementSession.cpp:
        (WebCore::needsArbitraryUserGestureAutoplayQuirk):
        (WebCore::isElementRectMostlyInMainFrame):
        (WebCore::isElementLargeRelativeToMainFrame):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        (WebCore::PluginDocumentParser::appendBytes):
        * html/RadioNodeList.cpp:
        (WebCore::toRadioButtonInputElement):
        (WebCore::RadioNodeList::value const):
        (WebCore::RadioNodeList::setValue):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::updateTickMarkValues):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::fillInternal):
        (WebCore::CanvasRenderingContext2D::strokeInternal):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::toStyle):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::canvasGradient const):
        (WebCore::CanvasStyle::canvasPattern const):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texStorage2D):
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::compressedTexImage2D):
        (WebCore::WebGLRenderingContextBase::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::generateMipmap):
        (WebCore::WebGLRenderingContextBase::getTexParameter):
        (WebCore::WebGLRenderingContextBase::texImage2DBase):
        (WebCore::WebGLRenderingContextBase::validateTexFunc):
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::texSubImage2DBase):
        (WebCore::WebGLRenderingContextBase::copyTexImage2D):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        (WebCore::WebGLRenderingContextBase::texParameter):
        (WebCore::WebGLRenderingContextBase::validateTextureBinding):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeReparentTask):
        (WebCore::executeTakeAllChildrenAndReparentTask):
        (WebCore::HTMLConstructionSite::dispatchDocumentElementAvailableIfNeeded):
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface):
        (WebCore::HTMLConstructionSite::findFosterSite):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::updateGenericCue):
        (WebCore::InbandGenericTextTrack::removeGenericCue):
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::willRemove):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        (WebCore::TextTrack::addRegion):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::willRemove):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildInitialState):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::strokeGradient const):
        (WebCore::GraphicsContext::fillGradient const):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::useStrokeStyleToFill):

2017-11-03  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas2D Profiling: highlight expensive context commands in the captured command log
        https://bugs.webkit.org/show_bug.cgi?id=178302
        <rdar://problem/33158849>

        Reviewed by Brian Burg.

        No new tests, updated existing tests.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::finalizeFrame):
        (WebCore::InspectorCanvas::markNewFrame): Deleted.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):

2017-11-02  Maciej Stachowiak  <mjs@apple.com>

        Don't try to guess plugin MIME type from a file extension in a URL (no observable effect)
        https://bugs.webkit.org/show_bug.cgi?id=178333

        Reviewed by Darin Adler.

        No test cases because I could not find an observable behavior difference,
        even after trying many different plugin loading scenarios.
        
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): loadedMIMEType --> serviceType
        (WebCore::HTMLPlugInImageElement::restartSimilarPlugIns): ditto
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): ditto
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): ditto
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::loadedMimeType const): Deleted. This was the one call site
        for mimeTypeFromURL, and is otherwise just a wrapper for SerciceType()
        * platform/URL.cpp:
        (WebCore::mimeTypeFromURL): Deleted. This was the only use of MIMETypeDatabase in URL.
        * platform/URL.h: Removed declaration for mimeTypeFromURL.
        * WebCore.order: Removed mimeTypeFromURL.

2017-11-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix cancellation process implementation
        https://bugs.webkit.org/show_bug.cgi?id=179199

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::willSendData):
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        (WebCore::CurlRequest::pausedStatusChanged):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::isSyncRequest const):
        (WebCore::CurlRequest::isCompletedOrCancelled const):
        (WebCore::CurlRequest::needToInvokeDidCancelTransfer const):
        (WebCore::CurlRequest::isSyncRequest): Deleted.

2017-11-02  Brady Eidson  <beidson@apple.com>

        SW: Implement "Update Registration State" algorithm (unused for now)
        https://bugs.webkit.org/show_bug.cgi?id=179186

        Reviewed by Chris Dumez.

        No new tests (No behavior change yet).

        This algorithm is very simple, and this patch plumbs it through.
        But it's not useful to start using this algorithm without "Update Worker State" also.
        So to keep this patch small, it's unused for now. Will be used in the next patch.

        * WebCore.xcodeproj/project.pbxproj:

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):

        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::~ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::updateStateFromServer):
        * workers/service/ServiceWorkerRegistration.h:

        * workers/service/ServiceWorkerTypes.h: Copied from Source/WebCore/workers/service/server/SWServerRegistration.cpp.

        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::addServiceWorkerRegistration):
        (WebCore::SWClientConnection::removeServiceWorkerRegistration):
        (WebCore::SWClientConnection::updateRegistrationState):
        * workers/service/server/SWClientConnection.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::addServiceWorkerRegistrationInServer):
        (WebCore::SWServer::Connection::removeServiceWorkerRegistrationInServer):
        (WebCore::SWServer::addClientServiceWorkerRegistration):
        (WebCore::SWServer::removeClientServiceWorkerRegistration):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::getConnection):

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

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::SWServerRegistration):
        (WebCore::SWServerRegistration::updateRegistrationState):
        (WebCore::SWServerRegistration::addClientServiceWorkerRegistration):
        (WebCore::SWServerRegistration::removeClientServiceWorkerRegistration):
        * workers/service/server/SWServerRegistration.h:

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

        Assert that updateStyle and updateLayout are only called when it's safe to dispatch events
        https://bugs.webkit.org/show_bug.cgi?id=179157
        <rdar://problem/35144778>

        Reviewed by Zalan Bujtas.

        Added assertions to Document::updateStyleIfNeeded and Document::updateLayout that these functions are
        only called when NoEventDispatchAssertion::isEventAllowedInMainThread() is true with two exceptions:
        1. Inside SVGImage::draw which triggers a layout on a separate document.
        2. While doing a nested layout for a frame flattening.

        No new tests since there should be no behavioral changes.

        * dom/ContainerNode.cpp:
        (NoEventDispatchAssertion::DisableAssertionsInScope::s_existingCount): Deleted. This is now an instance
        variable of DisableAssertionsInScope.
        (ContainerNode::removeNodeWithScriptAssertion): Moved childrenChanged out of the scope since it could
        invoke respondToChangedSelection via HTMLTextAreaElement::childrenChanged.
        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded): Added the assertion. Allow updateWidgetPositions() to call
        this function but exit early when checking needsStyleRecalc().
        (WebCore::Document::updateLayout): Added the assertion.
        * dom/NoEventDispatchAssertion.h:
        (WebCore::NoEventDispatchAssertion::DisableAssertionsInScope::DisableAssertionsInScope): Made this class
        store the original value of s_count as an instance variable to support re-entrancy.
        (WebCore::NoEventDispatchAssertion::DisableAssertionsInScope::~DisableAssertionsInScope): Ditto.
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::runOrScheduleAsynchronousTasks): Temporarily disable the assertion. This is safe
        since SVGImage has its own document.
        * svg/SVGSVGElement.cpp:
        (WebCore::checkIntersectionWithoutUpdatingLayout): Extracted out of SVGSVGElement::checkIntersection.
        (WebCore::checkEnclosureWithoutUpdatingLayout): Extracted out of SVGSVGElement::checkEnclosure.
        (WebCore::SVGSVGElement::getIntersectionList): Use checkIntersectionWithoutUpdatingLayout to avoid
        calling updateLayoutIgnorePendingStylesheets while iterating over elements.
        (WebCore::SVGSVGElement::getEnclosureList): Ditto.
        (WebCore::SVGSVGElement::checkIntersection):
        (WebCore::SVGSVGElement::checkEnclosure):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Temporarily disable the assertion. This is safe as SVGImage has its own page.

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

        Fix Windows debug build after r224371

        * platform/graphics/win/DIBPixelData.h:

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

        Use CompletionHandlers for redirects
        https://bugs.webkit.org/show_bug.cgi?id=179163

        Reviewed by Tim Horton.

        Having functions sometimes have to remember to call client->continueWillSendRequest is fragile.
        CompletionHandler asserts if it's not called once before destruction, and that's what we need here.
        This will prevent future bugs, and make ResourceHandle look more like NetworkDataTask.

        No change in behavior.

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::willSendRequest):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::willSendRequestAsync):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::willSendRequestAsync):
        * loader/appcache/ApplicationCacheGroup.h:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/PingHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequestAsync):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueWillSendRequest:]): Deleted.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect):
        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.

2017-11-02  Christopher Reid  <chris.reid@sony.com>

        Add a FileSystem namespace to FileSystem.cpp
        https://bugs.webkit.org/show_bug.cgi?id=179063

        Reviewed by Darin Adler.

        No new tests, no change in behavior.

        Adding a FileSystem namespace so its functions aren't global in WebCore.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        * Modules/entriesapi/DOMFileSystem.cpp:
        * Modules/entriesapi/FileSystemEntry.cpp:
        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        * Modules/indexeddb/server/IDBServer.cpp:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        * Modules/webdatabase/DatabaseTracker.cpp:
        * Modules/webdatabase/OriginLock.cpp:
        * Modules/webdatabase/OriginLock.h:
        * fileapi/File.cpp:
        * fileapi/FileCocoa.mm:
        * html/FileListCreator.cpp:
        * html/HTMLMediaElement.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        * page/Page.cpp:
        * page/SecurityOrigin.cpp:
        * page/SecurityOriginData.cpp:
        * platform/FileHandle.cpp:
        * platform/FileHandle.h:
        * platform/FileStream.cpp:
        * platform/FileStream.h:
        * platform/FileSystem.cpp: Added FileSystem namespace
        * platform/FileSystem.h: Added FileSystem namespace
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/cf/FileSystemCF.cpp: Added FileSystem namespace
        * platform/cocoa/FileMonitorCocoa.mm:
        * platform/cocoa/FileSystemCocoa.mm: Added FileSystem namespace
        * platform/glib/FileMonitorGLib.cpp:
        * platform/glib/FileSystemGlib.cpp: Added FileSystem namespace
        * platform/glib/SharedBufferGlib.cpp:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/win/DIBPixelData.h:
        * platform/ios/QuickLook.mm:
        * platform/ios/WebItemProviderPasteboard.mm:
        * platform/mac/FileSystemMac.mm: Added FileSystem namespace
        * platform/network/BlobDataFileReference.cpp:
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/FormData.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        * platform/network/curl/CurlCacheEntry.cpp:
        * platform/network/curl/CurlCacheEntry.h:
        * platform/network/curl/CurlCacheManager.cpp:
        * platform/network/curl/CurlDownload.cpp:
        * platform/network/curl/CurlRequest.cpp:
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/BlobDataFileReferenceMac.mm:
        * platform/network/soup/ResourceRequestSoup.cpp:
        * platform/network/soup/SoupNetworkSession.cpp:
        * platform/posix/FileSystemPOSIX.cpp: Added FileSystem namespace
        * platform/posix/SharedBufferPOSIX.cpp:
        * platform/sql/SQLiteFileSystem.cpp:
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        * platform/win/FileSystemWin.cpp: Added FileSystem namespace
        * rendering/RenderThemeGtk.cpp:
        * rendering/RenderThemeWin.cpp:

2017-11-02  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: show supported GL extensions for selected canvas
        https://bugs.webkit.org/show_bug.cgi?id=179070
        <rdar://problem/35278276>

        Reviewed by Brian Burg.

        Test: inspector/canvas/extensions.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        Rework common logic into a macro for readability and to simplify adding calls to
        InspectorInstrumentation functions.

        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::extensionIsEnabled):

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::didEnableExtension):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didEnableExtension):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didEnableExtensionImpl):

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

        Do not check for CORS in case response is coming from a service worker
        https://bugs.webkit.org/show_bug.cgi?id=179177

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/cors-image-fetch.html

        As per fetch spec, CORS check (https://fetch.spec.whatwg.org/#cors-check) is done
        within HTTP fetch (https://fetch.spec.whatwg.org/#http-fetch).
        It does not apply to fetches handled by service workers.

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

2017-11-02  Joseph Pecoraro  <pecoraro@apple.com>

        Make ServiceWorker a Remote Inspector debuggable target
        https://bugs.webkit.org/show_bug.cgi?id=179043
        <rdar://problem/34126008>

        Reviewed by Brian Burg.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        New files.

        * workers/service/context/ServiceWorkerDebuggable.h: Added.
        * workers/service/context/ServiceWorkerDebuggable.cpp: Added.
        (WebCore::ServiceWorkerDebuggable::ServiceWorkerDebuggable):
        (WebCore::ServiceWorkerDebuggable::connect):
        (WebCore::ServiceWorkerDebuggable::disconnect):
        (WebCore::ServiceWorkerDebuggable::dispatchMessageFromRemote):
        ServiceWorker remote inspector target, exposes the script url to debuggers.
        Pass the channel on to the inspector proxy to hook it up to the worker.

        * workers/service/context/ServiceWorkerInspectorProxy.h:
        * workers/service/context/ServiceWorkerInspectorProxy.cpp: Added.
        (WebCore::ServiceWorkerInspectorProxy::ServiceWorkerInspectorProxy):
        (WebCore::ServiceWorkerInspectorProxy::~ServiceWorkerInspectorProxy):
        (WebCore::ServiceWorkerInspectorProxy::serviceWorkerTerminated):
        Handle interesting events throughout a Service Worker life cycle.

        (WebCore::ServiceWorkerInspectorProxy::connectToWorker):
        (WebCore::ServiceWorkerInspectorProxy::disconnectFromWorker):
        (WebCore::ServiceWorkerInspectorProxy::sendMessageToWorker):
        (WebCore::ServiceWorkerInspectorProxy::sendMessageFromWorkerToFrontend):
        Implement existing worker debugger hooks for connection setup and sending messages.
        Inspector protocol messages come in on the MainThread and hop over to the
        WorkerThread to be handled on the expected context thread. Likewise outgoing
        messages hop back to be sent through the InspectorFrontend channel on MainThread.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::postMessageToDebugger):
        Construct the new inspector proxy and debuggable registration.
        Call lifecycle events and debugger hooks when appropriate.

2017-11-02  Antti Koivisto  <antti@apple.com>

        display:contents should work with dynamic table mutations
        https://bugs.webkit.org/show_bug.cgi?id=179179

        Reviewed by Ryosuke Niwa.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringContinuation):

            RenderText with inline text wrapper as beforeChild is now resolved in RenderTreePosition, covering all cases.
            Verify this with assert.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):

            Add assertion.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):

            Fix cases where we did unchecked downcasts for anonymous beforeChild.

        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::insert):

            When inserting before a text rendeder with an display:contents inline wrapper, use the wrapper as beforeChild.

        * style/RenderTreePosition.h:
        (WebCore::RenderTreePosition::insert): Deleted.
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::renderingParent):

            Add separate helper to get parent frame for the closest rendered (non display:contents) ancestor.

        (WebCore::RenderTreeUpdater::renderTreePosition):
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::RenderTreeUpdater::textRendererIsNeeded):
        (WebCore::RenderTreeUpdater::updateTextRenderer):
        (WebCore::RenderTreeUpdater::storePreviousRenderer):

            Use it for tracking state related to render tree siblings. With this we compute whitespace nodes
            correctly for display:contents. The test cases end up depending on that.

        * style/RenderTreeUpdater.h:

2017-11-02  Tim Horton  <timothy_horton@apple.com>

        Bump the size of SameAsRenderElement after r224324

        * rendering/RenderElement.cpp:
        RenderElement uses one more bit in the bitfield now.

2017-11-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224353.

        Breaks internal builds.

        Reverted changeset:

        "Ignore HSTS for partitioned, cross-origin subresource
        requests"
        https://bugs.webkit.org/show_bug.cgi?id=178993
        https://trac.webkit.org/changeset/224353

2017-11-02  Joseph Pecoraro  <pecoraro@apple.com>

        Inspector should display service worker served responses properly
        https://bugs.webkit.org/show_bug.cgi?id=178597
        <rdar://problem/35186111>

        Reviewed by Brian Burg.

        Test: http/tests/inspector/network/resource-response-service-worker.html

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::responseSource):
        Use the new protocol enum.

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

        Eliminate isMainThread() checks in most call sites of NoEventDispatchAssertion
        https://bugs.webkit.org/show_bug.cgi?id=179161

        Reviewed by Zalan Bujtas.

        Introduced NoEventDispatchAssertion::InMainThread which bypasses the expensive isMainThread() check
        in order to turn NoEventDispatchAssertion into a release assertion in a separate patch.

        Also removed instances of NoEventDispatchAssertion in notifyChildNodeInserted and notifyChildNodeRemoved
        and asserted that the caller has instantiated NoEventDispatchAssertion instead.

        No new tests since there should be no behavioral changes.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * dom/Attr.cpp:
        * dom/CharacterData.cpp:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion):
        (WebCore::ContainerNode::removeNodeWithScriptAssertion):
        (WebCore::executeNodeInsertionWithScriptAssertion):
        (WebCore::ContainerNode::removeDetachedChildren): Instantiated NoEventDispatchAssertion::InMainThread
        so that notifyChildNodeRemoved would be called inside NoEventDispatchAssertion. 
        (WebCore::ContainerNode::insertBeforeCommon):
        (WebCore::ContainerNode::appendChildCommon):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted): Assert that the caller has instantiated NoEventDispatchAssertion.
        (WebCore::notifyChildNodeRemoved): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::dispatchWindowEvent): Replaced RELEASE_ASSERT with ASSERT_WITH_SECURITY_IMPLICATION
        for clarity since NoEventDispatchAssertion::isEventAllowedInMainThread() always returns true in release
        builds right now.
        (WebCore::Document::dispatchWindowLoadEvent): Ditto.
        (WebCore::Document::applyPendingXSLTransformsTimerFired): Use ASSERT_WITH_SECURITY_IMPLICATION instead
        of regular ASSERT.
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot): Instantiate NoEventDispatchAssertion::InMainThread to call
        notifyChildNodeInserted will it.
        (WebCore::Element::attachAttributeNodeIfNeeded):
        (WebCore::Element::setAttributeNode): Fixed the indentation.
        (WebCore::Element::setAttributeNodeNS): Ditto.
        (WebCore::Element::dispatchFocusInEvent):
        (WebCore::Element::dispatchFocusOutEvent):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/NoEventDispatchAssertion.h:
        (WebCore::NoEventDispatchAssertion::isEventDispatchAllowedInSubtree): Moved to InMainThread.
        (WebCore::NoEventDispatchAssertion::InMainThread): Added.
        (WebCore::NoEventDispatchAssertion::InMainThread::InMainThread): Assert that we're in the main thread
        instead of exiting early.
        (WebCore::NoEventDispatchAssertion::InMainThread::~InMainThread): Ditto.
        (WebCore::NoEventDispatchAssertion::InMainThread::isEventDispatchAllowedInSubtree): Moved here.
        (WebCore::NoEventDispatchAssertion::InMainThread::isEventAllowed):
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchDOMActivateEvent):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjectsForDocumentSuspension):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2017-11-02  John Wilander  <wilander@apple.com>

        Ignore HSTS for partitioned, cross-origin subresource requests
        https://bugs.webkit.org/show_bug.cgi?id=178993
        <rdar://problem/34962462>

        Reviewed by Brent Fulgham and Alex Christensen.

        No new tests. HSTS is not supported in layout tests.
        Tested manually.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary):
            Now also synthesizes a response if
            _schemeWasUpgradedDueToDynamicHSTS is set on the
            request. Because in such cases the scheme might
            have been downgraded and there the two schemes
            match.

2017-11-02  Zalan Bujtas  <zalan@apple.com>

        LayoutState::m_next is really the ancestor state.
        https://bugs.webkit.org/show_bug.cgi?id=179187
        <rdar://problem/35319525>

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::clearPaginationInformation):
        (WebCore::LayoutState::propagateLineGridInfo):
        (WebCore::LayoutState::establishLineGrid):
        * rendering/LayoutState.h:
        * rendering/RenderView.h:

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

        Fix iOS WebKitLegacy after r224267
        https://bugs.webkit.org/show_bug.cgi?id=179189

        Reviewed by Tim Horton.

        Use callOnMainThread instead of dispatch_async to work correctly on the web thread.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

2017-11-02  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Add some error reporting during EGL display/context creation
        https://bugs.webkit.org/show_bug.cgi?id=178937

        Reviewed by Carlos Alberto Lopez Perez.

        Unconditionally log errors using WTFLogAlways during EGL context creation. This
        provides a small degree of help for troubleshooting, and while eglGetError() only
        returns numeric error codes, it's better than nothing.

        No new tests needed.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::initializeEGLDisplay):
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::errorString):
        (WebCore::GLContextEGL::lastErrorString):
        (WebCore::GLContextEGL::createWindowContext):
        (WebCore::GLContextEGL::createPbufferContext):
        (WebCore::GLContextEGL::createSurfacelessContext):
        (WebCore::GLContextEGL::createContext):
        (WebCore::GLContextEGL::createSharingContext):
        (WebCore::GLContextEGL::GLContextEGL):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/egl/GLContextEGLWPE.cpp:
        (WebCore::GLContextEGL::createWPEContext):
        * platform/graphics/wpe/PlatformDisplayWPE.cpp:
        (WebCore::PlatformDisplayWPE::initialize):

2017-11-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move InspectorAgents into a folder
        https://bugs.webkit.org/show_bug.cgi?id=179132

        Reviewed by Devin Rousso.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Move files around.

        * inspector/agents/InspectorApplicationCacheAgent.cpp: Renamed from Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp.
        * inspector/agents/InspectorApplicationCacheAgent.h: Renamed from Source/WebCore/inspector/InspectorApplicationCacheAgent.h.
        * inspector/agents/InspectorCSSAgent.cpp: Renamed from Source/WebCore/inspector/InspectorCSSAgent.cpp.
        * inspector/agents/InspectorCSSAgent.h: Renamed from Source/WebCore/inspector/InspectorCSSAgent.h.
        * inspector/agents/InspectorCanvasAgent.cpp: Renamed from Source/WebCore/inspector/InspectorCanvasAgent.cpp.
        * inspector/agents/InspectorCanvasAgent.h: Renamed from Source/WebCore/inspector/InspectorCanvasAgent.h.
        * inspector/agents/InspectorDOMAgent.cpp: Renamed from Source/WebCore/inspector/InspectorDOMAgent.cpp.
        * inspector/agents/InspectorDOMAgent.h: Renamed from Source/WebCore/inspector/InspectorDOMAgent.h.
        * inspector/agents/InspectorDOMDebuggerAgent.cpp: Renamed from Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp.
        * inspector/agents/InspectorDOMDebuggerAgent.h: Renamed from Source/WebCore/inspector/InspectorDOMDebuggerAgent.h.
        * inspector/agents/InspectorDOMStorageAgent.cpp: Renamed from Source/WebCore/inspector/InspectorDOMStorageAgent.cpp.
        * inspector/agents/InspectorDOMStorageAgent.h: Renamed from Source/WebCore/inspector/InspectorDOMStorageAgent.h.
        * inspector/agents/InspectorDatabaseAgent.cpp: Renamed from Source/WebCore/inspector/InspectorDatabaseAgent.cpp.
        * inspector/agents/InspectorDatabaseAgent.h: Renamed from Source/WebCore/inspector/InspectorDatabaseAgent.h.
        * inspector/agents/InspectorIndexedDBAgent.cpp: Renamed from Source/WebCore/inspector/InspectorIndexedDBAgent.cpp.
        * inspector/agents/InspectorIndexedDBAgent.h: Renamed from Source/WebCore/inspector/InspectorIndexedDBAgent.h.
        * inspector/agents/InspectorLayerTreeAgent.cpp: Renamed from Source/WebCore/inspector/InspectorLayerTreeAgent.cpp.
        * inspector/agents/InspectorLayerTreeAgent.h: Renamed from Source/WebCore/inspector/InspectorLayerTreeAgent.h.
        * inspector/agents/InspectorMemoryAgent.cpp: Renamed from Source/WebCore/inspector/InspectorMemoryAgent.cpp.
        * inspector/agents/InspectorMemoryAgent.h: Renamed from Source/WebCore/inspector/InspectorMemoryAgent.h.
        * inspector/agents/InspectorNetworkAgent.cpp: Renamed from Source/WebCore/inspector/InspectorNetworkAgent.cpp.
        * inspector/agents/InspectorNetworkAgent.h: Renamed from Source/WebCore/inspector/InspectorNetworkAgent.h.
        * inspector/agents/InspectorPageAgent.cpp: Renamed from Source/WebCore/inspector/InspectorPageAgent.cpp.
        * inspector/agents/InspectorPageAgent.h: Renamed from Source/WebCore/inspector/InspectorPageAgent.h.
        * inspector/agents/InspectorTimelineAgent.cpp: Renamed from Source/WebCore/inspector/InspectorTimelineAgent.cpp.
        * inspector/agents/InspectorTimelineAgent.h: Renamed from Source/WebCore/inspector/InspectorTimelineAgent.h.
        * inspector/agents/InspectorWorkerAgent.cpp: Renamed from Source/WebCore/inspector/InspectorWorkerAgent.cpp.
        * inspector/agents/InspectorWorkerAgent.h: Renamed from Source/WebCore/inspector/InspectorWorkerAgent.h.
        * inspector/agents/WebConsoleAgent.cpp: Renamed from Source/WebCore/inspector/WebConsoleAgent.cpp.
        * inspector/agents/WebConsoleAgent.h: Renamed from Source/WebCore/inspector/WebConsoleAgent.h.
        * inspector/agents/WebDebuggerAgent.cpp: Renamed from Source/WebCore/inspector/WebDebuggerAgent.cpp.
        * inspector/agents/WebDebuggerAgent.h: Renamed from Source/WebCore/inspector/WebDebuggerAgent.h.
        * inspector/agents/WebHeapAgent.cpp: Renamed from Source/WebCore/inspector/WebHeapAgent.cpp.
        * inspector/agents/WebHeapAgent.h: Renamed from Source/WebCore/inspector/WebHeapAgent.h.
        * inspector/agents/page/PageConsoleAgent.cpp: Renamed from Source/WebCore/inspector/PageConsoleAgent.cpp.
        * inspector/agents/page/PageConsoleAgent.h: Renamed from Source/WebCore/inspector/PageConsoleAgent.h.
        * inspector/agents/page/PageDebuggerAgent.cpp: Renamed from Source/WebCore/inspector/PageDebuggerAgent.cpp.
        * inspector/agents/page/PageDebuggerAgent.h: Renamed from Source/WebCore/inspector/PageDebuggerAgent.h.
        * inspector/agents/page/PageHeapAgent.cpp: Renamed from Source/WebCore/inspector/PageHeapAgent.cpp.
        * inspector/agents/page/PageHeapAgent.h: Renamed from Source/WebCore/inspector/PageHeapAgent.h.
        * inspector/agents/page/PageRuntimeAgent.cpp: Renamed from Source/WebCore/inspector/PageRuntimeAgent.cpp.
        * inspector/agents/page/PageRuntimeAgent.h: Renamed from Source/WebCore/inspector/PageRuntimeAgent.h.
        * inspector/agents/worker/WorkerConsoleAgent.cpp: Renamed from Source/WebCore/inspector/WorkerConsoleAgent.cpp.
        * inspector/agents/worker/WorkerConsoleAgent.h: Renamed from Source/WebCore/inspector/WorkerConsoleAgent.h.
        * inspector/agents/worker/WorkerDebuggerAgent.cpp: Renamed from Source/WebCore/inspector/WorkerDebuggerAgent.cpp.
        * inspector/agents/worker/WorkerDebuggerAgent.h: Renamed from Source/WebCore/inspector/WorkerDebuggerAgent.h.
        * inspector/agents/worker/WorkerRuntimeAgent.cpp: Renamed from Source/WebCore/inspector/WorkerRuntimeAgent.cpp.
        * inspector/agents/worker/WorkerRuntimeAgent.h: Renamed from Source/WebCore/inspector/WorkerRuntimeAgent.h.
        Move agents into folders.

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

        Service Worker fetch should transmit headers to its client
        https://bugs.webkit.org/show_bug.cgi?id=179156

        Reviewed by Chris Dumez.

        Covered by updated tests.

        Making resourceResponse getter return a ResourceResponse with the headers of the FetchResponse Headers object.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::toConnectionRecord):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::resourceResponse const):
        * Modules/fetch/FetchResponse.h:

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

        Update SWServerJobQueue to follow the Service Worker specification more closely
        https://bugs.webkit.org/show_bug.cgi?id=179147

        Reviewed by Youenn Fablet.

        Align naming with the specification.

        Get rid of unnecessary m_currentJob as the current job is always the first
        job in the queue.

        Inline some of the tiny methods to simplify code. Those were leftovers from when
        we used to have a background thread.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::scheduleJob):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::SWServerJobQueue):
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::runNextJob):
        (WebCore::SWServerJobQueue::runNextJobSynchronously):
        (WebCore::SWServerJobQueue::runRegisterJob):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        (WebCore::SWServerJobQueue::runUpdateJob):
        (WebCore::SWServerJobQueue::rejectCurrentJob):
        (WebCore::SWServerJobQueue::finishCurrentJob):
        * workers/service/server/SWServerJobQueue.h:
        (WebCore::SWServerJobQueue::firstJob const):
        (WebCore::SWServerJobQueue::lastJob const):
        (WebCore::SWServerJobQueue::enqueueJob):
        (WebCore::SWServerJobQueue::size const):

2017-11-02  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, removed useless semicolon at the end of namespace

        * platform/graphics/texmap/BitmapTextureGL.cpp:

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

        WPE does not build with DragImage.cpp in unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=178844

        Reviewed by Keith Miller.

        Add a stub implementation of DragImage for WPE so that we can drop the @no-unify.

        * Sources.txt:
        * SourcesWPE.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/wpe/DragImageWPE.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImageFilename):
        (WebCore::createDragImageForLink):

2017-11-02  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] audioTrack.label is always empty on macOS
        https://bugs.webkit.org/show_bug.cgi?id=179175
        <rdar://problem/35315438>

        Reviewed by Youenn Fablet.

        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::label const): New.
        (WebCore::RealtimeMediaSourceSettings::setLabel): Ditto.
        (WebCore::RealtimeMediaSourceSettings::encode const): Encode label.
        (WebCore::RealtimeMediaSourceSettings::decode): Decode label.

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::initializeSettings): Set label.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::settings const): Ditto.

        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::initializeSettings): Ditto.

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

        [Service Workers] Add initial implementation for try Clear Registration / Clear Registration algorithms
        https://bugs.webkit.org/show_bug.cgi?id=179151

        Reviewed by Youenn Fablet.

        [Service Workers] Add initial implementation for try Clear Registration / Clear Registration algorithms:
        - https://w3c.github.io/ServiceWorker/#try-clear-registration
        - https://w3c.github.io/ServiceWorker/#clear-registration

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        (WebCore::SWServerJobQueue::tryClearRegistration):
        (WebCore::SWServerJobQueue::clearRegistration):
        * workers/service/server/SWServerJobQueue.h:

2017-11-02  Antti Koivisto  <antti@apple.com>

        Clear Node renderer pointer when destroying RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=179112

        Reviewed by Zalan Bujtas.

        Make sure we don't leave renderer pointers behind in Nodes.
        This could be done with WeakPtr but that would add extra indirection between DOM and render tree.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):

            Null the node renderer pointer.
            With continuations we have a case where renderer points to a node that has a different renderer.
            This is is ok as we know no node points to a continuation (they should really be anonymous renderers).

2017-11-02  Antti Koivisto  <antti@apple.com>

        Remove empty continuations in RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers
        https://bugs.webkit.org/show_bug.cgi?id=179014

        Remove overly optimistic non-critical assertion that is hit on WK1 debug.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::removeAndDestroyAllContinuations):

2017-11-02  Frederic Wang  <fwang@igalia.com>

        Add references to bug 179167 in FIXME comments
        https://bugs.webkit.org/show_bug.cgi?id=179168

        Reviewed by Daniel Bates.

        * Configurations/FeatureDefines.xcconfig:

2017-11-02  Antti Koivisto  <antti@apple.com>

        Remove empty continuations in RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers
        https://bugs.webkit.org/show_bug.cgi?id=179014

        Reviewed by Geoff Garen.

        Treat continuation similarly to other anonymous wrappers. This makes things more understandable
        and allows removal of some questionable code in RenderBlock::takeChild.

        The patch also makes continuation chain a double linked so we can efficiently remove single
        continuations from the chain. It also gets rid of algorithms that recurse in continuation chain.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::firstChildInContinuation):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):

            Don't add and remove continuations from the chain when updating style. Prevent recursion by walking
            the chain only in the (non-continuation) head renderer.

        (WebCore::RenderBlock::dropAnonymousBoxChild):

            Make a member function.

        (WebCore::RenderBlock::takeChild):

            Remove code that destroyed empty continuations and caused the parent to destroy itself.
            Empty continuations are now removed by RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers.

        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::ContinuationChainNode::ContinuationChainNode):
        (WebCore::RenderBoxModelObject::ContinuationChainNode::~ContinuationChainNode):
        (WebCore::RenderBoxModelObject::ContinuationChainNode::insertAfter):

            Track continuations with double linked lists.

        (WebCore::continuationChainNodeMap):
        (WebCore::RenderBoxModelObject::willBeDestroyed):

            Don't recurse to destroy continuation chain. 
            Destroy all continuations iteratively if this is the head of the chain.
            When destroying a continuation renderer simply remove it from the chain.

        (WebCore::RenderBoxModelObject::continuation const):
        (WebCore::RenderBoxModelObject::insertIntoContinuationChainAfter):
        (WebCore::RenderBoxModelObject::removeFromContinuationChain):
        (WebCore::RenderBoxModelObject::ensureContinuationChainNode):
        (WebCore::continuationMap): Deleted.
        (WebCore::RenderBoxModelObject::setContinuation): Deleted.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::removeAnonymousWrappersForInlinesIfNecessary):

            Make this a function of the parent renderer itself instead of getting 'parent()' as first operation and
            then using it.
            Don't remove continuations (isAnonymousBlockContinuation() test gives wrong result for the last continuation of the chain).

        (WebCore::RenderElement::styleDidChange):

            removeAnonymousWrappersForInlinesIfNecessary is no function of the parent.

        (WebCore::RenderElement::updateOutlineAutoAncestor):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasContinuationChainNode const):
        (WebCore::RenderElement::setHasContinuationChainNode):
        (WebCore::RenderElement::hasContinuation const): Deleted.
        (WebCore::RenderElement::setHasContinuation): Deleted.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):

            Don't add and remove continuations from the chain when updating style. Prevent recursion by walking
            the chain only in the (non-continuation) head renderer.

        (WebCore::RenderInline::addChildIgnoringContinuation):

            Remove the old continuation from the chain. splitFlow() will add it back into the right place.

        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::childBecameNonInline):

            Remove the old continuation from the chain. splitFlow() will add it back into the right place.

        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::propagateRepaintToParentWithOutlineAutoIfNeeded const):
        (WebCore::RenderObject::outputRenderObject const):
        (WebCore::findDestroyRootIncludingAnonymous):

            Allow anonymous continuations as destroy roots.

        (WebCore::RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers):

            Removing a continuation may leave behind unnecessary anonymous sibling wrappers.
            Call removeAnonymousWrappersForInlinesIfNecessary() on parent after removal to get rid of them.
            If takeChild/removeAnonymousWrappersForInlinesIfNecessary leaves us with empty anonymous parent destroy that too.

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild):

            Similar to RenderBlock::takeChild, remove the code that would make the renderer destroy itself.
            Cleaning up RenderRubyRuns is now handled by removeFromParentAndDestroyCleaningUpAnonymousWrappers.

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

        REGRESSION(r224053): Crash in WebCore::Node::moveTreeToNewScope
        https://bugs.webkit.org/show_bug.cgi?id=179158

        Reviewed by Antti Koivisto.

        Call decrementReferencingNodeCount after checking the release assertion
        since that could delete oldDocument.

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

2017-11-02  Antti Koivisto  <antti@apple.com>

        First letter text renderer should be anonymous
        https://bugs.webkit.org/show_bug.cgi?id=179114

        Reviewed by Darin Adler.

        Currently both RenderTextFragment and RenderText for first letter point to the same Text node.
        There should only be one non-anonymous renderer per node.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):

            Skip the first letter text renderer instead of the fragment.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::firstLetterRemainingTextMap):

            Use WeakPtr.
            Modernize.

        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore::RenderBoxModelObject::firstLetterRemainingText const):

            Avoid hash lookup with the new isFirstLetter bit.

        (WebCore::RenderBoxModelObject::setFirstLetterRemainingText):

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::isFirstLetter const):
        (WebCore::RenderElement::setIsFirstLetter):

            Add a bit for more explicit code.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setText):

            Assert that RenderTextFragment is always the non-anonymous renderer.

        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::updateFirstLetterStyle):

            Set the isFirstLetter bit.

        (WebCore::createFirstLetterRenderer):

            Set the isFirstLetter bit.
            Remove the old text renderer before adding a new one.

2017-11-01  Frederic Wang  <fwang@igalia.com>

        Remove ScrollableArea::isTouchScrollable and ScrollableArea::isOverflowScroll
        https://bugs.webkit.org/show_bug.cgi?id=179121

        Reviewed by Alex Christensen.

        These functions were introduced in r161589 and r160236 but it seems that they have never
        been used.

        No new tests, behavior unchanged.

        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isTouchScrollable const): Deleted.
        (WebCore::ScrollableArea::isOverflowScroll const): Deleted.
        * rendering/RenderLayer.h:

2017-11-01  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Make the order of scheduler job handling sequential 
        https://bugs.webkit.org/show_bug.cgi?id=179127

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlRequestScheduler.cpp:
        (WebCore::CurlRequestScheduler::add):
        (WebCore::CurlRequestScheduler::cancel):
        (WebCore::CurlRequestScheduler::stopThreadIfNoMoreJobRunning):
        (WebCore::CurlRequestScheduler::executeTasks):
        (WebCore::CurlRequestScheduler::workerThread):
        (WebCore::CurlRequestScheduler::startTransfer):
        (WebCore::CurlRequestScheduler::completeTransfer):
        (WebCore::CurlRequestScheduler::cancelTransfer):
        (WebCore::CurlRequestScheduler::finalizeTransfer):
        (WebCore::CurlJobList::isEmpty const): Deleted.
        (WebCore::CurlJobList::startJobs): Deleted.
        (WebCore::CurlJobList::finishJobs): Deleted.
        (WebCore::CurlRequestScheduler::updateJobList): Deleted.
        * platform/network/curl/CurlRequestScheduler.h:

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

        NavigatorBase::onLine() accesses NetworkStateNotifier's singleton in a worker thread
        https://bugs.webkit.org/show_bug.cgi?id=179149
        <rdar://problem/35307552>

        Reviewed by Jiewen Tan.

        Fixed the bug making NavigatorBase::onLine a pure virtual function, and having two separate
        implementations for Navigator and WorkerNavigator. The former uses the singleton directly,
        and the latter returns the boolean stored in its instance. The boolean value is updated
        via WorkerMessagingProxy when the online status changes.

        No new tests.

        * page/Navigator.cpp:
        (WebCore::Navigator::onLine const):
        * page/Navigator.h:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::onLine): Deleted.
        * page/NavigatorBase.h:
        * page/WorkerNavigator.cpp:
        (WebCore::WorkerNavigator::WorkerNavigator):
        (WebCore::WorkerNavigator::onLine const):
        * page/WorkerNavigator.h:
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::singleton):
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::navigator):
        (WebCore::WorkerGlobalScope::setIsOnline):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:

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

        Let is<T>() accept RefPtrs
        https://bugs.webkit.org/show_bug.cgi?id=178612
        <rdar://problem/35102004>

        Reviewed by Ryosuke Niwa.

        Get rid of .get() for all is<T>() calls.

        No changes in behaviors.

        * bindings/js/JSElementCustom.cpp:
        (WebCore::createNewElementWrapper):
        * bindings/js/JSMediaStreamTrackCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::loadSubimages):
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::matchingFaces):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapNinePieceImage):
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::createGridTrackList):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueCursor):
        (WebCore::StyleBuilderCustom::applyValueContent):
        (WebCore::StyleBuilderCustom::applyValueWillChange):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::propertyAsColor const):
        (WebCore::StyleProperties::propertyAsValueID const):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * css/TransformFunctions.cpp:
        (WebCore::transformsForValue):
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::getViewportArgumentValue const):
        * dom/Document.cpp:
        (WebCore::Document::setBodyOrFrameset):
        (WebCore::Document::setFocusedElement):
        (WebCore::Document::updateHoverActiveState):
        * dom/Element.cpp:
        (WebCore::Element::setOuterHTML):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::toIdentifier):
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * editing/EditingStyle.cpp:
        (WebCore::identifierForStyleProperty):
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle const):
        (WebCore::EditingStyle::extractFontSizeDelta):
        (WebCore::EditingStyle::textDirection const):
        (WebCore::textDecorationValueList):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::EditingStyle::legacyFontSize const):
        (WebCore::EditingStyle::textDirectionForSelection):
        (WebCore::StyleChange::StyleChange):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::diffTextDecorations):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateAppearance):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::findAssociatedForm):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::imageElement const):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterText):
        (WebCore::HTMLElement::dirAttributeChanged):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::computeIsDisabledByFieldsetAncestor const):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList const):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel const):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isKeyboardFocusable const):
        (WebCore::HTMLPlugInElement::isUserObservable const):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectOption):
        * html/HTMLSummaryElement.cpp:
        (WebCore::isClickableControl):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::isKeyboardFocusable const):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachLater):
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler):
        * html/track/TextTrackList.cpp:
        (TextTrackList::append):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setNodeName):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * page/FocusController.cpp:
        (WebCore::shouldClearSelectionWhenChangingFocusedElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCustomScrollbars const):
        * page/Page.cpp:
        (WebCore::Page::pluginViews):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * testing/Internals.cpp:
        (WebCore::deferredStyleRulesCountForList):
        (WebCore::deferredGroupRulesCountForList):
        (WebCore::deferredKeyframesRulesCountForList):

2017-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Fix build after r224299
        https://bugs.webkit.org/show_bug.cgi?id=179155

        Unreviewed.

        Bug 175597 added the 6th argument of ResourceHandle constructor.
        Apply the same change of ResourceHandleCFNet.cpp to
        platformLoadResourceSynchronously of ResourceHandleCurl.cpp.

        No new tests since there should be no behavioral change other

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Added the 6th arguemnt shouldContentEncodingSniff.

2017-11-01  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build after r224312.

        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawFocusRing):

2017-11-01  Daniel Bates  <dabates@apple.com>

        Change Element::didAddUserAgentShadowRoot() to take a reference instead of a pointer
        https://bugs.webkit.org/show_bug.cgi?id=179153

        Reviewed by Ryosuke Niwa.

        Element::didAddUserAgentShadowRoot() is always passed a non-null pointer to the added
        ShadowRoot. Therefore we should have didAddUserAgentShadowRoot() take a lvalue reference
        to a ShadowRoot.

        No functionality changed. So, no new tests.

        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        * dom/Element.h:
        (WebCore::Element::didAddUserAgentShadowRoot):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot):
        * html/HTMLDetailsElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didAddUserAgentShadowRoot):
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        * html/HTMLMediaElement.h:
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::didAddUserAgentShadowRoot):
        * html/HTMLMeterElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didAddUserAgentShadowRoot):
        * html/HTMLProgressElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot):
        * html/HTMLSummaryElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::didAddUserAgentShadowRoot):
        * html/HTMLTextAreaElement.h:

2017-11-01  Jeremy Jones  <jeremyj@apple.com>

        Implement WKFullscreenWindowController for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=178924
        rdar://problem/34697120

        Reviewed by Simon Fraser.

        Enable ENABLE_FULLSCREEN_API for iOS.

        * Configurations/FeatureDefines.xcconfig:

2017-11-01  Simon Fraser  <simon.fraser@apple.com>

        Misc display list and other cleanup
        https://bugs.webkit.org/show_bug.cgi?id=179150

        Reviewed by Tim Horton.

        A few functions in GraphicsContext would assert when using display lists, because they
        had no recording clause. Fix them (ellipse drawing, and focus ring drawing).
        
        Use #pragma once in more places.

        Add system trace points for display list recording.

        No behavior change for non-display list code.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillEllipse):
        (WebCore::GraphicsContext::strokeEllipse):
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/ca/cocoa/WebSystemBackdropLayer.h:
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.h:
        * platform/graphics/cg/GraphicsContextCG.h:
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/displaylists/DisplayList.h:
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawFocusRingPath::create):
        (WebCore::DisplayList::DrawFocusRingPath::width const):
        (WebCore::DisplayList::DrawFocusRingPath::offset const):
        (WebCore::DisplayList::DrawFocusRingPath::DrawFocusRingPath):
        (WebCore::DisplayList::DrawFocusRingRects::create):
        (WebCore::DisplayList::DrawFocusRingRects::width const):
        (WebCore::DisplayList::DrawFocusRingRects::offset const):
        (WebCore::DisplayList::DrawFocusRingRects::DrawFocusRingRects):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::restore):
        (WebCore::DisplayList::Recorder::drawFocusRing):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/displaylists/DisplayListReplayer.h:
        * platform/graphics/mac/WebLayer.h:

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

        [Win] Fix compile errors in MediaPlayerPrivateAVFoundationCF.cpp
        https://bugs.webkit.org/show_bug.cgi?id=179148

        Reviewed by Ryosuke Niwa.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::resolvedURLChanged):

2017-11-01  Tim Horton  <timothy_horton@apple.com>

        Adjust RenderElement size assertion to be more accurate
        https://bugs.webkit.org/show_bug.cgi?id=179146

        Reviewed by Simon Fraser.

        * rendering/RenderElement.cpp:
        Alignment rules for bitfields differ on different platforms. If we're
        more truthful in our mimicing the layout of RenderElement, we can avoid
        the assertion firing on more configurations.

2017-11-01  Mark Lam  <mark.lam@apple.com>

        Add support to throw OOM if MarkedArgumentBuffer may overflow.
        https://bugs.webkit.org/show_bug.cgi?id=179092
        <rdar://problem/35116160>

        Reviewed by Saam Barati.

        No new tests.  The test for overflowing a MarkedArgumentBuffer will run for a
        ridiculously long time, which renders it unsuitable for automated tests.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):
        (WebCore::JSCustomElementInterface::upgradeElement):
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
        (WebCore::JSDOMBuiltinConstructorBase::callFunctionWithCurrentArguments):
        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::JSConverter<IDLSequence<T>>::convert):
        (WebCore::JSConverter<IDLFrozenArray<T>>::convert):
        * bindings/js/JSDOMConvertWebGL.cpp:
        (WebCore::convertToJSValue):
        * bindings/js/JSDOMIterator.h:
        (WebCore::jsPair):
        (WebCore::iteratorForEach):
        * bindings/js/JSDOMMapLike.cpp:
        (WebCore::forwardFunctionCallToBackingMap):
        (WebCore::forwardForEachCallToBackingMap):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        (WebCore::createRejectedPromiseWithTypeError):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction const):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::constructJSReadableStreamReaderGeneric):
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::create):
        (WebCore::ReadableStream::pipeTo):
        (WebCore::ReadableStream::tee):
        (WebCore::ReadableStream::lock):
        (WebCore::checkReadableStream):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::invoke):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::recordObject):
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::CloneDeserializer::deserialize):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementationContent):
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        (WebCore::JSTestCallbackFunction::handleEvent):
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp:
        (WebCore::JSTestCallbackFunctionRethrow::handleEvent):
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.cpp:
        (WebCore::JSTestCallbackFunctionWithThisObject::handleEvent):
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        (WebCore::JSTestCallbackFunctionWithTypedefs::handleEvent):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::JSTestCallbackInterface::callbackWithNoParam):
        (WebCore::JSTestCallbackInterface::callbackWithArrayParam):
        (WebCore::JSTestCallbackInterface::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallbackInterface::callbackWithStringList):
        (WebCore::JSTestCallbackInterface::callbackWithBoolean):
        (WebCore::JSTestCallbackInterface::callbackRequiresThisToPass):
        (WebCore::JSTestCallbackInterface::callbackWithAReturnValue):
        (WebCore::JSTestCallbackInterface::callbackThatRethrowsExceptions):
        (WebCore::JSTestCallbackInterface::callbackThatSkipsInvokeCheck):
        (WebCore::JSTestCallbackInterface::callbackWithThisObject):
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp:
        (WebCore::JSTestVoidCallbackFunction::handleEvent):
        * bridge/NP_jsobject.cpp:
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        * testing/Internals.cpp:
        (WebCore::Internals::cloneArrayBuffer):

2017-11-01  Andy Estes  <aestes@apple.com>

        [Apple Pay] Update the enum traits for PaymentError::ContactField
        https://bugs.webkit.org/show_bug.cgi?id=179145
        <rdar://problem/35303108>

        Reviewed by Tim Horton.

        Account for the values added to PaymentError::ContactField in r220718 and r223580.

        * Modules/applepay/ApplePaySessionPaymentRequest.h:

2017-11-01  Daniel Bates  <dabates@apple.com>

        Remove unused Element::alwaysCreateUserAgentShadowRoot()
        https://bugs.webkit.org/show_bug.cgi?id=179141

        Reviewed by Ryosuke Niwa.

        In changeset r208135 Element::createShadowRoot() was removed. And Element::createShadowRoot()
        was the only caller of Element::alwaysCreateUserAgentShadowRoot(). We should remove
        Element::alwaysCreateUserAgentShadowRoot() as it is unused.

        * dom/Element.h:
        (WebCore::Element::didAddUserAgentShadowRoot):
        (WebCore::Element::alwaysCreateUserAgentShadowRoot const): Deleted.
        * html/HTMLButtonElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLMediaElement.h:

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

        Drop running Service Worker Jobs on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=179142

        Reviewed by Youenn Fablet.

        Drop running Service Worker Jobs on a background thread. We don't really need to
        and this simplifies the logic a lot.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::getRegistration):
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::startNextJob):
        (WebCore::SWServerJobQueue::runRegisterJob):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        (WebCore::SWServerJobQueue::runUpdateJob):
        (WebCore::SWServerJobQueue::finishCurrentJob):
        * workers/service/server/SWServerJobQueue.h:

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

        Unreviewed, try to fix Windows build.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::createAVAssetForURL):

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

        Split JobQueue logic out of SWServerRegistration
        https://bugs.webkit.org/show_bug.cgi?id=179126

        Reviewed by Brady Eidson.

        Split JobQueue logic out of SWServerRegistration and into a SWServerJobQueue class to match the Service Workers
        specification more closely.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerRegistrationData.cpp:
        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::encode const):
        (WebCore::ServiceWorkerRegistrationData::decode):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::~SWServer):
        (WebCore::SWServer::getRegistration):
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::Connection::scriptContextStarted):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::scriptFetchFinished):
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::scriptContextStarted):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp: Added.
        (WebCore::SWServerJobQueue::SWServerJobQueue):
        (WebCore::SWServerJobQueue::~SWServerJobQueue):
        (WebCore::SWServerJobQueue::enqueueJob):
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::scriptContextStarted):
        (WebCore::SWServerJobQueue::startNextJob):
        (WebCore::SWServerJobQueue::runRegisterJob):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        (WebCore::SWServerJobQueue::runUpdateJob):
        (WebCore::SWServerJobQueue::rejectWithExceptionOnMainThread):
        (WebCore::SWServerJobQueue::resolveWithRegistrationOnMainThread):
        (WebCore::SWServerJobQueue::resolveCurrentRegistrationJobOnMainThead):
        (WebCore::SWServerJobQueue::resolveWithUnregistrationResultOnMainThread):
        (WebCore::SWServerJobQueue::startScriptFetchFromMainThread):
        (WebCore::SWServerJobQueue::rejectCurrentJob):
        (WebCore::SWServerJobQueue::resolveCurrentRegistrationJob):
        (WebCore::SWServerJobQueue::resolveCurrentUnregistrationJob):
        (WebCore::SWServerJobQueue::startScriptFetchForCurrentJob):
        (WebCore::SWServerJobQueue::finishCurrentJob):
        * workers/service/server/SWServerJobQueue.h: Added.
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::SWServerRegistration):
        (WebCore::SWServerRegistration::~SWServerRegistration):
        (WebCore::SWServerRegistration::data const):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::key const):
        (WebCore::SWServerRegistration::isUninstalling const):
        (WebCore::SWServerRegistration::setIsUninstalling):
        (WebCore::SWServerRegistration::setLastUpdateTime):
        (WebCore::SWServerRegistration::updateViaCache const):
        (WebCore::SWServerRegistration::setActiveServiceWorkerIdentifier):

2017-11-01  Daniel Bates  <dabates@apple.com>

        XMLHttpRequest should not sniff content encoding
        https://bugs.webkit.org/show_bug.cgi?id=175597
        <rdar://problem/34912624>

        Reviewed by Alex Christensen.

        Fixes an issue where the body of an HTTP response with headers "Content-Type: application/octet-stream" and
        "Content-Encoding: gzip" associated with an XHR request to a .gz file would not be automatically gzipped
        decompressed. Specifically, such a response would be treated analogous to a response with headers
        "Content-Type: application/gzip" and "Content-Encoding: identity". This behavior does not conform to the
        behavior of the Content-Encoding header as defined in the HTTP 1.1 and later specs. Moreover this behavior
        breaks the Epic Zen Garden demo: <https://s3.amazonaws.com/mozilla-games/ZenGarden/EpicZenGarden.html>.

        On macOS 10.13.2 opt out of content encoding sniffing when making an XHR request. We likely can
        selectively opt out of content encoding sniffing for other network requests. This will be done
        in subsequent commits to make it straightforward to identify site breakage (if any).

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start): Pass content encoding policy.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::shouldSniffContentEncoding const): Added.
        * loader/ResourceLoaderOptions.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle): Enable content encoding sniff to match existing behavior.
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::BlobResourceHandle): Ditto. We should look to disable content encoding sniffing in
        a subsequent change.
        * platform/network/PingHandle.h: Ditto.
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle): Modified to take a boolean as to whether to enable content encoding sniffing.
        (WebCore::ResourceHandle::create): Ditto.
        (WebCore::ResourceHandle::shouldContentEncodingSniff const): Added.
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Modified to take a boolean as to whether to enable content
        encoding sniffing.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection): Modified to take a boolean as to whether to enable content encoding
        sniffing and apply this policy to the CFMutableURLRequestRef object when building on macOS 10.13.2.
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Enable content encoding sniff to match existing behavior.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::applySniffingPoliciesAndStoragePartitionIfNeeded): Added helper function to apply sniffing policies
        and storage partition, if applicable. 
        (WebCore::ResourceHandle::createNSURLConnection): Modified to take a boolean as to whether to enable content encoding
        sniffing. Calls adjustNSRequestApplyingPolicies() to apply this policy.
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Enable content encoding sniff to match existing behavior.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::create): Modified to take a boolean as to whether to enable content encoding sniffing.
        (WebCore::ResourceHandle::ResourceHandle): Ditto.
        (WebCore::ResourceHandle::releaseForDownload): Pass content encoding policy.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest): Do not enable content encoding sniffing for the request.

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

        [Performance] Painting <video> to canvas spends a lot of time in URL getting and parsing
        https://bugs.webkit.org/show_bug.cgi?id=179131

        Reviewed by Eric Carlson.

        Every time a <video> backed by MediaPlayerPrivateAVFoundation is asked to paint, it is first
        queried whether it has a single security origin. To do this, the media player asks
        AVFoundation what the "resolvedURL" of the asset is. This answer never changes after
        metadata is first fetched, so the answer should be cached. To do so, add a m_resolvedURL
        ivar to MediaPlayerPrivateAVFoundation, and add a setResolvedURL() and resolvedURLChanged()
        method to re-query the value. Also create ivars for the security origin rather than re-
        parsing them every time.

        Drive-by fix: clean up all the instances where we pass a String rather than a URL (and thus
        have to re-parse the URL at each point).

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        (WebCore::MediaPlayerPrivateAVFoundation::hasSingleSecurityOrigin const):
        (WebCore::MediaPlayerPrivateAVFoundation::setResolvedURL):
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded):
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload):
        (WebCore::MediaPlayerPrivateAVFoundation::resolvedURL const): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::resolvedURL const):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::resolvedURLChanged):
        (WebCore::AVFWrapper::createAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationCF::resolvedURL const): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationCF::hasSingleSecurityOrigin const): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::canonicalURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):
        (WebCore::canonicalURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin const): Deleted.

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

        innerText->renderBox() can be null in HTMLTextFormControlElement::setSelectionRange
        https://bugs.webkit.org/show_bug.cgi?id=179103

        Reviewed by Antti Koivisto.

        Added a missing null check.

        Unfortunately, no new tests since we don't have a working reproduction for trunk code.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Added a null check.

2017-11-01  Brady Eidson  <beidson@apple.com>

        Plumbing for handling SW scripts failing to evaluate
        https://bugs.webkit.org/show_bug.cgi?id=178926

        Reviewed by Chris Dumez.

        No new tests (Currently no observable behavior change).

        In an upcoming patch we'll actually run the appropriate observable steps for when
        a ServiceWorker script fails to evaluate.

        This is a standalone refactoring + plumbing patch that will make the observable changes
        easier to review.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/js/WorkerScriptController.h:
        (WebCore::WorkerScriptController::workerGlobalScopeWrapper):
        (WebCore::WorkerScriptController::vm):
        (WebCore::WorkerScriptController::initScriptIfNeeded):

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::registerServiceWorkerThreadForUpdate):
        (WebCore::SWContextManager::registerServiceWorkerThread): Deleted.
        * workers/service/context/SWContextManager.h:

        * workers/service/context/ServiceWorkerThread.h:
        (WebCore::ServiceWorkerThread::serverConnectionIdentifier const):
        (WebCore::ServiceWorkerThread::contextData const):

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::create):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::createWorker): Deleted.
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptFetchFinished):
        (WebCore::SWServerRegistration::scriptContextFailedToStart):

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

        Assert that NoEventDispatchAssertion is not in the stack when executing a script
        https://bugs.webkit.org/show_bug.cgi?id=179107

        Reviewed by Simon Fraser.

        Assert that NoEventDispatchAssertion::isEventAllowedInMainThread() is true when we're about to execute a script
        by adding the assertion in ScriptController::canExecuteScripts which gets called with AboutToExecuteScript
        whenever we're about to run scripts in event handlers, etc...

        We don't assert the construction of event handlers in JSLazyEventListener since this happens while copying
        the DOM tree inside a SVG use element and creating a event handler's JS function won't execute arbitrary scripts.

        No new tests since there should be no behavioral change other 

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction const): Use newly added AboutToCreateEventListener.
        (WebCore::JSLazyEventListener::create): Ditto.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts): Added the assertion.
        * bindings/js/ScriptController.h:

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

        Regression(r219659): Can no longer log into ifttt.com using Google account
        https://bugs.webkit.org/show_bug.cgi?id=179117

        Reviewed by Geoffrey Garen.

        After r219659, it is no longer possible to log into ifttt.com using a Google
        account:
        - Signed into a Google account already
        - Visit https://ifttt.com/login
        - Click "Continue with Google"
        - Select the signed in account

        It turns out that this change to the HTML specification was not Web-compatible:
        See https://bugzilla.mozilla.org/show_bug.cgi?id=1412741 & https://github.com/whatwg/html/issues/3183

        This patch reverts r219659 for now until we agree on what behavior should get
        specified.

        No new tests, rebaselined existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::JSLocation::getOwnPropertyNames):

2017-10-31  Dean Jackson  <dino@apple.com>

        transferFromImageBitmap should update canvas dimensions
        https://bugs.webkit.org/show_bug.cgi?id=179096
        <rdar://problem/35285218>

        Reviewed by Sam Weinig.

        When transferFromImageBitmap is called, the dimensions of the HTMLCanvasElement
        should be updated to reflect the size of the passed ImageBitmap.

        Update an existing WPT result.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setImageBuffer const): Update the
        size of the element based on the incoming buffer.
        * html/HTMLCanvasElement.h: Mark m_size as mutable so we can
        call it from the const function setImageBuffer.

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

        [JSC] Introduce @toObject
        https://bugs.webkit.org/show_bug.cgi?id=178726

        Reviewed by Saam Barati.

        Use @isObject instead. It is more efficient.

        * Modules/mediastream/NavigatorUserMedia.js:
        (getUserMedia):

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

        Unreviewed, rolling out r224273 and r224278.
        https://bugs.webkit.org/show_bug.cgi?id=179120

        Some crashes under guard malloc (Requested by anttik on
        #webkit).

        Reverted changesets:

        "Remove empty continuations in
        RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers"
        https://bugs.webkit.org/show_bug.cgi?id=179014
        https://trac.webkit.org/changeset/224273

        "Fix ContinuationChainNode::insertAfter assertion."
        https://bugs.webkit.org/show_bug.cgi?id=179115
        https://trac.webkit.org/changeset/224278

2017-11-01  Emilio Cobos Álvarez  <emilio@crisal.io>

        Fix ContinuationChainNode::insertAfter assertion.
        https://bugs.webkit.org/show_bug.cgi?id=179115

        Reviewed by Antti Koivisto.

        The assertion was writing instead of reading next->previous.

        Hopefully it's harmless because it was clobbered on the same line, but
        it's worth asserting what it was intending to assert.

        No new tests (no behaviour change).

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::ContinuationChainNode::insertAfter):

2017-11-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use LazyNeverDestroyed instead of DEFINE_GLOBAL
        https://bugs.webkit.org/show_bug.cgi?id=174979

        Reviewed by Yusuke Suzuki.

        No new tests since there should be no behavioral change.

        * DerivedSources.cpp: Remove the warning of StaticConstructors.h.
        * WebCore.order: Removed
        * config.h: Removed definitions of SKIP_STATIC_CONSTRUCTORS_ON_MSVC and SKIP_STATIC_CONSTRUCTORS_ON_GCC.
        * dom/QualifiedName.cpp:
        (WebCore::createQualifiedName): Deleted.
        * dom/QualifiedName.h: Removed createQualifiedName.
        * dom/make_names.pl:
        (printCppHead): Do not include StaticConstructors.h.

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

        [GTK] Always include TextureMapper.cmake
        https://bugs.webkit.org/show_bug.cgi?id=179060

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake:

2017-11-01  Antti Koivisto  <antti@apple.com>

        Remove empty continuations in RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers
        https://bugs.webkit.org/show_bug.cgi?id=179014

        Reviewed by Geoff Garen.

        Treat continuation similarly to other anonymous wrappers. This makes things more understandable
        and allows removal of some questionable code in RenderBlock::takeChild.

        The patch also makes continuation chain a double linked so we can efficiently remove single
        continuations from the chain. It also gets rid of algorithms that recurse in continuation chain.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::firstChildInContinuation):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):

            Don't add and remove continuations from the chain when updating style. Prevent recursion by walking
            the chain only in the (non-continuation) head renderer.

        (WebCore::RenderBlock::dropAnonymousBoxChild):

            Make a member function.

        (WebCore::RenderBlock::takeChild):

            Remove code that destroyed empty continuations and caused the parent to destroy itself.
            Empty continuations are now removed by RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers.

        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::ContinuationChainNode::ContinuationChainNode):
        (WebCore::RenderBoxModelObject::ContinuationChainNode::~ContinuationChainNode):
        (WebCore::RenderBoxModelObject::ContinuationChainNode::insertAfter):

            Track continuations with double linked lists.

        (WebCore::continuationChainNodeMap):
        (WebCore::RenderBoxModelObject::willBeDestroyed):

            Don't recurse to destroy continuation chain. 
            Destroy all continuations iteratively if this is the head of the chain.
            When destroying a continuation renderer simply remove it from the chain.

        (WebCore::RenderBoxModelObject::continuation const):
        (WebCore::RenderBoxModelObject::insertIntoContinuationChainAfter):
        (WebCore::RenderBoxModelObject::removeFromContinuationChain):
        (WebCore::RenderBoxModelObject::ensureContinuationChainNode):
        (WebCore::continuationMap): Deleted.
        (WebCore::RenderBoxModelObject::setContinuation): Deleted.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::removeAnonymousWrappersForInlinesIfNecessary):

            Make this a function of the parent renderer itself instead of getting 'parent()' as first operation and
            then using it.
            Don't remove continuations (isAnonymousBlockContinuation() test gives wrong result for the last continuation of the chain).

        (WebCore::RenderElement::styleDidChange):

            removeAnonymousWrappersForInlinesIfNecessary is no function of the parent.

        (WebCore::RenderElement::updateOutlineAutoAncestor):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasContinuationChainNode const):
        (WebCore::RenderElement::setHasContinuationChainNode):
        (WebCore::RenderElement::hasContinuation const): Deleted.
        (WebCore::RenderElement::setHasContinuation): Deleted.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):

            Don't add and remove continuations from the chain when updating style. Prevent recursion by walking
            the chain only in the (non-continuation) head renderer.

        (WebCore::RenderInline::addChildIgnoringContinuation):

            Remove the old continuation from the chain. splitFlow() will add it back into the right place.

        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::childBecameNonInline):

            Remove the old continuation from the chain. splitFlow() will add it back into the right place.

        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::propagateRepaintToParentWithOutlineAutoIfNeeded const):
        (WebCore::RenderObject::outputRenderObject const):
        (WebCore::findDestroyRootIncludingAnonymous):

            Allow anonymous continuations as destroy roots.

        (WebCore::RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers):

            Removing a continuation may leave behind unnecessary anonymous sibling wrappers.
            Call removeAnonymousWrappersForInlinesIfNecessary() on parent after removal to get rid of them.

2017-10-31  Said Abou-Hallawa  <sabouhallawa@apple.com>

        updateMaskedAncestorShouldIsolateBlending() should check the Nullability of the computedStyle() of the element's ancestors
        https://bugs.webkit.org/show_bug.cgi?id=179085
        <rdar://problem/30888101>

        Reviewed by Ryosuke Niwa.

        This is a defensive change. The Element::computedStyle() can be null only
        if the element is not a connected to the DOM tree. This may happen if
        while the DOM tree is being changed, a different event is handled such
        that it requires styleReclac()/layout() to happen. In this case, the render
        tree will be in an incorrect state.

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending):

2017-10-31  Alex Christensen  <achristensen@webkit.org>

        Use asynchronous ResourceHandleClient calls for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=160677

        Reviewed by Brady Eidson.

        Covered by existing tests.

        * PlatformAppleWin.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestAsync):
        (WebCore::ResourceLoader::didReceiveResponseAsync):
        (WebCore::ResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponseAsync):
        (WebCore::ApplicationCacheGroup::willSendRequestAsync):
        (WebCore::ApplicationCacheGroup::canAuthenticateAgainstProtectionSpaceAsync):
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Deleted.
        * loader/appcache/ApplicationCacheGroup.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::continueDidReceiveResponse):
        (WebCore::BlobResourceHandle::getSizeForNext):
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        (WebCore::BlobResourceHandle::notifyResponseOnError):
        * platform/network/PingHandle.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didReceiveResponse):
        (WebCore::ResourceHandle::usesAsyncCallbacks): Deleted.
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::~ResourceHandleClient):
        (WebCore::ResourceHandleClient::willSendRequest): Deleted.
        (WebCore::ResourceHandleClient::willSendRequestAsync): Deleted.
        (WebCore::ResourceHandleClient::didReceiveResponseAsync): Deleted.
        (WebCore::ResourceHandleClient::canAuthenticateAgainstProtectionSpaceAsync): Deleted.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandleClient::didReceiveResponse): Deleted.
        (WebCore::ResourceHandleClient::usesAsyncCallbacks): Deleted.
        (WebCore::ResourceHandleClient::canAuthenticateAgainstProtectionSpace): Deleted.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequestAsync):
        (WebCore::SynchronousLoaderClient::canAuthenticateAgainstProtectionSpaceAsync):
        (WebCore::SynchronousLoaderClient::didReceiveResponseAsync):
        (WebCore::SynchronousLoaderClient::didFinishLoading):
        (WebCore::SynchronousLoaderClient::didFail):
        (WebCore::SynchronousLoaderClient::willSendRequest): Deleted.
        (WebCore::SynchronousLoaderClient::canAuthenticateAgainstProtectionSpace): Deleted.
        (WebCore::SynchronousLoaderClient::didReceiveResponse): Deleted.
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::releaseHandle):
        (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::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp: Removed.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h: Removed.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::makeDelegate):
        (WebCore::ResourceHandle::delegate):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillCacheResponse):
        (WebCore::ResourceHandle::shouldUseCredentialStorage): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.h: Removed.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm: Removed.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

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

        Rubber-banding overflow-scrolling-touch shows black
        https://bugs.webkit.org/show_bug.cgi?id=179087
        rdar://problem/35260253

        Reviewed by Sam Weinig.

        The "backgroundIsKnownToBeObscured" optimization was kicking in for an overflow:scroll
        whose area was completely covered by its contents, which happens with overlay scrollbars.

        However, this ignored the fact that you can rubber-band to reveal the background, and,
        on iOS, composited scrolling requires that the scroller background is painted since it goes
        into its own layer.

        Fix by turning off the optimization for layers that scroll overflow, including those
        using composited scrolling.

        Test: fast/scrolling/rubber-band-shows-background.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::foregroundIsKnownToBeOpaqueInRect const):
        (WebCore::RenderBox::computeBackgroundIsKnownToBeObscured):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2017-10-31  Tim Horton  <timothy_horton@apple.com>

        Clean up some drag and drop feature flags
        https://bugs.webkit.org/show_bug.cgi?id=179082

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

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

        Make it possible to test rubber-banding in overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=179078

        Reviewed by Sam Weinig.

        Test: fast/scrolling/unconstrained-scrollto.html
        
        Add internals.unconstrainedScrollTo(element, x, y) and plumb through ScrollClamping
        (which replaces RenderLayer::ScrollOffsetClamping) to support it.

        Flip the default from unclamped to clamped for various RenderLayer scrolling-related
        functions, since most callers want clamped.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::scrollTo const):
        * dom/Element.cpp:
        (WebCore::Element::scrollTo):
        * dom/Element.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollTo):
        * html/HTMLBodyElement.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::elementDidBlur):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollTo const):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::scrollOverflowLayer):
        (WebCore::Frame::checkOverflowScroll):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation):
        * platform/ScrollAnimator.h:
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        * platform/ScrollableArea.h:
        * platform/cocoa/ScrollController.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorMac::immediateScrollToPosition):
        * platform/mock/ScrollAnimatorMock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint):
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore::RenderLayer::applyPostLayoutScrollPositionIfNeeded):
        (WebCore::RenderLayer::scrollToXPosition):
        (WebCore::RenderLayer::scrollToYPosition):
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::setScrollLeft):
        (WebCore::RenderListBox::setScrollTop):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::setScrollLeft):
        (WebCore::RenderTextControlSingleLine::setScrollTop):
        * rendering/RenderTextControlSingleLine.h:
        * testing/Internals.cpp:
        (WebCore::Internals::unconstrainedScrollTo):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-10-31  Dean Jackson  <dino@apple.com>

        Accept Settings object in ImageBitmapRenderingContext constructor and getContext
        https://bugs.webkit.org/show_bug.cgi?id=179075
        <rdar://problem/35279965>

        Reviewed by Sam Weinig.

        Allow getContext("bitmaprenderer") to take a dictionary as another argument, and
        pass that on to the ImageBitmapRenderingContext constructor.

        Unfortunately this meant having to move ImageBitmapRenderingContext::Settings out into
        a stand-alone struct, since it needs to be defined in HTMLCanvasElement, which itself
        needs to be defined for ImageBitmapRenderingContext.

        * DerivedSources.make: Add new IDL.
        * WebCore.xcodeproj/project.pbxproj: New files.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContextBitmapRenderer):
        (WebCore::HTMLCanvasElement::getContextBitmapRenderer):

            Accept the ImageBitmapRenderingContextSettings object, and pass it on.

        * html/HTMLCanvasElement.h:
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::ImageBitmapRenderingContext):
        * html/canvas/ImageBitmapRenderingContext.h:
        * html/canvas/ImageBitmapRenderingContext.idl:
        * html/canvas/ImageBitmapRenderingContextSettings.h: Copied from Source/WebCore/html/canvas/ImageBitmapRenderingContext.idl.
        * html/canvas/ImageBitmapRenderingContextSettings.idl: Added.

2017-10-31  Tim Horton  <timothy_horton@apple.com>

        Fix up some content filtering feature flags
        https://bugs.webkit.org/show_bug.cgi?id=179079

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

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

        navigator.serviceWorker should always return the same object
        https://bugs.webkit.org/show_bug.cgi?id=179067

        Reviewed by Youenn Fablet.

        navigator.serviceWorker should always return the same object:
        - https://www.w3.org/TR/service-workers-1/#navigator-service-worker

        Add visitor to make sure we don't gc() the ServiceWorkerContainer wrapper too early.

        Test: http/tests/workers/service/navigator-serviceWorker-same-object.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNavigatorCustom.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerContainer.idl.
        (WebCore::JSNavigator::visitAdditionalChildren):
        * page/Navigator.idl:
        * workers/service/ServiceWorkerContainer.idl:

2017-10-31  Antoine Quint  <graouts@apple.com>

        [Web Animations] Support AnimationEffect parameter in Animation constructor and read-write timeline property
        https://bugs.webkit.org/show_bug.cgi?id=179066

        Reviewed by Dean Jackson.

        We update the Animation constructor signature and behavior to allow for an AnimationEffect as its first,
        null by default, parameter and implement the spec behavior where an omitted AnimationTimeline parameter
        should default to the document timeline. We also make the timeline property read-write.

        Existing tests are rebaselined and amended for this new behavior.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::WebAnimation):
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setTimeline):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2017-10-31  Ali Juma  <ajuma@chromium.org>

        Layout viewport rect is too wide after window resize
        https://bugs.webkit.org/show_bug.cgi?id=175235

        Reviewed by Dave Hyatt.

        After a window resize, ScrollView::updateScrollbars adds/removes scrollbars and triggers
        layout. Each addition or removal triggers another pass, but at most 2 additional passes
        are allowed. If a scrollbar is added or removed in the final allowed pass, layout is
        left in an inconsistent state wrt the presence of scrollbars.

        To avoid unnecessary passes, don't remove both scrollbars when only one needs to be
        removed. This saves the extra pass needed to add the scrollbar back.

        Test: fast/dom/Window/window-resize-update-scrollbars.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

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

        [Attachment Support] Implement WKWebView SPI for inserting attachment elements
        https://bugs.webkit.org/show_bug.cgi?id=179013
        <rdar://problem/35249668>

        Reviewed by Tim Horton.

        Adds Editor helper methods to insert an attachment element at the current selection.

        Test: WKAttachmentTests.AttachmentElementInsertion

        * editing/Editor.cpp:
        (WebCore::Editor::insertAttachment):
        (WebCore::Editor::insertAttachmentFromFile):
        * editing/Editor.h:

        Add two new helpers for inserting attachment elements, either from a filename or a data blob. This is a wrapper
        around Editor::replaceSelectionWithFragment.

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

        Add a unique identifier string to HTMLAttachmentElement. This unique identifier allows the UI process to
        reference and indirectly manipulate attachment elements.

2017-10-31  Alex Christensen  <achristensen@webkit.org>

        Fix custom header field setting with reloads and asynchronous navigation action policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=179064

        Reviewed by Tim Horton.

        r223909 had two problems:
        1. It called addHTTPHeaderField instead of setHTTPHeaderField, so when a page is reloaded the header field
        is added to the resource request to be reloaded, which already had the headers added.
        2. It only worked in the synchronous decidePolicyForNavigationAction code path, not for asynchronous completion handlers.

        These are both fixed, and both cases are covered with new API tests.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2017-10-31  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: make ScriptCallStack::maxCallStackSizeToCapture the default value when capturing backtraces
        https://bugs.webkit.org/show_bug.cgi?id=179048

        Reviewed by Mark Lam.

        No change in functionality.

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::reportException):
        * dom/RejectedPromiseTracker.cpp:
        (WebCore::createScriptCallStackFromReason):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::printToConsole):
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildInitiatorObject):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

2017-10-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Build more files under WebCore as unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178968

        Reviewed by Keith Miller.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * SourcesGTK.txt: Added.
        * SourcesWPE.txt:

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

        Assert that no script is executed during LayoutPhase::InRenderTreeLayout
        https://bugs.webkit.org/show_bug.cgi?id=179046

        Reviewed by Antti Koivisto.

        Added NoEventDispatchAssertion to LayoutPhase::InRenderTreeLayout.

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layout):

2017-10-31  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: replace Canvas stack iteration with createScriptCallStack
        https://bugs.webkit.org/show_bug.cgi?id=178980

        Reviewed by Joseph Pecoraro.

        No new tests, updated existing tests.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::buildAction):
        (WebCore::iterateCallFrames): Deleted.

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

        [FreeType] Simple and complex paths are not applied consistently
        https://bugs.webkit.org/show_bug.cgi?id=177601

        Reviewed by Michael Catanzaro.

        Due to bug #100050, when rendering text, the complex path is forced in case kerning or shaping is enabled and
        only part of the run is going to be rendered. This happens in the GTK+ port when selecting text (except when
        selecting the whole run, of course). The text is initially rendered using the simple path as returned by
        FontCascade::codePath() and then the selection is rendered using the complex path, overriding what
        FontCascade::codePath() returned in that case. This doesn't happen in mac, because the selection is rendered
        differently, so FontCascade::drawText always renders the full run (simple path) when selecting text. Selecting
        text is the most noticeable inconsistency, but it's not the only one. Similar exceptions are applied when
        calculating the text width, or getting the offset of a given position. The rendered text is the simple one, but
        the calculations are performed using the complex path, so depending on the kerning and ligatures we might end up
        with wrong results. If the text has been rendered using the simple path, the selections and all other
        calculations should be performed with the simple path too. This patch moves the condition to force complex text
        to FontCascade::codePath(), and only for non Freetype ports. This ensures that all callers to
        FontCascade::codePath() will get a consistent result.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawText const): Use the mode returned by codePath().
        (WebCore::FontCascade::drawEmphasisMarks const): Ditto.
        (WebCore::FontCascade::adjustSelectionRectForText const): Use the mode returned by codePath().
        (WebCore::FontCascade::offsetForPosition const): Ditto.
        (WebCore::FontCascade::codePath const): Force complex text for partial runs for ports not enabling advance text
        rendering mode by default.
        * platform/graphics/FontCascade.h: Add to and from optional parameters to codePath().

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

        Fire updatefound event after resolving the registration promise
        https://bugs.webkit.org/show_bug.cgi?id=178985

        Reviewed by Youenn Fablet.

        Fake series of events that are supposed to happen after registering a service worker
        that notify the page of the service worker's installation and activation.

        Also make sure that registration.installing / waiting / active return proper values.
        Make sure that serviceWorker.scriptURL returns a proper value.

        This unblocks a lot of web-platform-tests since they were blocked shortly after
        registration due to missing events or registration.installing being null.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::activeServiceWorker const):
        (WebCore::ScriptExecutionContext::setActiveServiceWorker):
        * dom/ScriptExecutionContext.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::prepareFetch):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::setState):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::controller const):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::~ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::installing):
        (WebCore::ServiceWorkerRegistration::waiting):
        (WebCore::ServiceWorkerRegistration::active):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistrationData.cpp:
        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::encode const):
        (WebCore::ServiceWorkerRegistrationData::decode):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptContextStarted):
        (WebCore::SWServerRegistration::runRegisterJob):
        (WebCore::SWServerRegistration::data const):
        * workers/service/server/SWServerRegistration.h:

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

        Use LazyNeverDestroyed instead of DEFINE_GLOBAL for XMLNames, HTMLNames, MathMLNames and SVGNames
        https://bugs.webkit.org/show_bug.cgi?id=175118

        Reviewed by Alex Christensen.

        Stop using DEFINE_GLOBAL hack in favor of LazyNeverDestroyed.

        No new tests since there should be no behavioral change.

        * dom/make_names.pl:
        (printConstructors):
        (printNamesHeaderFile):
        (printNamesCppFile):
        (printDefinitions):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole const):
        * css/StyleResolver.cpp:
        (WebCore::hasEffectiveDisplayNoneForDisplayContents):
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::observesStyleAttribute const):
        * dom/Document.cpp:
        (WebCore::Document::validateCustomElementName):
        * dom/Element.cpp:
        (WebCore::isStyleAttribute):
        (WebCore::canAttachAuthorShadowRoot):
        * dom/ElementData.cpp:
        (WebCore::ElementData::findLanguageAttribute const):
        * domjit/JSDocumentDOMJIT.cpp:
        (WebCore::compileDocumentBodyAttribute):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToBodyElement const):
        * editing/EditorCommand.cpp:
        (WebCore::valueDefaultParagraphSeparator):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
        (WebCore::MarkupAccumulator::appendNamespace):
        (WebCore::MarkupAccumulator::elementCannotHaveEndTag):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isProhibitedParagraphChild):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::isCaseSensitiveAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::findFosterSite):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::hasTemplateInHTMLScope const):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::updatePredictedBaseURL):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processTemplateEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFileForInTemplateContents):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTableEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
        (WebCore::HTMLTreeBuilder::defaultForInHead):
        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
        (WebCore::HTMLTreeBuilder::defaultForAfterHead):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::pathFromGraphicsElement):
        * rendering/svg/SVGResources.cpp:
        (WebCore::clipperFilterMaskerTags):
        (WebCore::markerTags):
        (WebCore::fillAndStrokeTags):
        (WebCore::chainableResourceTags):
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isSupportedAttribute):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::isSupportedAttribute):
        * svg/SVGElement.cpp:
        (WebCore::createAttributeNameToCSSPropertyIDMap):
        (WebCore::SVGElement::childShouldCreateRenderer const):
        (WebCore::SVGElement::animatableAttributeForName):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::isSupportedAttribute):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isSupportedAttribute):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::isSupportedAttribute):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::isSupportedAttribute):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::isSupportedAttribute):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::isSupportedAttribute):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::isSupportedAttribute):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::isSupportedAttribute):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::dPropertyInfo):
        (WebCore::SVGPathElement::isSupportedAttribute):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::isSupportedAttribute):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::pointsPropertyInfo):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::isSupportedAttribute):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::textLengthPropertyInfo):
        (WebCore::SVGTextContentElement::isSupportedAttribute):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::isSupportedAttribute):
        * svg/SVGUseElement.cpp:
        (WebCore::createAllowedElementSet):
        * xml/NativeXPathNSResolver.cpp:
        (WebCore::NativeXPathNSResolver::lookupNamespaceURI):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::parseDocumentFragment):

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

        [WebGL] Optimization to skip painting if texture and source surface hasn't changed isn't working; re-optimize.
        https://bugs.webkit.org/show_bug.cgi?id=178953

        Reviewed by Dean Jackson.

        The "seed" value of the current bound texture never matches the last saved value in
        VideoTextureCopierCV::copyImageToPlatformTexture(). The value is modified by the function
        itself, so a fresh value needs to be re-queried after the image's surface is attached to the
        texture.

        Once this fix is in, however, the <canvas> being painted will flash when no new image is
        available. This is because the wrong texture target is being restored by the GC3DStateSaver
        at the end of copyImageToPlatformTexture(). While we're fixing that, we may as well use the
        texture state saved by the GraphicsContext3D itself to restore the correct texture unit,
        texture target, and texture.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::activeTextureUnit const):
        (WebCore::GraphicsContext3D::currentBoundTexture const):
        (WebCore::GraphicsContext3D::currentBoundTarget const):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::currentBoundTexture const):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::boundTexture const):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::currentBoundTarget const):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::boundTarget const):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::currentBoundTexture): Deleted.
        (WebCore::GraphicsContext3D::GraphicsContext3DState::boundTexture): Deleted.
        (WebCore::GraphicsContext3D::GraphicsContext3DState::boundTarget): Deleted.
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::GC3DStateSaver):
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::~GC3DStateSaver):
        * platform/graphics/cv/VideoTextureCopierCV.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::bindTexture):

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        WKBundlePageWillSendSubmitEventCallback is called with incorrect frame parameter
        https://bugs.webkit.org/show_bug.cgi?id=176719

        Reviewed by Chris Dumez.

        WKBundlePageWillSendSubmitEventCallback is clearly intended to parallel
        WKBundlePageWillSubmitFormCallback, since almost all the parameters are the same. Now, in
        WKBundlePageWillSubmitFormCallback, the first WKBundleFrameRef, "frame", is the frame of the
        form target, and the second WKBundleFrameRef, sourceFrame, is the frame containing the form.
        That's correct. But in WKBundlePageWillSendSubmitEventCallback, both frame and sourceFrame
        are always identical. The problem is that the FrameLoaderClient delegate is called on the
        wrong FrameLoaderClient. It should be called on the FrameLoaderClient of the target frame,
        but HTMLFormElement calls it on the FrameLoaderClient of the source frame instead.

        Fix this by factoring the target frame computation out of FormSubmission into some helpers.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareForSubmission):
        (WebCore::HTMLFormElement::effectiveTarget const):
        (WebCore::HTMLFormElement::findSubmitButton const):
        * html/HTMLFormElement.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

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

        ASSERTION FAILED: internalValuesConsistent(m_url) in WebCore::URLParser::URLParser
        https://bugs.webkit.org/show_bug.cgi?id=178861

        Reviewed by Tim Horton.

        This is a dark corner of the URL spec that has wildly different behavior in different browsers.
        The assertion fired when we have a file URL with a ? or a # after file:// and it was because
        m_pathAfterLastSlash was still 0. We definitely shouldn't assert. I'm making us consistent with
        other cases where we have nothing there and add an implied missing slash.
        
        Covered by new API tests.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

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

        Correctly determine affinity when inserting text via Keyboard Suggestions
        https://bugs.webkit.org/show_bug.cgi?id=178969

        Reviewed by Ryosuke Niwa.

        There has been talk about renaming these enums, but in the meantime we should at least have a comment 
        clarifying what they actually mean.

        No new tests only adding a comment, no tests needed.

        * editing/TextAffinity.h:

2017-10-27  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in addChildNodesToDeletionQueue
        https://bugs.webkit.org/show_bug.cgi?id=178974
        <rdar://problem/35234372>

        Reviewed by Brent Fulgham.

        The bug was caused by HTMLConstructionSite::insertTextNode constructing an ill-formed tree
        when fostering parent under a template element by adjusting HTMLConstructionSiteTask's parent
        without clearing nextChild. Fixed the crash by simply removing this code since executeTask
        already takes care of fostering the parent in static inline insert(HTMLConstructionSiteTask&).

        Test: fast/parser/foster-parent-under-template.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):

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

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

        MotionMark regression (Requested by shallawa on #webkit).

        Reverted changeset:

        "When navigating back to a page, compositing layers may not
        use accelerated drawing"
        https://bugs.webkit.org/show_bug.cgi?id=178749
        https://trac.webkit.org/changeset/224078

2017-10-30  Dean Jackson  <dino@apple.com>

        Implement "bitmaprenderer" CanvasRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=178992
        <rdar://problem/34147157>

        Reviewed by Sam Weinig.

        Implement the "bitmaprenderer" context for HTMLCanvasElement.
        Use as much of the existing 2d context code as possible, which
        means that we are painting the ImageBitmap into the backing
        store. This isn't optimal, but it is good enough to get
        going while we move buffer ownership from the canvas object
        into the rendering contexts.

        This patch raised a few issues on the HTML specification:
        https://github.com/whatwg/html/issues/3164
        https://github.com/whatwg/html/issues/3165
        https://github.com/whatwg/html/issues/3166
        https://github.com/whatwg/html/issues/3167

        Update existing Web Platform Test results.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContext2d): Drive-by comment fix.
        (WebCore::HTMLCanvasElement::createContextWebGL): Ditto.
        (WebCore::HTMLCanvasElement::createContextWebGPU): Ditto.
        (WebCore::HTMLCanvasElement::createContextBitmapRenderer): We now require
        a layer/backing store for a bitmap context.
        (WebCore::HTMLCanvasElement::paintsIntoCanvasBuffer const): Add bitmap-renderer
        to the type of context that uses the canvas's backing store.
        (WebCore::HTMLCanvasElement::createImageBuffer const): Comment fix.
        (WebCore::HTMLCanvasElement::setImageBuffer const): Change parameter to a &&.
        (WebCore::HTMLCanvasElement::setImageBufferAndMarkDirty): New function to set
        the backing store efficiently, as well as make it look like we need to repaint
        the entire canvas.
        (WebCore::HTMLCanvasElement::drawingContext const): The buffer doesn't actually
        need to provide a GraphicsContext if we're a bitmap renderer.
        * html/HTMLCanvasElement.h:

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::transferOwnershipAndClose): New helper to give the ownership
        of the ImageBuffer away, and look like close() was called.
        * html/ImageBitmap.h:

        * html/canvas/ImageBitmapRenderingContext.cpp: Implement the algorithm from the HTML
        specification.
        (WebCore::ImageBitmapRenderingContext::ImageBitmapRenderingContext):
        (WebCore::ImageBitmapRenderingContext::isAccelerated const):
        (WebCore::ImageBitmapRenderingContext::setOutputBitmap):
        (WebCore::ImageBitmapRenderingContext::transferFromImageBitmap):
        * html/canvas/ImageBitmapRenderingContext.h:
        * html/canvas/ImageBitmapRenderingContext.idl:

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

        tab-size: 0px asserts
        https://bugs.webkit.org/show_bug.cgi?id=176198

        Reviewed by Antti Koivisto.

        Don't claim to support tab-size values with units. We don't, and they would become 0, rather
        than fall back to the default as should happen.

        Enhanced fast/css/tab-size.html to test.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeTabSize):

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Fix build warnings
        https://bugs.webkit.org/show_bug.cgi?id=178899

        Reviewed by Carlos Alberto Lopez Perez.

        These are actually mostly cross-platform issues.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::arrayBufferViewElementSize):
        * platform/Cairo.cmake:
        * platform/Curl.cmake:
        * platform/FreeType.cmake:
        * platform/GCrypt.cmake:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::create):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build more files under WebCore as unified sources and get rid of WebCorePlatformWPE build target
        https://bugs.webkit.org/show_bug.cgi?id=178964

        Reviewed by Carlos Alberto Lopez Perez.

        This also gets rid of the WebCorePlatformWPE build target to simplify the build. It links to
        all the same libraries as the WebCore target, so it doesn't seem to have any purpose. Bye.

        Some CMake files under platform are not unified, either because there is not much to gain
        (e.g. ImageDecoders, where everything is in a separate directory), or because it is complex
        (e.g. GStreamer, where GObject implementations would be tricky to build unified), and
        because we're limited to using only features declared in WebKitFeatures.cmake inside the
        unified sources lists, which makes some of the platform files a bit tricky (notably,
        anything that needs to go into WebCorePlatformGTK for the GTK port). So it's not perfect.

        * PlatformWPE.cmake:
        * SourcesWPE.txt: Added.
        * crypto/gcrypt/GCryptUtilities.h:
        * platform/Cairo.cmake:
        * platform/GCrypt.cmake:
        * platform/SourcesCairo.txt: Added.
        * platform/SourcesGCrypt.txt: Added.
        * platform/SourcesGLib.txt: Added.
        * platform/SourcesSoup.txt: Added.

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove more unused ENABLE(GAMEPAD_DEPRECATED) code
        https://bugs.webkit.org/show_bug.cgi?id=178364

        Reviewed by Carlos Alberto Lopez Perez.

        * Modules/gamepad/deprecated/Gamepad.cpp: Removed.
        * Modules/gamepad/deprecated/Gamepad.h: Removed.
        * Modules/gamepad/deprecated/Gamepad.idl: Removed.
        * Modules/gamepad/deprecated/GamepadList.cpp: Removed.
        * Modules/gamepad/deprecated/GamepadList.h: Removed.
        * Modules/gamepad/deprecated/GamepadList.idl: Removed.
        * Modules/gamepad/deprecated/NavigatorGamepad.cpp: Removed.
        * Modules/gamepad/deprecated/NavigatorGamepad.h: Removed.
        * Modules/gamepad/deprecated/NavigatorGamepad.idl: Removed.

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

        Use if conditional function in DerivedSources.make to reduce duplication
        https://bugs.webkit.org/show_bug.cgi?id=178989

        Reviewed by Darin Adler.

        In DerivedSources.make we currently duplicate most of the Makefile recipe for generating HTML/SVG
        tags and attributes to support passing the optional command line option --extraDefines when one
        or more HTML/SVG compile-time features are enabled. Instead we can make use of a Makefile
        conditional function in the recipe itself to avoid code duplication.

        * DerivedSources.make:

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

        [Web Animations] Expose the playbackRate property on Animation
        https://bugs.webkit.org/show_bug.cgi?id=178931

        Reviewed by Sam Weinig.

        Account for the playback rate when computing and setting an animation's
        current time, ensuring that we adjust the start time to preserve the
        current time when setting a new playback rate.

        Test: http/wpt/wk-web-animations/timing-model/animation-playback-rate.html

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::WebAnimation):
        (WebCore::WebAnimation::currentTime const):
        (WebCore::WebAnimation::setCurrentTime):
        (WebCore::WebAnimation::setPlaybackRate):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2017-10-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Expose availability of certain editing commands in WebKitEditorState
        https://bugs.webkit.org/show_bug.cgi?id=168219

        Reviewed by Ryosuke Niwa.

        Make Editor::canUndo and Editor::canRedo const.

        Also, remove unused allowsCopy from HitTestResult.

        * editing/Editor.cpp:
        (WebCore::Editor::canUndo const):
        (WebCore::Editor::canRedo const):
        (WebCore::Editor::canUndo): Deleted.
        (WebCore::Editor::canRedo): Deleted.
        * editing/Editor.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::allowsCopy const): Deleted.
        * rendering/HitTestResult.h:
        * rendering/SelectionRangeData.cpp:

2017-10-27  Antti Koivisto  <antti@apple.com>

        Destroy all unneeded anonymous wrappers in RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers()
        https://bugs.webkit.org/show_bug.cgi?id=178933

        Reviewed by Zalan Bujtas.

        Currently it just cleans up table related wrappers.

        * rendering/RenderObject.cpp:
        (WebCore::findDestroyRootIncludingAnonymous):

        Continuations are left as future work.

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

        Remove reference to RenderTreeInternalMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=178998
        <rdar://problem/35246464>

        Reviewed by Antti Koivisto.

        We don't have such class anymore.

        No change in functionality.

        * rendering/RenderView.h:

2017-10-30  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Add support for P-521 EC curves
        https://bugs.webkit.org/show_bug.cgi?id=175199

        Reviewed by Jiewen Tan.

        Add support for 521-bit elliptic curves in the libgcrypt-based
        implementation of WebCrypto API.

        In the CryptoAlgorithmECDH implementation, the bit-size of the key is now
        rounded up to the next byte boundary and passed to the helper
        gcryptDerive() function. There the size in bytes is used to zero-pad the
        derived key data. This is done to properly handle derivation results for
        the P-521 curves, where the leading zero bit could get clipped, resulting
        in a derived key that is only 65 byes in length when it is expected to be
        66 bytes. Further cleanups are done in gcryptDerive() to use the mpiData()
        function where possible.

        In the CryptoAlgorithmECDSA implementation, the bit-size of the key is
        again rounded up to the nearest byte boundary before being passed to the
        helper gcryptSign() and gcryptVerify() functions. This again properly
        enforces the requirement of 66 bytes to handle P-521 elliptic curves.

        In the CryptoKeyEC implementation, NamedCurve::P521 cases in helper
        functions operating on NamedCurve values are now implemented to return
        appropriate values. platformSupportedCurve() now returns true for the
        NamedCurve::P521 value. Zero-padding of the private key data is used
        wherever it is necessary to avoid clipping any leading zero bit in the
        P-521 EC key.

        No new tests -- affected tests have their baselines updated.

        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
        (WebCore::gcryptDerive):
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::curveName):
        (WebCore::curveIdentifier):
        (WebCore::curveSize):
        (WebCore::curveUncompressedFieldElementSize):
        (WebCore::CryptoKeyEC::platformSupportedCurve):
        (WebCore::curveForIdentifier):
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        (WebCore::CryptoKeyEC::platformExportPkcs8 const):

2017-10-29  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use of uninitialized value $targetIdlFile in hash element at preprocess-idls.pl line 165.
        https://bugs.webkit.org/show_bug.cgi?id=177743

        Reviewed by Darin Adler.

        GamepadWebVR.idl supplements Gamepad.idl. But, Gamepad.idl is not
        processed because ENABLE_GAMEPAD is OFF.

        No new tests since there should be no behavioral change.

        * CMakeLists.txt: Include GamepadWebVR.idl only if ENABLE_GAMEPAD.
        * Sources.txt: Ditto.
        * bindings/scripts/preprocess-idls.pl: Die if a supplemented IDL file is not found.

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

        [Conic Gradients] Add support for parsing conic gradients
        https://bugs.webkit.org/show_bug.cgi?id=178987

        Reviewed by Dean Jackson.

        Adds initial support, disabled by default, for parsing conic gradients as per
        CSS 4 Images - https://www.w3.org/TR/css-images-4/#conic-gradients.

        Test: fast/gradients/conic-gradient-parsing.html

        * css/CSSGradientValue.cpp:
        (WebCore::clone):
        (WebCore::CSSGradientValue::isCacheable const):
        (WebCore::CSSConicGradientValue::customCSSText const):
        (WebCore::CSSConicGradientValue::createGradient):
        (WebCore::CSSConicGradientValue::equals const):
        * css/CSSGradientValue.h:
        
            Add CSSConicGradientValue as a subclass of CSSGradientValue and implement
            customCSSText() and equals(). Stub out createGradient() as painting is not
            yet implemented.
        
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::isFixedSize const):
        (WebCore::CSSImageGeneratorValue::fixedSize):
        (WebCore::CSSImageGeneratorValue::isPending const):
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque const):
        (WebCore::CSSImageGeneratorValue::loadSubimages):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        
            Dispatch to CSSConicGradientValue as needed.
        
        * css/CSSValue.h:
        (WebCore::CSSValue::isImageGeneratorValue const):
        (WebCore::CSSValue::isGradientValue const):
        (WebCore::CSSValue::isConicGradientValue const):
        
            Add conic gradient predicate support and update isImageGeneratorValue and 
            isGradientValue to include conic gradient.
        
        * css/CSSValueKeywords.in:
        
            Add conic-gradient and repeating-conic-gradient.
        
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        
            Add runtime flags to enable conic gradients.
        
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        
            Helper, similar to consumeLengthOrPercent, for consumeGradientColorStops. 
            Corresponds to https://drafts.csswg.org/css-values-4/#typedef-angle-percentage
        
        (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops):
        
            Convert to take CSSGradientValue by reference.
        
        (WebCore::CSSPropertyParserHelpers::consumeAngularGradientColorStops):
        
            Helper, similar to consumeGradientColorStops, but for angular color stops
            used in conic gradients. Corresponds to https://www.w3.org/TR/css-images-4/#typedef-angular-color-stop-list
            but does not yet support double position syntax.
        
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeLinearGradient):
        
            Pass CSSGradientValue by reference.
        
        (WebCore::CSSPropertyParserHelpers::consumeConicGradient):
        
            Parse conic gradient.
        
        (WebCore::CSSPropertyParserHelpers::consumeGeneratedImage):
        
            Dispatch to consumeConicGradient for repeating and non-repeating
            conic gradients.
        
        (WebCore::CSSPropertyParserHelpers::isGeneratedImage):
        
            Put each value on its own line to make it more readable and add CSSValueConicGradient
            and CSSValueRepeatingConicGradient.
        
        * page/Settings.yaml:
        
            Add a setting to enable conic gradients. Disabled by default.

        * features.json:
        
            Move conic gradients to "In Development".

2017-10-29  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose the currentTime property on Animation
        https://bugs.webkit.org/show_bug.cgi?id=178988

        Unreviewed.

        Style fixes missed in previous patch.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setCurrentTime):

2017-10-29  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose the currentTime property on Animation
        https://bugs.webkit.org/show_bug.cgi?id=178988

        Reviewed by Dean Jackson.

        We now expose the currentTime property on Animation objects, our first
        step in implementing the Web Animations timing model, specifically section
        3.5.4. "The current time of an animation" and section 3.5.5. "Setting the
        current time of an animation". Setting the startTime has implications on
        currentTime and vice-versa.

        Test: webanimations/animation-current-time.html

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setBindingsStartTime):
        (WebCore::WebAnimation::startTime const):
        (WebCore::WebAnimation::setStartTime):
        (WebCore::WebAnimation::bindingsCurrentTime const):
        (WebCore::WebAnimation::setBindingsCurrentTime):
        (WebCore::WebAnimation::currentTime const):
        (WebCore::WebAnimation::setCurrentTime):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2017-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        Assert that no script is executed during style recalc
        https://bugs.webkit.org/show_bug.cgi?id=178845
        <rdar://problem/35106129>

        Reviewed by Antti Koivisto.

        This patch adds NoEventDispatchAssertion to Document::updateStyle and Document::updateStyleIfNeeded
        to make sure we don't start mutating DOM in the middle of a style update.

        Added NoEventDispatchAssertion::EventAllowedScope for various places in SVGUseElement to update its
        shadow tree since that happens while updating the style.

        No new tests since there should be no behavioral change.

        * dom/Document.cpp:
        (WebCore::Document::resolveStyle): Added NoEventDispatchAssertion while flushing pending stylesheets
        and calling FrameView::willRecalcStyle, and while the style tree solver is in works. Also moved in
        the code to update the selection and schedule to dispatch a fake mouse event into the same scope.
        Also increment m_styleRecalcCount in the same code since post resolution callbacks could run author
        scripts which in turn trigger another (recursive) style recalc.
        (WebCore::Document::updateStyleIfNeeded): Put everything but the call to resolveStyle in a scope with
        NoEventDispatchAssertion.
        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithChildren): Added NoEventDispatchAssertion::EventAllowedScope to the
        newly cloned element for SVG use element's shadow tree.
        (WebCore::Element::cloneElementWithoutChildren): Ditto.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Make the assertion more precise to workaround the fact SVG
        use elements update its shadow tree in the middle of style updates. Also removed a redundant assertion
        since the result of NoEventDispatchAssertion::isEventDispatchAllowedInSubtree cannot chance without
        pushing or popoing the stack frame.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearShadowTree):
        (WebCore::SVGUseElement::updateShadowTree): Added NoEventDispatchAssertion to the user-agent shadow root
        of a SVG use element. Since this is a newly created shadow tree which hasn't been exposed to author
        scripts, it's safe to mutate them during the style recalc even though it's not the best design.
        (WebCore::SVGUseElement::cloneTarget const): Ditto.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree const): Ditto.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree const): Ditto.
        (WebCore::SVGUseElement::transferEventListenersToShadowTree const):

2017-10-28  Dean Jackson  <dino@apple.com>

        createImageBitmap with HTMLCanvasElement
        https://bugs.webkit.org/show_bug.cgi?id=178984
        <rdar://problem/35238440>

        Reviewed by Sam Weinig.

        Implement createImageBitmap(HTMLCanvasElement).

        While here, explicitly reject the promises for the
        methods we haven't yet implemented. I was hoping this
        would avoid a lengthy timeout in one of the imported
        WPT tests but, alas, it doesn't. However, it's still
        a good idea.

        Extend internal WPT proposals to cover canvas creation.

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise): Get the image from
        the canvas and draw it into a new ImageBitmap buffer.

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

        [iOS] Unify Font::platformCharWidthInit() with macOS
        https://bugs.webkit.org/show_bug.cgi?id=178951
        <rdar://problem/7848198>

        Reviewed by Zalan Bujtas.

        The only reason these codepaths are different is because historically this codepath
        didn't work with GS fonts (which we don't use anymore).

        Tests: fast/forms/search-styled.html
               fast/forms/text-control-intrinsic-widths.html
               fast/forms/textarea-width.html

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformCharWidthInit):

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

        self.ExtendableEvent / Client / Clients / WindowClient do not exist in a Service Worker
        https://bugs.webkit.org/show_bug.cgi?id=178976

        Reviewed by Sam Weinig.

        Test: http/tests/workers/service/ServiceWorkerGlobalScope-properties.html

        * workers/service/ExtendableEvent.idl:
        * workers/service/FetchEvent.idl:
        Drop [Exposed=Worker] as there is already [Exposed=ServiceWorker] and
        ServiceWorkerGlobalScope inherits from WorkerGlobalScope. This is redundant
        and we would hit assertions and adding the global constructors at runtime
        when the feature is enabled, because the property already exists.

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

        [FrameView::layout cleanup] Move core layout logic to a separate class.
        https://bugs.webkit.org/show_bug.cgi?id=178771
        <rdar://problem/35166542>

        Reviewed by Simon Fraser.

        Move layout code out from FrameView to LayoutContext.

        LayoutContext holds all the layout related logic (scheduling, needsLayout, handling layout states),
        while scrolling, view sizing methods stay in FrameView.
        Having a dedicated LayoutContext allows to structure the code better.   

        Covered by existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::rendererNeedsDeferredUpdate):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement const):
        (WebCore::AccessibilityRenderObject::layoutCount const):
        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayout):
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        (WebCore::Document::implicitClose):
        (WebCore::Document::isLayoutTimerActive):
        * dom/Element.cpp:
        (WebCore::Element::absoluteEventHandlerBounds):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetLoadingPlugin const):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopForUserCancel):
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        (WebCore::Frame::clearTimers):
        (WebCore::Frame::setPageAndTextZoomFactors):
        (WebCore::Frame::resumeActiveDOMObjectsAndAnimations):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::didFirstLayout const):
        (WebCore::FrameView::willDestroyRenderTree):
        (WebCore::FrameView::didDestroyRenderTree):
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::topContentInsetDidChange):
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        (WebCore::FrameView::adjustScrollbarsForLayout):
        (WebCore::FrameView::willDoLayout): This takes care of the view related task right before entering render tree layout.
        (WebCore::FrameView::didLayout): post layout tasks.
        (WebCore::FrameView::shouldDeferScrollUpdateAfterContentSizeChange):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::maintainScrollPositionAtAnchor):
        (WebCore::FrameView::updateLayerPositionsAfterScrolling):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        (WebCore::FrameView::availableContentSizeChanged):
        (WebCore::FrameView::updateContentsSize):
        (WebCore::FrameView::needsLayout const):
        (WebCore::FrameView::setNeedsLayout):
        (WebCore::FrameView::scheduleSelectionUpdate):
        (WebCore::FrameView::updateEmbeddedObjects):
        (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
        (WebCore::FrameView::flushPostLayoutTasksQueue):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::sendResizeEventIfNeeded):
        (WebCore::FrameView::autoSizeIfEnabled):
        (WebCore::FrameView::paintControlTints):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        (WebCore::FrameView::enableAutoSizeMode):
        (WebCore::FrameView::forceLayout):
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer): Deleted.
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer): Deleted.
        (WebCore::SubtreeLayoutStateMaintainer::shouldDisableLayoutStateForSubtree): Deleted.
        (): Deleted.
        (WebCore::RenderTreeNeedsLayoutChecker::~RenderTreeNeedsLayoutChecker): Deleted.
        (WebCore::applyTextSizingIfNeeded): Deleted.
        (WebCore::FrameView::handleLayoutWithFrameFlatteningIfNeeded): Deleted.
        (WebCore::FrameView::updateStyleForLayout): Deleted.
        (WebCore::FrameView::canPerformLayout const): Deleted.
        (WebCore::FrameView::layout): Deleted.
        (WebCore::FrameView::runOrSchedulePostLayoutTasks): Deleted.
        (WebCore::FrameView::convertSubtreeLayoutToFullLayout): Deleted.
        (WebCore::FrameView::layoutTimerFired): Deleted.
        (WebCore::FrameView::scheduleRelayout): Deleted.
        (WebCore::isObjectAncestorContainerOf): Deleted.
        (WebCore::FrameView::scheduleRelayoutOfSubtree): Deleted.
        (WebCore::FrameView::layoutPending const): Deleted.
        (WebCore::FrameView::unscheduleRelayout): Deleted.
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded): Deleted.
        * page/FrameView.h:
        * page/LayoutContext.cpp: Added.
        (WebCore::isObjectAncestorContainerOf):
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::shouldDisableLayoutStateForSubtree):
        (WebCore::RenderTreeNeedsLayoutChecker::~RenderTreeNeedsLayoutChecker):
        (WebCore::LayoutScope::LayoutScope):
        (WebCore::LayoutScope::~LayoutScope):
        (WebCore::LayoutContext::LayoutContext):
        (WebCore::LayoutContext::layout):
        (WebCore::LayoutContext::runOrScheduleAsynchronousTasks):
        (WebCore::LayoutContext::runAsynchronousTasks):
        (WebCore::LayoutContext::flushAsynchronousTasks):
        (WebCore::LayoutContext::reset):
        (WebCore::LayoutContext::needsLayout const):
        (WebCore::LayoutContext::setNeedsLayout):
        (WebCore::LayoutContext::enableSetNeedsLayout):
        (WebCore::LayoutContext::disableSetNeedsLayout):
        (WebCore::LayoutContext::scheduleLayout):
        (WebCore::LayoutContext::unscheduleLayout):
        (WebCore::LayoutContext::scheduleSubtreeLayout):
        (WebCore::LayoutContext::layoutTimerFired):
        (WebCore::LayoutContext::convertSubtreeLayoutToFullLayout):
        (WebCore::LayoutContext::setSubtreeLayoutRoot):
        (WebCore::LayoutContext::canPerformLayout const):
        (WebCore::LayoutContext::applyTextSizingIfNeeded):
        (WebCore::LayoutContext::updateStyleForLayout):
        (WebCore::LayoutContext::handleLayoutWithFrameFlatteningIfNeeded):
        (WebCore::LayoutContext::startLayoutAtMainFrameViewIfNeeded):
        (WebCore::LayoutContext::frame const):
        (WebCore::LayoutContext::view const):
        (WebCore::LayoutContext::renderView const):
        (WebCore::LayoutContext::document const):
        * page/LayoutContext.h: Added.
        (WebCore::LayoutContext::startDisallowingLayout):
        (WebCore::LayoutContext::endDisallowingLayout):
        (WebCore::LayoutContext::layoutPhase const):
        (WebCore::LayoutContext::isLayoutNested const):
        (WebCore::LayoutContext::layoutCount const):
        (WebCore::LayoutContext::isLayoutPending const):
        (WebCore::LayoutContext::isInLayout const):
        (WebCore::LayoutContext::isInRenderTreeLayout const):
        (WebCore::LayoutContext::inPaintableState const):
        (WebCore::LayoutContext::subtreeLayoutRoot const):
        (WebCore::LayoutContext::clearSubtreeLayoutRoot):
        (WebCore::LayoutContext::resetFirstLayoutFlag):
        (WebCore::LayoutContext::didFirstLayout const):
        (WebCore::LayoutContext::setNeedsFullRepaint):
        (WebCore::LayoutContext::needsFullRepaint const):
        (WebCore::LayoutContext::layoutDisallowed const):
        (WebCore::LayoutContext::isLayoutSchedulingEnabled const):
        (WebCore::LayoutContext::inAsynchronousTasks const):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::insertPositionedObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
        (WebCore::RenderBox::computeLogicalWidthInFragment const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::clearSubtreeLayoutRootIfNeeded const):
        (WebCore::RenderElement::checkForRepaintDuringLayout const):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::performLayoutWithFlattening):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        * rendering/RenderObject.cpp:
        (WebCore::scheduleRelayoutForSubtree):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        * testing/Internals.cpp:
        (WebCore::Internals::layoutCount const):
        
2017-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup PageDebuggable
        https://bugs.webkit.org/show_bug.cgi?id=178972

        Reviewed by Sam Weinig.

        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::PageDebuggable):
        * page/PageDebuggable.h:

2017-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Extract a WorkerDebuggerProxy interface out of WorkerReportingProxy
        https://bugs.webkit.org/show_bug.cgi?id=178975

        Reviewed by Sam Weinig.

        No new tests, just refactoring.

        * workers/WorkerDebuggerProxy.h:
        * workers/WorkerReportingProxy.h:
        * WebCore.xcodeproj/project.pbxproj:
        Extract a method from WorkerReportingProxy to WorkerDebuggerProxy and
        rename it to be more general.

        * inspector/WorkerToPageFrontendChannel.h:
        (WebCore::WorkerToPageFrontendChannel::sendMessageToFrontend):
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        * workers/DedicatedWorkerThread.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postMessageToDebugger):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector): Deleted.
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::workerDebuggerProxy const):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::create):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        Include a WorkerDebuggerProxy alongside the other proxies.
        Use the renamed debugger proxy method.

2017-10-28  Ryosuke Niwa  <rniwa@webkit.org>

        Style::Scope::flushPendingUpdate() can replace the entire document in XSLTProcessor::createDocumentFromSource
        https://bugs.webkit.org/show_bug.cgi?id=178715
        <rdar://problem/35144665>

        Reviewed by Brent Fulgham.

        Apply XLS tranforms when a 0s timer fires or the document finishes parsing or loading whichever comes first
        instead of in the middle of collecting a list of stylesheets.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize the newly added timer.
        (WebCore::Document::implicitClose): Apply any pending XSLT before we fire load events since some of the event
        handlers may be expecting to see the document after XSLT had been applied.
        (WebCore::Document::scheduleToApplyXSLTransforms): Added.
        (WebCore::Document::applyPendingXSLTransformsNowIfScheduled): Added.
        (WebCore::Document::applyPendingXSLTransformsTimerFired): Added. Moved the logic to apply XSL transforms from
        Style::Scope::collectActiveStyleSheets, and merged applyXSLTransform into this function.
        (WebCore::Document::applyXSLTransform): Deleted.
        (WebCore::Document::finishedParsing): Apply XSLT right before updating the style. This is where used to apply
        inline XSLT and it happens much earlier than implicitClose.
        (WebCore::Document::suspendScheduledTasks): Suspend the XSLT timer.
        (WebCore::Document::resumeScheduledTasks): Reschedule the XSLT timer if m_hasPendingXSLTransforms is set.
        * dom/Document.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet): Schedule XSLT in the document instead of flushing pending
        stylesheets, which would have synchronously applied XSLT. We can't apply XSLT synchronously here because this
        function can be called from a non-script-resilient call stack.
        (WebCore::ProcessingInstruction::sheetLoaded): Ditto.
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectXSLTransforms): Added.
        (WebCore::Style::Scope::collectActiveStyleSheets): Removed the code to apply XSLT. Skip ProcessingInstructions
        that applies XSLT. Also use RefPtr<StyleSheet> instead of a raw pointer to store StyleSheet.
        * style/StyleScope.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd): Apply any pending XSLTs synchronously here as the comment suggests.

2017-10-27  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: no way to see backtrace of where a canvas context was created
        https://bugs.webkit.org/show_bug.cgi?id=178799
        <rdar://problem/35175805>

        Reviewed by Brian Burg.

        No new tests, updated existing tests.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (iterateCallFrames):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::buildAction):

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        If the Canvas agent is enabled, generate a backtrace and send it to the frontend with the canvas.
        We do not do this for canvases created before the agent is enabled for performance reasons.

2017-10-27  Keith Miller  <keith_miller@apple.com>

        Add unified source list files and build scripts to Xcode project navigator
        https://bugs.webkit.org/show_bug.cgi?id=178959

        Reviewed by Andy Estes.

        * WebCore.xcodeproj/project.pbxproj:

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

        Only allow non-mixed content protected subresources to ask for credentials
        https://bugs.webkit.org/show_bug.cgi?id=178919
        <rdar://problem/35015245>

        Reviewed by Alex Christensen.

        Only allow non-mixed content protected subresources to ask for credentials. It is not meaningful
        to allow protected mixed-content subresources to ask for credentials.

        Tests: http/tests/security/mixedContent/insecure-image-redirects-to-basic-auth-secure-image.html
               http/tests/security/mixedContent/insecure-script-redirects-to-basic-auth-secure-script.html
               http/tests/security/mixedContent/insecure-stylesheet-redirects-to-basic-auth-secure-stylesheet.html
               http/tests/security/mixedContent/secure-redirect-to-insecure-redirect-to-basic-auth-secure-image.https.html
               http/tests/security/mixedContent/secure-redirect-to-secure-redirect-to-basic-auth-insecure-image.https.html
               http/tests/security/mixedContent/secure-redirect-to-secure-redirect-to-basic-auth-secure-image.https.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader): Initialize m_canAskClientForCredentials based on the
        specified resource loader options.
        (WebCore::ResourceLoader::init): Update m_canAskClientForCredentials based on the URL of the initial
        request.
        (WebCore::ResourceLoader::isMixedContent const): Helper function to check if the specified URL
        represents a mixed content resource.
        (WebCore::ResourceLoader::willSendRequestInternal): If the original request or the redirect request
        is mixed content then update state such that we will disallow asking for credentials.
        (WebCore::ResourceLoader::isAllowedToAskUserForCredentials const): Modified to use m_canAskClientForCredentials
        when determining whether the request is allowed to ask for credentials.
        * loader/ResourceLoader.h:

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

        Unskip more Service Workers tests
        https://bugs.webkit.org/show_bug.cgi?id=178944

        Reviewed by Sam Weinig.

        Drop bad assertion that was causing the Service Worker WebProcess to crash and causing
        tests to fail as a result.

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::registration):
        * workers/service/ServiceWorkerGlobalScope.h:

2017-10-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224011.

        xsl LayoutTests hit an assertion added with this change since
        r223999 was rolled out.

        Reverted changeset:

        "Assert that no script is executed during style recalc"
        https://bugs.webkit.org/show_bug.cgi?id=178845
        https://trac.webkit.org/changeset/224011

2017-10-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose the currentTime property on AnimationTimeline
        https://bugs.webkit.org/show_bug.cgi?id=178928

        Reviewed by Dean Jackson.

        We add the currentTime property on AnimationTimeline and add an internals method
        to set it in a test which will allow us to validate the timing model state for
        a given time.

        Test: webanimations/timeline-current-time.html

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::bindingsCurrentTime const):
        (WebCore::AnimationTimeline::setCurrentTime):
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::currentTime const):
        * animation/AnimationTimeline.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::setTimelineCurrentTime):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-10-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Use Seconds vs. MonotonicTime to represent times
        https://bugs.webkit.org/show_bug.cgi?id=178950

        Reviewed by Dean Jackson.

        Animation start times, all expressed in seconds, in the Web Animations API are relative to the timeline
        originTime, itself relative to the page's nagigation time (Performance.navigationTime), so it makes more
        sense to use Seconds to represent them as opposed to a MonotonicTime.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::bindingsStartTime const):
        (WebCore::WebAnimation::setBindingsStartTime):
        * animation/WebAnimation.h:

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

        DOMWindow::dispatchEvent() does not reset the event's dispatch flag
        https://bugs.webkit.org/show_bug.cgi?id=178897

        Reviewed by Darin Adler.

        Make sure we reset the currentTarget, dispatch flag, phase and propagation flags
        after dispatching an event on a Window, as per:
        - https://dom.spec.whatwg.org/#concept-event-dispatch

        This behavior is consistent with Firefox.

        Test: fast/events/window-load-initEvent.html

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

2017-10-27  Keith Miller  <keith_miller@apple.com>

        Move iOS specific sources to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178915

        Rubber-stamped by Tim Horton.

        * SourcesCocoa.txt:
        * SourcesIOS.txt:
        * SourcesMac.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        NowPlayingInfo should contain a unique identifier
        https://bugs.webkit.org/show_bug.cgi?id=178872
        <rdar://problem/34924012>

        Unreviewed, build fix.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Call string.impl().hash() instead of
        string.existingHash() because the later will assert in a debug build if the hash hasn't
        been calculated yet.
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo): Ditto.

2017-10-27  Alex Christensen  <achristensen@webkit.org>

        Fix accessibility/mac/aria-label-on-label-element.html after r224074
        https://bugs.webkit.org/show_bug.cgi?id=178892

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::titleElementText const):
        (WebCore::AccessibilityNodeObject::ariaLabeledByText const):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityText::AccessibilityText):
        Turns out my null checks changed behavior.  This undoes them.

2017-10-27  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223999.

        Caused xsl LayoutTest flakiness.

        Reverted changeset:

        "Style::Scope::flushPendingUpdate() can replace the entire
        document in XSLTProcessor::createDocumentFromSource"
        https://bugs.webkit.org/show_bug.cgi?id=178715
        https://trac.webkit.org/changeset/223999

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

        Audit init*Event() method to make sure they reset internal data members
        https://bugs.webkit.org/show_bug.cgi?id=178886

        Reviewed by Ryosuke Niwa.

        Audit init*Event() method to make sure they reset internal data members.

        * dom/Event.cpp:
        (WebCore::Event::initEvent):
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::initKeyboardEvent):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEvent):
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::setIsSimulated):
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::initTextEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::initWheelEvent):

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

        Add initial support for serviceWorkerClient.postMessage()
        https://bugs.webkit.org/show_bug.cgi?id=178794

        Reviewed by Youenn Fablet.

        Add initial support for serviceWorkerClient.postMessage():
        - https://w3c.github.io/ServiceWorker/#client-postmessage

        It is now possible to do bi-directional communication with a service worker
        via postMessage().

        No new tests, updated existing test.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::generateDocumentIdentifier):
        (WebCore::Document::allDocumentsMap):
        (WebCore::Document::allDocuments):
        (WebCore::m_identifier):
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Document::identifier const):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::serviceWorkerContainer):
        * dom/ScriptExecutionContext.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::ServiceWorkerClient):
        (WebCore::ServiceWorkerClient::~ServiceWorkerClient):
        (WebCore::ServiceWorkerClient::id const):
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/ServiceWorkerClient.h:
        (WebCore::ServiceWorkerClient::create):
        * workers/service/ServiceWorkerClient.idl:
        * workers/service/ServiceWorkerClientIdentifier.h: Copied from Source/WebCore/workers/service/ServiceWorkerClient.idl.
        (WebCore::ServiceWorkerClientIdentifier::toString const):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::unregister):
        * workers/service/ServiceWorkerWindowClient.cpp:
        (WebCore::ServiceWorkerWindowClient::ServiceWorkerWindowClient):
        * workers/service/ServiceWorkerWindowClient.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        * workers/service/server/SWClientConnection.h:

2017-10-27  Frederic Wang  <fwang@igalia.com>

        Use auto for some variables in RenderLayerCompositor/Backing
        https://bugs.webkit.org/show_bug.cgi?id=178570

        Reviewed by Darin Adler.

        No new tests, behavior unchanged.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy):
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computePageTiledBackingCoverage):
        (WebCore::RenderLayerBacking::layerWillBeDestroyed):
        (WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
        (WebCore::layerOrAncestorIsTransformedOrUsingCompositedScrolling):
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::ComputedOffsets::fromAncestorGraphicsLayer):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        (WebCore::RenderLayerBacking::hasUnpositionedOverflowControlsLayers const):
        (WebCore::RenderLayerBacking::compositingOpacity const):
        (WebCore::isRestartedPlugin):
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage const):
        (WebCore::RenderLayerBacking::updateImageContents):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::getCurrentTransform const):
        (WebCore::RenderLayerBacking::logFilledVisibleFreshTile):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::compositedBoundsIncludingMargin const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayersAfterFlushIncludingSubframes):
        (WebCore::updateScrollingLayerWithClient):
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer):
        (WebCore::RenderLayerCompositor::didPaintBacking):
        (WebCore::RenderLayerCompositor::didChangeVisibleRect):
        (WebCore::RenderLayerCompositor::enclosingCompositorFlushingLayers const):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::checkIfDescendantClippingContextNeedsUpdate):
        (WebCore::styleChangeRequiresLayerRebuild):
        (WebCore::RenderLayerCompositor::canCompositeClipPath):
        (WebCore::rendererForCompositingTests):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::repaintOnCompositingChange):
        (WebCore::RenderLayerCompositor::repaintInCompositedAncestor):
        (WebCore::RenderLayerCompositor::enclosingNonStackingClippingLayer const):
        (WebCore::RenderLayerCompositor::setCompositingParent):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::hasCoordinatedScrolling const):
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):
        (WebCore::RenderLayerCompositor::positionForClipLayer const):
        (WebCore::RenderLayerCompositor::frameViewDidLayout):
        (WebCore::RenderLayerCompositor::rootFixedBackgroundsChanged):
        (WebCore::RenderLayerCompositor::scrollingLayerDidChange):
        (WebCore::RenderLayerCompositor::frameContentsCompositor):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::clearBackingForLayerIncludingDescendants):
        (WebCore::RenderLayerCompositor::clippedByAncestor const):
        (WebCore::RenderLayerCompositor::requiresCompositingForBackfaceVisibility const):
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas const):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin const):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        (WebCore::RenderLayerCompositor::isAsyncScrollableStickyLayer const):
        (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer const):
        (WebCore::RenderLayerCompositor::requiresScrollLayer const):
        (WebCore::RenderLayerCompositor::supportsFixedRootBackgroundCompositing const):
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayer const):
        (WebCore::RenderLayerCompositor::resetTrackedRepaintRects):
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles const):
        (WebCore::RenderLayerCompositor::documentUsesTiledBacking const):
        (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls const):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):
        (WebCore::RenderLayerCompositor::deviceOrPageScaleFactorChanged):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints const):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints const):
        (WebCore::enclosingScrollingNodeID):
        (WebCore::scrollCoordinatedAncestorInParentOfFrame):
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::unregisterAllScrollingLayers):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        (WebCore::RenderLayerCompositor::updateScrollSnapPropertiesWithFrameView):

2017-10-27  Alicia Boya García  <aboya@igalia.com>

        [GStreamer][MSE] Trim space between codecs
        https://bugs.webkit.org/show_bug.cgi?id=178160

        Reviewed by Xabier Rodriguez-Calvar.

        Modify supportsCodecs() to accept a Vector<String> instead of
        receiving a string and parsing itself.

        This improves passrate for `mediasource-is-type-supported` as it
        ensures that whitespace between codecs is now trimmed and codec
        strings such as `video/webm;codecs="opus, vp9"` are matched as a valid
        type, as required by the spec.

        This patch also renames supportCodecs() to supportAllCodecs() and adds
        a new variant, supportCodec(), that checks for support of an
        individual codec.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsCodec):
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsAllCodecs):
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsType):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2017-10-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Crash in WebCore::SelectionRangeData::apply
        https://bugs.webkit.org/show_bug.cgi?id=177808

        Reviewed by Carlos Garcia Campos.

        The problem appears to be a name collision between WebCore::SelectionData and
        WebCore::SelectionData. Yes, those are the same names. It seems the destructor for a
        Source/WebCore/platform/gtk/SelectionData.h SelectionData is being called on a
        Source/WebCore/rendering/SelectionRangeData.cpp SelectionData. Yikes. Can you forgive the
        poor linker for not being magic?

        This fixes crashes in approximately one bajillion tests.

        * rendering/SelectionRangeData.cpp: Move SelectionData into an anonymous namespace.

2017-10-26  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Fix build after WebCore moves to unified source.
        https://bugs.webkit.org/show_bug.cgi?id=178920

        Added empty implementations to fix link error.

        Reviewed by Ryosuke Niwa.

        * platform/network/curl/DNSCurl.cpp:
        (WebCore::DNSResolveQueue::updateIsUsingProxy):
        (WebCore::DNSResolveQueue::platformResolve):

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

        Implement seek tolerance methods in WebAVPlayerController.
        https://bugs.webkit.org/show_bug.cgi?id=178838
        rdar://problem/33781777

        Reviewed by Eric Carlson.

        No new tests because this doesn't change any behavior in the page, but exposes seek tolerance to fullscreen platform UI.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setCurrentTimeWithTolerance):
        * html/HTMLMediaElement.h:
        * platform/cocoa/PlaybackSessionModel.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::seekToTime):
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController seekToTime:]):
        (-[WebAVPlayerController seekToTime:toleranceBefore:toleranceAfter:]):
        (-[WebAVPlayerController seekByTimeInterval:]):
        (-[WebAVPlayerController seekByTimeInterval:toleranceBefore:toleranceAfter:]):
        (-[WebAVPlayerController seekToBeginning:]):
        (-[WebAVPlayerController seekToEnd:]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::seekToTime):

2017-10-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix WPE build after r224074
        https://bugs.webkit.org/show_bug.cgi?id=178892

        * accessibility/wpe/AccessibilityObjectWPE.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):

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

        When navigating back to a page, compositing layers may not use accelerated drawing
        https://bugs.webkit.org/show_bug.cgi?id=178749
        rdar://problem/35158946

        Reviewed by Dean Jackson.

        There were two issues with setting GraphicsLayerCA's "acceleratesDrawing" state which
        occurred on back navigation, related to the ordering of style recalcs and layout.

        First, at style recalc time, we created a RenderLayerCompositor but hadn't yet called
        its cacheAcceleratedCompositingFlags(), so any layers created during style update
        didn't get accelerated drawing. Fix by making cacheAcceleratedCompositingFlags() internal
        to RenderLayerCompositor and calling it from willRecalcStyle() and updateCompositingLayers().

        Secondly, GraphicsLayerCA::commitLayerChangesBeforeSublayers() needs to updateAcceleratesDrawing()
        before updating tiles, so that new tiles fetch the right acceleratesDrawing state from
        the TileController.

        Test: compositing/accelerated-layers-after-back.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayersAfterLayout):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::willRecalcStyle):
        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:

2017-10-26  Alex Christensen  <achristensen@webkit.org>

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

        * accessibility/win/AccessibilityObjectWin.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):

2017-10-26  Alex Christensen  <achristensen@webkit.org>

        Modernize AccessibilityObject.h
        https://bugs.webkit.org/show_bug.cgi?id=178892

        Reviewed by Tim Horton.

        The enums in AccessibilityObject.h are causing naming collisions with unified builds.
        This is what enum classes are for.
        HashMaps of enum classes still need a few casts to/from int.
        
        I also made some RefPtr's Ref's, use some initializer lists instead of values in the constructor implementation, and indentation fixing.
        
        No change in behavior.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXComputedObjectAttributeCache::getIgnored const):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        (WebCore::AXComputedObjectAttributeCache::CachedAXObjectAttributes::CachedAXObjectAttributes):
        (WebCore::AXComputedObjectAttributeCache::getIgnored const):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentRowGroup const):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityAttachment.cpp:
        (WebCore::AccessibilityAttachment::accessibilityText):
        * accessibility/AccessibilityAttachment.h:
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::roleValue const):
        (WebCore::AccessibilityImageMapLink::accessibilityText):
        * accessibility/AccessibilityLabel.cpp:
        (WebCore::childrenContainOnlyStaticText):
        * accessibility/AccessibilityLabel.h:
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isUnorderedList const):
        (WebCore::AccessibilityList::isOrderedList const):
        (WebCore::AccessibilityList::determineAccessibilityRole):
        (WebCore::AccessibilityList::roleValue const):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject const):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMathMLElement.cpp:
        (WebCore::AccessibilityMathMLElement::determineAccessibilityRole):
        (WebCore::AccessibilityMathMLElement::isMathScriptObject const):
        (WebCore::AccessibilityMathMLElement::isMathMultiscriptObject const):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::accessibilityText):
        (WebCore::AccessibilityMediaControl::roleValue const):
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject const):
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::AccessibilityNodeObject):
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::canHaveChildren const):
        (WebCore::AccessibilityNodeObject::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityNodeObject::isSearchField const):
        (WebCore::AccessibilityNodeObject::isImage const):
        (WebCore::AccessibilityNodeObject::isPasswordField const):
        (WebCore::AccessibilityNodeObject::isInputImage const):
        (WebCore::AccessibilityNodeObject::isProgressIndicator const):
        (WebCore::AccessibilityNodeObject::isSlider const):
        (WebCore::AccessibilityNodeObject::isMenuRelated const):
        (WebCore::AccessibilityNodeObject::isMenu const):
        (WebCore::AccessibilityNodeObject::isMenuBar const):
        (WebCore::AccessibilityNodeObject::isMenuButton const):
        (WebCore::AccessibilityNodeObject::isMenuItem const):
        (WebCore::AccessibilityNodeObject::isEnabled const):
        (WebCore::AccessibilityNodeObject::isChecked const):
        (WebCore::AccessibilityNodeObject::supportsRequiredAttribute const):
        (WebCore::AccessibilityNodeObject::headingLevel const):
        (WebCore::AccessibilityNodeObject::isHeading const):
        (WebCore::AccessibilityNodeObject::isLink const):
        (WebCore::AccessibilityNodeObject::isGroup const):
        (WebCore::AccessibilityNodeObject::selectedRadioButton):
        (WebCore::AccessibilityNodeObject::checkboxOrRadioValue const):
        (WebCore::AccessibilityNodeObject::actionElement const):
        (WebCore::AccessibilityNodeObject::alterSliderValue):
        (WebCore::AccessibilityNodeObject::isGenericFocusableElement const):
        (WebCore::AccessibilityNodeObject::menuElementForMenuButton const):
        (WebCore::AccessibilityNodeObject::menuItemElementForMenu const):
        (WebCore::AccessibilityNodeObject::titleElementText const):
        (WebCore::AccessibilityNodeObject::alternativeText const):
        (WebCore::AccessibilityNodeObject::visibleText const):
        (WebCore::AccessibilityNodeObject::helpText const):
        (WebCore::AccessibilityNodeObject::accessibilityText):
        (WebCore::AccessibilityNodeObject::ariaLabeledByText const):
        (WebCore::AccessibilityNodeObject::accessibilityDescription const):
        (WebCore::AccessibilityNodeObject::roleIgnoresTitle const):
        (WebCore::AccessibilityNodeObject::hierarchicalLevel const):
        (WebCore::AccessibilityNodeObject::title const):
        (WebCore::AccessibilityNodeObject::text const):
        (WebCore::AccessibilityNodeObject::stringValue const):
        (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute const):
        (WebCore::AccessibilityNodeObject::remapAriaRoleDueToParent const):
        (WebCore::AccessibilityNodeObject::canSetSelectedAttribute const):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach):
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        (WebCore::AccessibilityObject::accessibleNameDerivesFromContent const):
        (WebCore::AccessibilityObject::isBlockquote const):
        (WebCore::AccessibilityObject::isTextControl const):
        (WebCore::AccessibilityObject::isARIATextControl const):
        (WebCore::AccessibilityObject::isLandmark const):
        (WebCore::AccessibilityObject::findMatchingObjects):
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection const):
        (WebCore::AccessibilityObject::selectText):
        (WebCore::AccessibilityObject::isARIAInput):
        (WebCore::AccessibilityObject::isARIAControl):
        (WebCore::AccessibilityObject::isRangeControl const):
        (WebCore::AccessibilityObject::visiblePositionForBounds const):
        (WebCore::AccessibilityObject::supportsARIAReadOnly const):
        (WebCore::AccessibilityObject::ariaReadOnlyValue const):
        (WebCore::AccessibilityObject::headingElementForNode):
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        (WebCore::AccessibilityObject::defaultLiveRegionStatusForRole):
        (WebCore::AccessibilityObject::actionVerb const):
        (WebCore::AccessibilityObject::ariaCurrentState const):
        (WebCore::AccessibilityObject::ariaCurrentValue const):
        (WebCore::AccessibilityObject::orientation const):
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::ariaRoleToWebCoreRole):
        (WebCore::AccessibilityObject::computedRoleString const):
        (WebCore::AccessibilityObject::supportsPressAction const):
        (WebCore::AccessibilityObject::sortDirection const):
        (WebCore::AccessibilityObject::supportsExpanded const):
        (WebCore::AccessibilityObject::isExpanded const):
        (WebCore::AccessibilityObject::supportsChecked const):
        (WebCore::AccessibilityObject::checkboxOrRadioValue const):
        (WebCore::AccessibilityObject::scrollByPage const):
        (WebCore::AccessibilityObject::lastKnownIsIgnoredValue):
        (WebCore::AccessibilityObject::setLastKnownIsIgnoredValue):
        (WebCore::AccessibilityObject::buttonRoleType const):
        (WebCore::AccessibilityObject::isButton const):
        (WebCore::AccessibilityObject::accessibilityIsIgnoredByDefault const):
        (WebCore::AccessibilityObject::defaultObjectInclusion const):
        (WebCore::AccessibilityObject::accessibilityIsIgnored const):
        (WebCore::AccessibilityObject::isContainedByPasswordField const):
        (WebCore::AccessibilityObject::AccessibilityObject): Deleted.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityText::AccessibilityText):
        (WebCore::AccessibilityIsIgnoredFromParentData::AccessibilityIsIgnoredFromParentData):
        (WebCore::AccessibilityObject::isImageMap const):
        (WebCore::AccessibilityObject::isWebArea const):
        (WebCore::AccessibilityObject::isCheckbox const):
        (WebCore::AccessibilityObject::isRadioButton const):
        (WebCore::AccessibilityObject::isListBox const):
        (WebCore::AccessibilityObject::isSpinButton const):
        (WebCore::AccessibilityObject::isSwitch const):
        (WebCore::AccessibilityObject::isToggleButton const):
        (WebCore::AccessibilityObject::isTabList const):
        (WebCore::AccessibilityObject::isTabItem const):
        (WebCore::AccessibilityObject::isRadioGroup const):
        (WebCore::AccessibilityObject::isComboBox const):
        (WebCore::AccessibilityObject::isTree const):
        (WebCore::AccessibilityObject::isTreeGrid const):
        (WebCore::AccessibilityObject::isTreeItem const):
        (WebCore::AccessibilityObject::isScrollbar const):
        (WebCore::AccessibilityObject::isListItem const):
        (WebCore::AccessibilityObject::isScrollView const):
        (WebCore::AccessibilityObject::isCanvas const):
        (WebCore::AccessibilityObject::isPopUpButton const):
        (WebCore::AccessibilityObject::isColorWell const):
        (WebCore::AccessibilityObject::isSplitter const):
        (WebCore::AccessibilityObject::isToolbar const):
        (WebCore::AccessibilityObject::isSummary const):
        (WebCore::AccessibilityObject::isStaticText const):
        (WebCore::AccessibilityObject::ariaRoleAttribute const):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObject const):
        (WebCore::AccessibilityRenderObject::isAttachment const):
        (WebCore::AccessibilityRenderObject::helpText const):
        (WebCore::AccessibilityRenderObject::stringValue const):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupChildren const):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers const):
        (WebCore::AccessibilityRenderObject::linkedUIElements const):
        (WebCore::AccessibilityRenderObject::isAllowedChildOfTree const):
        (WebCore::objectInclusionFromAltText):
        (WebCore::AccessibilityRenderObject::defaultObjectInclusion const):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityRenderObject::selectedTextRange const):
        (WebCore::AccessibilityRenderObject::isTabItemSelected const):
        (WebCore::AccessibilityRenderObject::isFocused const):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::shouldFocusActiveDescendant const):
        (WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):
        (WebCore::AccessibilityRenderObject::supportsExpandedTextValue const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::orientation const):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole const):
        (WebCore::AccessibilityRenderObject::ariaRoleHasPresentationalChildren const):
        (WebCore::AccessibilityRenderObject::canSetExpandedAttribute const):
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        (WebCore::AccessibilityRenderObject::updateRoleAfterChildrenCreation):
        (WebCore::AccessibilityRenderObject::ariaLiveRegionAtomic const):
        (WebCore::AccessibilityRenderObject::canHaveSelectedChildren const):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        (WebCore::AccessibilityRenderObject::visibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::actionVerb const):
        (WebCore::msaaRoleForRenderer):
        (WebCore::AccessibilityRenderObject::roleValueForMSAA const):
        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::accessibilityText):
        (WebCore::AccessibilitySVGElement::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilitySVGElement::inheritsPresentationalRole const):
        (WebCore::AccessibilitySVGElement::determineAriaRoleAttribute const):
        (WebCore::AccessibilitySVGElement::determineAccessibilityRole):
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::scrollBar):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::orientation const):
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation const):
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren):
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::hasARIARole const):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::headerContainer):
        (WebCore::AccessibilityTable::roleValue const):
        (WebCore::AccessibilityTable::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityTable::titleElementText const):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityTableCell::determineAccessibilityRole):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::determineAccessibilityRole):
        (WebCore::AccessibilityTableRow::computeAccessibilityIsIgnored const):
        * accessibility/AccessibilityTree.cpp:
        (WebCore::AccessibilityTree::determineAccessibilityRole):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        (WebCore::AccessibilityObject::isInputTypePopupButton const):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
        (-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):
        (-[WebAccessibilityObjectWrapper _accessibilityTreeAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityListAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityArticleAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
        (-[WebAccessibilityObjectWrapper _accessibilityTextEntryTraits]):
        (-[WebAccessibilityObjectWrapper accessibilityTraits]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper stringValueShouldBeUsedInLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityValue]):
        (-[WebAccessibilityObjectWrapper accessibilityIsComboBox]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        (-[WebAccessibilityObjectWrapper accessibilityLinkedElement]):
        (-[WebAccessibilityObjectWrapper treeItemParentForObject:]):
        (-[WebAccessibilityObjectWrapper accessibilityElementDidBecomeFocused]):
        (-[WebAccessibilityObjectWrapper accessibilitySortDirection]):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityTitle]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityHelpText]):
        (-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]):
        (createAccessibilitySearchKeyMap):
        (accessibilitySearchKeyForString):
        (accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (createAccessibilityRoleMap):
        (roleValueToNSString):
        (-[WebAccessibilityObjectWrapper role]):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2017-10-26  Youenn Fablet  <youenn@apple.com>

        importScripts in service worker should use ServiceWorkersMode::None
        https://bugs.webkit.org/show_bug.cgi?id=178888

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/service-worker-importScript.html

        Made sure ServiceWorkersMode::None is used for loading scripts in service workers as we do not support foreign fetch.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):

2017-10-26  Keith Miller  <keith_miller@apple.com>

        Unreviewed, cleanup changelogs.

2017-10-26  Keith Miller  <keith_miller@apple.com>

        Unreviewed, add deprecated declarations pragma to fix macosx.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:

2017-10-26  Andy Estes  <aestes@apple.com>

        [Payment Request] Restrict API use to secure, same-origin frames
        https://bugs.webkit.org/show_bug.cgi?id=178887

        Reviewed by Tim Horton.

        Reuse the access checks from Apple Pay to restrict PaymentRequest API usage to secure frames
        in the same origin as the main frame.

        Progresses active-document-cross-origin.https.sub.html and
        active-document-same-origin.https.html from web-platform-tests. Regresses basic.https.html
        since the allowpaymentrequest <iframe> attribute is not yet implemented.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create):
        (WebCore::ApplePaySession::supportsVersion):
        (WebCore::ApplePaySession::canMakePayments):
        (WebCore::ApplePaySession::canMakePaymentsWithActiveCard):
        (WebCore::ApplePaySession::openPaymentSetup):
        (WebCore::isSecure): Deleted.
        (WebCore::canCallApplePaySessionAPIs): Deleted.
        * Modules/applepay/PaymentSession.cpp: Added.
        (WebCore::isSecure):
        (WebCore::PaymentSession::canCreateSession):
        * Modules/applepay/PaymentSession.h:
        * Modules/paymentrequest/PaymentHandler.cpp:
        (WebCore::PaymentHandler::canCreateSession):
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::create):
        * WebCore.xcodeproj/project.pbxproj:

2017-10-26  Youenn Fablet  <youenn@apple.com>

        Add service worker handle fetch support for all subresource requests
        https://bugs.webkit.org/show_bug.cgi?id=178769

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/image-fetch.html

        Moving DocumentThreadableLoader logic to CachedResourceLoader to apply it for all resource loads.
        Setting the selected service worker identifier for subresource only at the moment.

        Testing is limited to images, future wpt tests should cover other subresource cases.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::prepareFetch):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setSelectedServiceWorkerIdentifierIfNeeded):
        * loader/cache/CachedResourceRequest.h:

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

        NowPlayingInfo should contain a unique identifier
        https://bugs.webkit.org/show_bug.cgi?id=178872

        Reviewed by Jer Noble.

        Updated TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm.

        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingInfoUniqueIdentifier const): New.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Ditto.

        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo): Ditto. Don't leak CFString.

        * platform/mac/MediaRemoteSoftLink.cpp: Softlink kMRMediaRemoteNowPlayingInfoUniqueIdentifier.
        * platform/mac/MediaRemoteSoftLink.h:

2017-10-26  Keith Miller  <keith_miller@apple.com>

        Unreviewed, iOS build fix.

        * SourcesMac.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-26  Keith Miller  <keith_miller@apple.com>

        Move Mac specific files to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178883

        Rubber-stamped by Tim Horton.

        * SourcesCocoa.txt:
        * SourcesMac.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        DidMoveToNewDocumentAssertionScope shouldn't be necessary
        https://bugs.webkit.org/show_bug.cgi?id=178836
        <rdar://problem/35008876>

        Reviewed by Antti Koivisto.

        DidMoveToNewDocumentAssertionScope was introduced in r217972 to replace an existing assertion to make sure
        Node::didMoveToNewDocument is always called by its overrides in Node's subclasses. However, we can ensure
        better Node::didMoveToNewDocument is always called if we called it directly in Node::moveTreeToNewScope.

        Because only subclasses of Element and ShadowRoot override Node::didMoveToNewDocument and we already have
        a specialized code path to adopt a ShadowRoot to a new document, this refactoring eliminates the need for
        having a virtual function on Node at all.

        Hence this patch names Node::didMoveToNewDocument to Node::moveToNewDocument and makes it non-virtual,
        splits ShadowRoot::didMoveToNewDocument into moveShadowRootToNewParentScope and moveShadowRootToNewDocument,
        and removes DidMoveToNewDocumentAssertionScope completely.

        No new tests since there should be no behavioral change.

        * dom/Document.cpp:
        (WebCore::Document::moveNodeIteratorsToNewDocumentSlowCase): Renamed from moveNodeIteratorsToNewDocument.
        * dom/Document.h:
        (WebCore::Document::moveNodeIteratorsToNewDocument): Inlined the check for emptiness of m_nodeIterators to
        avoid keep calling moveNodeIteratorsToNewDocumentSlowCase on every single node getting moved.
        * dom/Element.cpp:
        (WebCore::Element::didMoveToNewDocument): Removed the call to Node::didMoveToNewDocument since this is the
        base virtual function now.
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::DidMoveToNewDocumentAssertionScope::DidMoveToNewDocumentAssertionScope): Deleted.
        (WebCore::DidMoveToNewDocumentAssertionScope::~DidMoveToNewDocumentAssertionScope): Deleted.
        (WebCore::DidMoveToNewDocumentAssertionScope::didRecieveCall): Deleted.
        (WebCore::moveNodeToNewDocument): Deleted.
        (WebCore::Node::moveShadowTreeToNewDocument): Made this a member function of Node since it needs to call
        moveNodeToNewDocument, which is private to Node.
        (WebCore::Node::moveTreeToNewScope): Removed the release assert for the root node since  the same check
        exists inside traverseSubtreeToUpdateTreeScope. Also removed the release assertion for checking that
        node's old document matches the old document since document() simply calls treeScope().documentScope()
        and we're already release-asserting that the old scope of a node matches the old scope we know of.
        We release-assert that the old tree scope's document didn't change after the traversal instead. Finally,
        replaced a bunch of RELEASE_ASSERT with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION.
        (WebCore::Node::moveNodeToNewDocument): Renamed from didMoveToNewDocument. Moved the code related to
        mutation observers inside hasRareData() check, and moved the the code to move event listeners inside
        eventTargetData() check both for clarity, and avoid doing the work for every single node being moved.
        Finally, call the old didMoveToNewDocument when "this" is an Element.
        * dom/Node.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::moveShadowRootToNewParentScope): Added. Extracted from didMoveToNewDocument.
        (WebCore::ShadowRoot::moveShadowRootToNewDocument): Renamed from didMoveToNewDocument. We now
        release-assert that parent tree scope's document matches the new document if any.
        * dom/ShadowRoot.h:

2017-10-26  Youenn Fablet  <youenn@apple.com>

        Implement ServiceWorkerContainer getRegistration
        https://bugs.webkit.org/show_bug.cgi?id=178882

        Reviewed by Chris Dumez.

        Replace rejection promise by resolving the promise with a null value.
        This helps in running WPT tests as WPT tests usually check for registered service workers before running tests.
        For WTR, there should be no registered service worker anyway.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getRegistration):
        * workers/service/ServiceWorkerContainer.h:

2017-10-26  Dan Bernstein  <mitz@apple.com>

        Account for Mail’s WebMessageDocument class being renamed
        https://bugs.webkit.org/show_bug.cgi?id=178881

        Reviewed by Sam Weinig.

        * editing/cocoa/HTMLConverter.mm:
        (_WebMessageDocumentClass): Look up the class by its new name. No longer look it up by the
          old old name, because TOT WebKit isn’t going to be used by versions of Mail that have that name.

2017-10-26  Antoine Quint  <graouts@apple.com>

        Remove FrameView::serviceScriptedAnimations and Document::serviceScriptedAnimations
        https://bugs.webkit.org/show_bug.cgi?id=178879

        Reviewed by Dean Jackson.

        There are no call sites for FrameView::serviceScriptedAnimations() and that method is the
        only call site for Document::serviceScriptedAnimations(), so both can go.

        * dom/Document.cpp:
        (WebCore::Document::serviceScriptedAnimations): Deleted.
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations): Deleted.
        * page/FrameView.h:

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

        Bring back SWContextManager abstraction in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=178876

        Reviewed by Geoffrey Garen.

        Bring back SWContextManager abstraction in WebCore. It was killed in <https://trac.webkit.org/changeset/223718> but
        is actually useful when the ServiceWorker wants to message the storage process.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/context/SWContextManager.cpp: Added.
        (WebCore::SWContextManager::singleton):
        (WebCore::SWContextManager::setConnection):
        (WebCore::SWContextManager::connection const):
        (WebCore::SWContextManager::registerServiceWorkerThread):
        (WebCore::SWContextManager::serviceWorkerThreadProxy const):
        (WebCore::SWContextManager::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/SWContextManager.h: Copied from Source/WebKit/WebProcess/Storage/ServiceWorkerContextManager.h.
        (WebCore::SWContextManager::Connection::~Connection):

2017-10-26  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Rename CurlJobManager to CurlRequestScheduler
        https://bugs.webkit.org/show_bug.cgi?id=178775

        To match the meaning of the class.
        It was originally meant to be more generic purpose, but as
        other classes was introduced, the objective of the class is
        now only to handle the life cycle of curl requests.

        The delegate is also renamed to CurlRequestSchedulerClient.

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::willSendRequest):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::startWithJobManager):
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::callClient):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        (WebCore::CurlRequest::invokeDidReceiveResponse):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        (WebCore::CurlRequest::pausedStatusChanged):
        (WebCore::CurlRequest::callDelegate): Deleted.
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):
        (WebCore::CurlRequest::setClient):
        (WebCore::CurlRequest::setDelegate): Deleted.
        * platform/network/curl/CurlRequestClient.h: Renamed from Source/WebCore/platform/network/curl/CurlRequestDelegate.h.
        * platform/network/curl/CurlRequestScheduler.cpp: Renamed from Source/WebCore/platform/network/curl/CurlJobManager.cpp.
        (WebCore::CurlJobList::startJobs):
        (WebCore::CurlJobList::finishJobs):
        (WebCore::CurlRequestScheduler::singleton):
        (WebCore::CurlRequestScheduler::add):
        (WebCore::CurlRequestScheduler::cancel):
        (WebCore::CurlRequestScheduler::callOnWorkerThread):
        (WebCore::CurlRequestScheduler::startThreadIfNeeded):
        (WebCore::CurlRequestScheduler::stopThreadIfNoMoreJobRunning):
        (WebCore::CurlRequestScheduler::stopThread):
        (WebCore::CurlRequestScheduler::updateJobList):
        (WebCore::CurlRequestScheduler::workerThread):
        * platform/network/curl/CurlRequestScheduler.h: Renamed from Source/WebCore/platform/network/curl/CurlJobManager.h.
        (WebCore::CurlRequestScheduler::~CurlRequestScheduler):
        * platform/network/curl/CurlRequestSchedulerClient.h: Added.
        (WebCore::CurlRequestSchedulerClient::~CurlRequestSchedulerClient):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::~ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::setAuthentication):
        (WebCore::ResourceHandleCurlDelegate::continueAfterWillSendRequest):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-10-26  Antti Koivisto  <antti@apple.com>

        Remove unnecessary whitespace invalidation logic from RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=178786

        Reviewed by Zalan Bujtas.

        RenderTreeUpdater::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded is a somewhat complex
        and confusing function for figuring out if some whitespace-only text node might need to have its
        rendering status recomputed. However actually computing if a text renderer is needed is not expensive.
        We can simply do it for all whitespace nodes after a sibling mutation.

        This also removes a set that could have stale renderer pointers in it (they were never dereferenced).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringContinuation):

            Fix a display:contents bug exposed by this change. With display:contents a text renderer may have an anonymous
            inline wrapper and we need to take it into account when the text renderer is the beforeChild.

            Tested by imported/w3c/web-platform-tests/css/css-display-3/display-contents-state-change-001.html

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree):

            Call updateTextRenderer() for all whitespace-only text nodes after a change in siblings.
            In normal update case it just figures out quickly (by calling textRendererIsNeeded)
            that there are no changes and bails out.

        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::RenderTreeUpdater::updateTextRenderer):
        (WebCore::RenderTreeUpdater::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded): Deleted.

            No longer needed. Just mark that there have been changes to siblings instead.

        * style/RenderTreeUpdater.h:

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

        Mark font palettes as in development
        https://bugs.webkit.org/show_bug.cgi?id=178590

        Unreviewed.

        * features.json:

2017-10-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223984.

        Caused LayoutTest assertion failures.

        Reverted changeset:

        "When navigating back to a page, compositing layers may not
        use accelerated drawing"
        https://bugs.webkit.org/show_bug.cgi?id=178749
        https://trac.webkit.org/changeset/223984

2017-10-26  Youenn Fablet  <youenn@apple.com>

        Add inspector logging for MediaElementSession autoplay
        https://bugs.webkit.org/show_bug.cgi?id=178846

        Reviewed by Eric Carlson.

        No change of behavior.
        Making use of pal Logger in MediaElementSession.
        This new logging is limited to autoplay/playback for now.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::MediaElementSession):
        (WebCore::MediaElementSession::playbackPermitted const):
        (WebCore::MediaElementSession::autoplayPermitted const):
        (WebCore::MediaElementSession::willLog const):
        (WebCore::MediaElementSession::logChannel const):
        * html/MediaElementSession.h:

2017-10-26  Keith Miller  <keith_miller@apple.com>

        Move ApplePay to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178871

        Rubber-stamped by Tim Horton.

        Also, add some other missing files.

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

2017-10-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r224019.

        This change caused API test WebKit.MSEIsPlayingAudio to time
        out.

        Reverted changeset:

        "XMLHttpRequest should not treat file URLs as same origin"
        https://bugs.webkit.org/show_bug.cgi?id=178565
        https://trac.webkit.org/changeset/224019

2017-10-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223994.

        The LayoutTest for this change is failing.

        Reverted changeset:

        "Add service worker handle fetch support for all subresource
        requests"
        https://bugs.webkit.org/show_bug.cgi?id=178769
        https://trac.webkit.org/changeset/223994

2017-10-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223908.

        Causes LayoutTest crashes with newer SDKs.

        Reverted changeset:

        "Adopt new secure coding APIs"
        https://bugs.webkit.org/show_bug.cgi?id=178484
        https://trac.webkit.org/changeset/223908

2017-10-25  Brent Fulgham  <bfulgham@apple.com>

        XMLHttpRequest should not treat file URLs as same origin
        https://bugs.webkit.org/show_bug.cgi?id=178565
        <rdar://problem/11115901>

        Reviewed by Ryosuke Niwa.

        Do not treat file URLs as same-origin for XHR requests.

        Test: fast/xmlhttprequest/xmlhttprequest-access-self-as-file.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Use new helper method.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::requestIsSameOrigin): New method to recognize same-origin
        requests, with special handling for XHR.
        * page/SecurityOrigin.h:

2017-10-26  Christopher Reid  <chris.reid@sony.com>

        Remove scopeguard from platform
        https://bugs.webkit.org/show_bug.cgi?id=178681

        Reviewed by Brady Eidson.

        Replacing platform/ScopeGuard with WTF::ScopeExit.
        No new tests, no change in behavior.

        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FileSystem.cpp:
        * platform/ScopeGuard.h: Removed.
        * platform/network/BlobRegistryImpl.cpp:
        * workers/service/ServiceWorkerContainer.cpp:

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

        REGRESSION(r222090): [HarfBuzz] Arabic shaping is broken except for first word in line
        https://bugs.webkit.org/show_bug.cgi?id=178625

        Reviewed by Michael Catanzaro.

        Once we find the first space, which has the COMMON script, we split the run, and the next ones keep using
        COMMON instead of ARABIC because we don't update the current script on every loop iteration. This patch
        simplifies the script handling by moving the code back to the loop and always breaking in case of different
        scripts, correctly handling INHERITED and COMMON cases and updating the current script when needed.

        Covered by existing tests. This improves several tests that have been rebaselined.

        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::findNextRun):
        (WebCore::scriptsAreCompatibleForCharacters): Deleted.

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

        [MSE][GStreamer] Fix hang on clearing/destroying AppendPipeline
        https://bugs.webkit.org/show_bug.cgi?id=178819

        Reviewed by Xabier Rodriguez-Calvar.

        The deadlock may occur when UI thread tries to clear pipeline in
        AppendPipeline::clearPlayerPrivate() while parser thread tries to change
        pipeline state to pause holding the stream lock in
        AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread()

        This patch is authored by Eugene Mutavchi <Ievgen_Mutavchi@comcast.com>

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        Return if there's no player private.

2017-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        Assert that no script is executed during style recalc
        https://bugs.webkit.org/show_bug.cgi?id=178845
        <rdar://problem/35106129>

        Reviewed by Antti Koivisto.

        This patch adds NoEventDispatchAssertion to Document::updateStyle and Document::updateStyleIfNeeded
        to make sure we don't start mutating DOM in the middle of a style update.

        Added NoEventDispatchAssertion::EventAllowedScope for various places in SVGUseElement to update its
        shadow tree since that happens while updating the style.

        No new tests since there should be no behavioral change.

        * dom/Document.cpp:
        (WebCore::Document::resolveStyle): Added NoEventDispatchAssertion while flushing pending stylesheets
        and calling FrameView::willRecalcStyle, and while the style tree solver is in works. Also moved in
        the code to update the selection and schedule to dispatch a fake mouse event into the same scope.
        Also increment m_styleRecalcCount in the same code since post resolution callbacks could run author
        scripts which in turn trigger another (recursive) style recalc.
        (WebCore::Document::updateStyleIfNeeded): Put everything but the call to resolveStyle in a scope with
        NoEventDispatchAssertion.
        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithChildren): Added NoEventDispatchAssertion::EventAllowedScope to the
        newly cloned element for SVG use element's shadow tree.
        (WebCore::Element::cloneElementWithoutChildren): Ditto.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Make the assertion more precise to workaround the fact SVG
        use elements update its shadow tree in the middle of style updates. Also removed a redundant assertion
        since the result of NoEventDispatchAssertion::isEventDispatchAllowedInSubtree cannot chance without
        pushing or popoing the stack frame.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearShadowTree):
        (WebCore::SVGUseElement::updateShadowTree): Added NoEventDispatchAssertion to the user-agent shadow root
        of a SVG use element. Since this is a newly created shadow tree which hasn't been exposed to author
        scripts, it's safe to mutate them during the style recalc even though it's not the best design.
        (WebCore::SVGUseElement::cloneTarget const): Ditto.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree const): Ditto.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree const): Ditto.
        (WebCore::SVGUseElement::transferEventListenersToShadowTree const):

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Move platform Cocoa sources to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178851

        Rubber-stamped by Tim Horton.

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

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Start moving Cocoa specific unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178850

        Rubber-stamped by Tim Horton.

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

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

        [HarfBuzz] ComplexTextRun should initialize direction from the harfbuzz buffer
        https://bugs.webkit.org/show_bug.cgi?id=178788

        Reviewed by Michael Catanzaro.

        Instead of using the TextRun direction. If the TextRun is ltr, but the harfbuzz buffer is rtl, the character
        indexes will be swapped in m_coreTextIndices.

        * platform/graphics/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create): Remove the ltr parameter.
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Initialize m_isLTR using hb_buffer_get_direction().
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Do not pass ltr to ComplexTextRun::create().

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Move remaining platform independent sources to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178849

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Move plugins and rendering to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178848

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Unreviewed, add FEMorphology.cpp back to the regular build after r224003.

        * WebCore.xcodeproj/project.pbxproj:

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Unreviewed, Windows build fix.

        * Sources.txt:

2017-10-25  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: provide a way to enable/disable event listeners
        https://bugs.webkit.org/show_bug.cgi?id=177451
        <rdar://problem/34994925>

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/setEventListenerDisabled.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        Add InspectorInstrumentation call to isEventListenerDisabled. If true, the event listener's
        callback will not be called.

        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::setEventListenerDisabled):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::willRemoveEventListener):
        (WebCore::InspectorDOMAgent::isEventListenerDisabled):
        Introduce a mapping of `EventListener*` to `InspectorEventListener`, a struct for uniquely
        identifying event listeners so they can be referenced from the frontend. We only add items
        to this mapping when `getEventListenersForNode` is called, as that is when EventListener
        data is sent to the frontend. This allows us to defer creating an Inspector "mirror" object
        for each EventListener until it is needed. Items are removed whenever an event listener is
        removed or when the document changes.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::isEventListenerDisabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willRemoveEventListenerImpl):
        (WebCore::InspectorInstrumentation::isEventListenerDisabledImpl):
        Pass additional parameters to InspectorDOMAgent so it can determine if the event listener
        actually exists. If not, don't dispatch an event to the frontend as nothing will change.

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Move Platform to unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=178829

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Cursor.cpp:
        * platform/sql/SQLiteDatabase.h:

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

        messageEvent.source can also be a ServiceWorker
        https://bugs.webkit.org/show_bug.cgi?id=178839

        Reviewed by Brady Eidson.

        messageEvent.source can also be a ServiceWorker:
        - https://html.spec.whatwg.org/multipage/comms.html#messageeventsource

        This enables calling postMessage() from a ServiceWorker via Bug 178794.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::source const): Deleted.
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:

2017-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Style::Scope::flushPendingUpdate() can replace the entire document in XSLTProcessor::createDocumentFromSource
        https://bugs.webkit.org/show_bug.cgi?id=178715
        <rdar://problem/35144665>

        Reviewed by Brent Fulgham.

        Apply XLS tranforms when a 0s timer fires or the document finishes parsing or loading whichever comes first
        instead of in the middle of collecting a list of stylesheets.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize the newly added timer.
        (WebCore::Document::implicitClose): Apply any pending XSLT before we fire load events since some of the event
        handlers may be expecting to see the document after XSLT had been applied.
        (WebCore::Document::scheduleToApplyXSLTransforms): Added.
        (WebCore::Document::applyPendingXSLTransformsNowIfScheduled): Added.
        (WebCore::Document::applyPendingXSLTransformsTimerFired): Added. Moved the logic to apply XSL transforms from
        Style::Scope::collectActiveStyleSheets, and merged applyXSLTransform into this function.
        (WebCore::Document::applyXSLTransform): Deleted.
        (WebCore::Document::finishedParsing): Apply XSLT right before updating the style. This is where used to apply
        inline XSLT and it happens much earlier than implicitClose.
        * dom/Document.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet): Schedule XSLT in the document instead of flushing pending
        stylesheets, which would have synchronously applied XSLT. We can't apply XSLT synchronously here because this
        function can be called from a non-script-resilient call stack.
        (WebCore::ProcessingInstruction::sheetLoaded): Ditto.
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectXSLTransforms): Added.
        (WebCore::Style::Scope::collectActiveStyleSheets): Removed the code to apply XSLT. Skip ProcessingInstructions
        that applies XSLT. Also use RefPtr<StyleSheet> instead of a raw pointer to store StyleSheet.
        * style/StyleScope.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd): Apply any pending XSLTs synchronously here as the comment suggests.

2017-10-25  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: starting a second recording doesn't show red titlebar if the first recording was empty
        https://bugs.webkit.org/show_bug.cgi?id=178805
        <rdar://problem/35176303>

        Reviewed by Brian Burg.

        No new tests, updated existing tests.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        If the recording was stopped and had no data, reset the CallTracingActive flag to false.

2017-10-25  Keith Miller  <keith_miller@apple.com>

        Move html to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178709

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Delete temporally downloaded file when it cancelled
        https://bugs.webkit.org/show_bug.cgi?id=134393

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didCancelTransfer):
        (WebCore::CurlRequest::writeDataToDownloadFileIfEnabled):
        (WebCore::CurlRequest::closeDownloadFile):
        (WebCore::CurlRequest::cleanupDownloadFile):
        * platform/network/curl/CurlRequest.h:

2017-10-25  Youenn Fablet  <youenn@apple.com>

        Add service worker handle fetch support for all subresource requests
        https://bugs.webkit.org/show_bug.cgi?id=178769

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/image-fetch.https.html

        Moving DocumentThreadableLoader logic to CachedResourceLoader to apply it for all resource loads.
        Setting the selected service worker identifier for subresource only at the moment.

        Testing is limited to images, future wpt tests should cover other subresource cases.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::prepareFetch):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setSelectedServiceWorkerIdentifierIfNeeded):
        * loader/cache/CachedResourceRequest.h:

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

        Aliasing of text in CSS specs is blocky and ugly
        https://bugs.webkit.org/show_bug.cgi?id=174946
        rdar://problem/33594542

        Reviewed by Dean Jackson.

        The PaintedContentRequest relating to subpixel-antialiased text was failing to be
        satisfied if the text content in a composited layer was nested inside descendant
        RenderLayers, because RenderLayer::isVisuallyNonEmpty() returned early. If this
        function is passed a request, we can't return until we've satisfied the request
        (which triggers the checking of descendant layers).

        Test: compositing/contents-format/subpixel-antialiased-nested-layer.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):

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

        Unreviewed, add missing copyright header to ServiceWorkerClientType.idl.

        * workers/service/ServiceWorkerClientType.idl:
        * platform/Cursor.cpp: Previously, excluded on iOS now wrapped in #if
        * platform/sql/SQLiteDatabase.h: remove debugging data member from release builds.

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

        Make toJS() do the right thing for ServiceWorkerClient
        https://bugs.webkit.org/show_bug.cgi?id=178816

        Reviewed by Youenn Fablet.

        Make toJS() do the right thing for ServiceWorkerClient. In particular,
        it needs to construct a JSServiceWorkerWindowClient wrapper if the
        implementation object is a ServiceWorkerWindowClient.

        Also, ServiceWorkerClient does not need to be an ActiveDOMObject as
        it does not have any long-running tasks. Make it a ContextDestructionObject
        instead for now.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/ServiceWorkerClient.h:
        (WebCore::ServiceWorkerClient::create):
        * workers/service/ServiceWorkerClient.idl:
        * workers/service/ServiceWorkerClientType.h: Copied from Source/WebCore/workers/service/ServiceWorkerClient.idl.
        * workers/service/ServiceWorkerClientType.idl: Added.
        * workers/service/ServiceWorkerClients.h:
        * workers/service/ServiceWorkerClients.idl:

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

        When navigating back to a page, compositing layers may not use accelerated drawing
        https://bugs.webkit.org/show_bug.cgi?id=178749
        rdar://problem/35158946

        Reviewed by Dean Jackson.

        There were two issues with setting GraphicsLayerCA's "acceleratesDrawing" state which
        occurred on back navigation, related to the ordering of style recalcs and layout.

        First, at style recalc time, we created a RenderLayerCompositor but hadn't yet called
        its cacheAcceleratedCompositingFlags(), so any layers created during style update
        didn't get accelerated drawing. Fix by making cacheAcceleratedCompositingFlags() internal
        to RenderLayerCompositor and calling it from willRecalcStyle() and updateCompositingLayers().

        Secondly, GraphicsLayerCA::commitLayerChangesBeforeSublayers() needs to updateAcceleratesDrawing()
        before updating tiles, so that new tiles fetch the right acceleratesDrawing state from
        the TileController.

        Test: compositing/accelerated-layers-after-back.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayersAfterLayout):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::willRecalcStyle):
        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:

2017-10-25  Youenn Fablet  <youenn@apple.com>

        Enable ServiceWorker to fetch resources
        https://bugs.webkit.org/show_bug.cgi?id=178673

        Reviewed by Brady Eidson.

        Test: http/tests/workers/service/service-worker-fetch.html

        Allow reusing of EmptyFrameLoaderClient for network loading in WebKit Service Worker environment.
        Allow overriding the creation of a document loader, pageID, frameID and sessionID getters.

        Allow the possibility to create synthetic documents for all ports.

        Beefing up ServiceWorkerThreadProxy as it owns a Document and a Page that do nothing but server
        the purpose of loading resources for a service worker thread.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setResponse):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::sessionID const):
        (WebCore::EmptyFrameLoaderClient::createNetworkingContext):
        (WebCore::createEmptyFrameNetworkingContext):
        * loader/EmptyClients.h:
        * loader/EmptyFrameLoaderClient.h: Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::initForSynthesizedDocument):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::m_workerObjectProxy):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::create):
        (WebCore::createPageForServiceWorker):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::postTaskToLoader):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        Test: http/tests/workers/service/service-worker-fetch.html

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

        UNPACK_FLIP_Y is broken for MSE-backed videos
        https://bugs.webkit.org/show_bug.cgi?id=178774

        Reviewed by Dean Jackson.

        The global GLSL variable gl_Position can apparently only be set once, and any modifications
        made after that initial set are ignored. So rather than implement flipping by changing
        gl_Position.y, flip the texture coordinates instead.

        Drive-by fix: some of the constants used in VideoTextureCopierCV are not defined on older
        macOS versions, so make them optional.

        Tests: fast/canvas/webgl/texImage2D-mse-flipY-false.html
               fast/canvas/webgl/texImage2D-mse-flipY-true.html

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::transferFunctionFromString):
        (WebCore::VideoTextureCopierCV::initializeUVContextObjects):
        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:

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

        [Service Worker] Add stubs for serviceWorkerClient.type
        https://bugs.webkit.org/show_bug.cgi?id=178812

        Reviewed by Youenn Fablet.

        Add stubs for serviceWorkerClient.type to match the latest specification:
        - https://w3c.github.io/ServiceWorker/#enumdef-clienttype

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::type const):
        * workers/service/ServiceWorkerClient.h:
        * workers/service/ServiceWorkerClient.idl:
        * workers/service/ServiceWorkerClientType.h: Added.
        * workers/service/ServiceWorkerClientType.idl: Added.
        * workers/service/ServiceWorkerClients.h:
        * workers/service/ServiceWorkerClients.idl:

2017-10-24  Keith Miller  <keith_miller@apple.com>

        Move mathml and page to unified souces
        https://bugs.webkit.org/show_bug.cgi?id=178770

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        fast/images/animated-gif-paint-after-animation.html flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=178510

        Reviewed by Said Abou-Hallawa.

        ScalableImageDecoder was accessed from the main thread and the
        image decoding thread without a mutex.

        No new tests because there is no behavior change.

        * platform/image-decoders/ScalableImageDecoder.h: Add m_mutex. Lock the mutex in setData.
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const): Lock the mutex.
        (WebCore::ScalableImageDecoder::frameHasAlphaAtIndex const): Ditto.
        (WebCore::ScalableImageDecoder::frameBytesAtIndex const): Ditto.
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const): Ditto.
        (WebCore::ScalableImageDecoder::createFrameImageAtIndex): Ditto.

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

        Add support for unregistering a service worker
        https://bugs.webkit.org/show_bug.cgi?id=178735

        Reviewed by Brady Eidson.

        Add support for unregistering a service worker:
        - https://w3c.github.io/ServiceWorker/#navigator-service-worker-unregister

        Test: http/tests/workers/service/basic-unregister.https.html

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::resolvedWithUnregistrationResult):
        * workers/service/ServiceWorkerJob.h:
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/ServiceWorkerJobType.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::containerForScriptExecutionContext):
        (WebCore::ServiceWorkerRegistration::unregister):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::resolveRegistationJob):
        (WebCore::SWServer::resolveUnregistrationJob):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptContextStarted):
        (WebCore::SWServerRegistration::startNextJob):
        (WebCore::SWServerRegistration::runUnregisterJob):
        (WebCore::SWServerRegistration::resolveWithRegistrationOnMainThread):
        (WebCore::SWServerRegistration::resolveWithUnregistrationResultOnMainThread):
        (WebCore::SWServerRegistration::resolveCurrentRegistrationJob):
        (WebCore::SWServerRegistration::resolveCurrentUnregistrationJob):
        * workers/service/server/SWServerRegistration.h:

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

        MediaSessionManager* needs to catch Obj-C exceptions
        https://bugs.webkit.org/show_bug.cgi?id=178813

        Reviewed by Tim Horton.

        Wrap all calls out to Objective-C with BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::MediaSessionManageriOS):
        (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS):
        (WebCore::MediaSessionManageriOS::hasWirelessTargetsAvailable):
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring):
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo):
        (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange):
        (-[WebMediaSessionHelper allocateVolumeView]):
        (-[WebMediaSessionHelper initWithCallback:]):
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo):

2017-10-25  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement the "user aborts the payment request" algorithm
        https://bugs.webkit.org/show_bug.cgi?id=178810

        Reviewed by Tim Horton.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::didCancelPaymentSession):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::cancel):
        * Modules/paymentrequest/PaymentRequest.h:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::cancelPayment):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

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

        Autoplay muted videos still stop playback of other streaming apps in the background
        https://bugs.webkit.org/show_bug.cgi?id=177920

        Reviewed by Eric Carlson.

        When creating a new <video> or <audio> element, the global AudioSession can sometimes have
        its sessionCategory() set to "MediaPlayback", even if the element does not yet have a
        source. This is because the constructor for the MediaElementSession is called before
        m_isPlayingToWirelessTarget is initialized, and so in the MediaElementSession constructor,
        the media element's m_isPlayingToWirelessTarget ivar is sometimes (uninitialized) true.

        We could move the MediaElementSession ivar to the very end of the header, so it's
        initialized last, but that still leaves the possibility of the MediaElementSession et. all
        calling into the HTMLMediaElement before it's subclass's constructors have a chance to
        initialize their own ivars (much less their vtables). So instead, we'll create and set the
        MediaElementSession in a finishInitialization() method called from the HTMLVideoElement and
        HTMLAudioElement's create() factory methods.

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::finishInitialization):
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):

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

        [css-grid] Avoid clearing the overrideContainingBlockWidth if possible
        https://bugs.webkit.org/show_bug.cgi?id=178260

        Reviewed by Sergio Villar Senin.

        Since the intrinsic width computation uses the same logic than the
        track sizing algorithm we are clearing the overrideContainingBlockWidth
        of some grid items that are required to laid out them properly.

        It's very uncommon that any intrinsic size computation isn't performed
        as part of a layout process. However, if it happens, once cleared the
        overrideContainingBlockWidth it may lead to an incorrect layout of the
        affected grid items.

        This change is a defensive approach to avoid the issues caused by
        such off-layout preferred size requests, which may imply recomputing
        the grid container intrinsic size.

        No new tests, because we are only removing some redundant logic.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minContentForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::maxContentForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::updateOverrideContainingBlockContentSizeForChild const):
        (WebCore::IndefiniteSizeStrategy::minLogicalWidthForChild const):
        (WebCore::DefiniteSizeStrategy::minLogicalWidthForChild const):
        * rendering/GridTrackSizingAlgorithm.h:

2017-10-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed follow up changing one more enum value as discussed in the bug
        https://bugs.webkit.org/show_bug.cgi?id=177810

        * platform/glib/LowPowerModeNotifierGLib.cpp:
        (WebCore::LowPowerModeNotifier::updateState): use NONE instead of DISCHARGING, to ensure
        it will build even with older upower.

2017-10-25  Zan Dobersek  <zdobersek@igalia.com>

        Make SERVICE_WORKER feature buildable on GTK, WPE
        https://bugs.webkit.org/show_bug.cgi?id=178574

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt: Add missing include paths and files to the build.
        * Sources.txt: Add missing files to the build.
        * WebCore.xcodeproj/project.pbxproj: Remove the JSDOMPromise.cpp and
        JSFetchEventCustom.cpp targets, they're now built via unified sources.
        * bindings/js/JSFetchEventCustom.cpp: Guard custom JSFetchEvent code
        with the ENABLE(SERVICE_WORKER) guards.

2017-10-24  Alejandro G. Castro  <alex@igalia.com>

        Clean up gcc build warnings about reaching the end of a non void function for webrtc classes
        https://bugs.webkit.org/show_bug.cgi?id=178721

        Reviewed by Youenn Fablet.

        Assert when we reach those situations and return some value after that to avoid warning.

        No new tests, this is a clean up.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::sessionDescriptionType):
        (WebCore::signalingState):
        (WebCore::toRTCIceConnectionState):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::bundlePolicyfromConfiguration):
        (WebCore::iceTransportPolicyfromConfiguration):

2017-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        RenderSVGModelObject::checkIntersection triggers layout
        https://bugs.webkit.org/show_bug.cgi?id=178710

        Reviewed by Simon Fraser.

        Fixed the bug that checkIntersection and checkEnclosure no longer updates the layout after r223882.

        Test: svg/custom/check-intersection-basic.svg

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::collectIntersectionOrEnclosureList):
        (WebCore::SVGSVGElement::checkIntersection):
        (WebCore::SVGSVGElement::checkEnclosure):
        * svg/SVGSVGElement.h:

2017-10-24  Andy Estes  <aestes@apple.com>

        [Apple Pay] Implement a paymentmethodselected event for PaymentRequest
        https://bugs.webkit.org/show_bug.cgi?id=178765

        Reviewed by Tim Horton.

        When the Apple Pay payment method changes, fire an applepaypaymentmethodchanged event on the
        PaymentRequest object. The event has a paymentMethod property and an updateWith() method
        which behaves identically to PaymentRequestUpdateEvent.updateWith().

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

        * DerivedSources.make:
        * Modules/applepay/ApplePayPaymentMethod.idl:
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.h:
        * Modules/applepay/PaymentMethod.h:
        (WebCore::PaymentMethod::PaymentMethod): Deleted.
        (WebCore::PaymentMethod::pkPaymentMethod const): Deleted.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::detailsUpdated):
        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
        (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.cpp: Added.
        (WebCore::ApplePayPaymentMethodUpdateEvent::ApplePayPaymentMethodUpdateEvent):
        (WebCore::ApplePayPaymentMethodUpdateEvent::eventInterface const):
        * Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.h: Added.
        * Modules/applepay/paymentrequest/ApplePayPaymentMethodUpdateEvent.idl: Added.
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::shippingAddressChanged):
        (WebCore::PaymentRequest::shippingOptionChanged):
        (WebCore::PaymentRequest::dispatchEvent):
        (WebCore::PaymentRequest::updateWith):
        (WebCore::PaymentRequest::settleDetailsPromise):
        (WebCore::PaymentRequest::dispatchUpdateEvent): Deleted.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        (WebCore::PaymentRequestUpdateEvent::updateWith):
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::changePaymentMethod):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:
        * testing/MockPaymentMethod.h: Added.

2017-10-24  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerClientFetch should return an error that is not null in case of failure
        https://bugs.webkit.org/show_bug.cgi?id=178761

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        As per spec, ServiceWorkerJob should not go through Service Worker Handle Fetch
        for fetching scripts.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/WorkerScriptLoaderClient.h:
        (WebCore::WorkerScriptLoaderClient::isServiceWorkerClient const):
        * workers/service/ServiceWorkerJob.h:

2017-10-24  Keith Miller  <keith_miller@apple.com>

        Move inspector and loader to unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=178760

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-24  Alex Christensen  <achristensen@webkit.org>

        Fix build after r223940

        * inspector/WebConsoleAgent.cpp:

2017-10-24  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r223929.
        https://bugs.webkit.org/show_bug.cgi?id=177027

        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels):
        Always initialize the variable "level".  Visual studio was complaining about the possibility of not initializing it
        but this is only possible if logChannel->level is an invalid enum value.

2017-10-24  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r223925
        https://bugs.webkit.org/show_bug.cgi?id=178687

        * html/ImageBitmap.cpp:
        (WebCore::interpolationQualityForResizeQuality):
        Visual Studio was complaining that not all control paths returned a value.

2017-10-24  Youenn Fablet  <youenn@apple.com>

        Enable service worker to use cache storage api
        https://bugs.webkit.org/show_bug.cgi?id=178684

        Reviewed by Brady Eidson.

        Test: http/tests/workers/service/service-worker-cache-api.https.html

        Updated WorkerLoaderProxy so that it can create a CacheStorageConnection.
        Update WorkerCacheStorageConnection to take benefit of that.
        This allows creating a CacheStorageConnection based on the page for regular workers and differently for Service Worker context.

        Added ServiceWorkerThreadProxy as a proxy to ServiceWorkerThread.
        It is in particular responsible to do proxy for loading tasks.
        It implements cache API support for service worker by creating a dedicated CacheStorageConnection.

        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::create):
        (WebCore::WorkerCacheStorageConnection::~WorkerCacheStorageConnection):
        (WebCore::WorkerCacheStorageConnection::doOpen):
        (WebCore::WorkerCacheStorageConnection::doRemove):
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        (WebCore::WorkerCacheStorageConnection::reference):
        (WebCore::WorkerCacheStorageConnection::dereference):
        (WebCore::WorkerCacheStorageConnection::doRetrieveRecords):
        (WebCore::WorkerCacheStorageConnection::doBatchDeleteOperation):
        (WebCore::WorkerCacheStorageConnection::doBatchPutOperation):
        * WebCore.xcodeproj/project.pbxproj:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::createCacheStorageConnection):
        * workers/WorkerMessagingProxy.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp: Added.
        (WebCore::ServiceWorkerThreadProxy::create):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::postTaskForModeToWorkerGlobalScope):
        (WebCore::ServiceWorkerThreadProxy::postTaskToLoader):
        (WebCore::ServiceWorkerThreadProxy::createCacheStorageConnection):
        * workers/service/context/ServiceWorkerThreadProxy.h: Added.

2017-10-24  Alex Christensen  <achristensen@webkit.org>

        Optionally store entire ResourceRequest for ping loads
        https://bugs.webkit.org/show_bug.cgi?id=178756

        Reviewed by Tim Horton.

        No change in behavior.
        This uses less memory in the common loading case.
        This will be needed for moving appcache loading to the Networking Process.
        See https://bugs.webkit.org/show_bug.cgi?id=178540

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::setOriginalRequest):
        (WebCore::CachedResource::originalRequest const):
        (WebCore::CachedResource::setOriginalRequestHeaders): Deleted.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2017-10-24  Andy Estes  <aestes@apple.com>

        [WebIDL] Support the ExportMacro attribute for dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=178752

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryHeaderContent):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/TestStandaloneDictionary.idl:

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

        Web Inspector: Enable WebKit logging configuration and display
        https://bugs.webkit.org/show_bug.cgi?id=177027
        <rdar://problem/33964767>

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/webcore-logging.html

        * dom/Document.cpp:
        (WebCore::Document::~Document): Stop observing the logger.
        (WebCore::Document::logger): Observe the logger.
        (WebCore::Document::didLogMessage): Forward logging messages to the inspector.
        * dom/Document.h:

        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::getLoggingChannels): New, return the state of log runtime channels.
        (WebCore::WebConsoleAgent::setLoggingChannelLevel): New, set the state of a channel.
        * inspector/WebConsoleAgent.h:

        * platform/Logging.cpp:
        (WebCore::getLogChannel): New, get a log channel by name.
        * platform/Logging.h:

2017-10-24  Dean Jackson  <dino@apple.com>

        Attempted build fix for Sierra.

        * html/ImageBitmap.cpp:
        (WebCore::croppedSourceRectangleWithFormatting):

2017-10-24  Dean Jackson  <dino@apple.com>

        Implement resizing options for ImageBitmap rendering
        https://bugs.webkit.org/show_bug.cgi?id=178687
        <rdar://problem/35135417>

        Reviewed by Sam Weinig.

        Implement many of the sizing options for createImageBitmap.

        Test: http/wpt/2dcontext/imagebitmap/createImageBitmap-sizing.html

        * html/ImageBitmap.cpp:
        (WebCore::croppedSourceRectangleWithFormatting):

            Implement the first bit of the algorithm from
            the HTML specification.

        (WebCore::outputSizeForSourceRectangle):

            ... and then the second bit. Leave the rest in
            comments for now.

        (WebCore::interpolationQualityForResizeQuality):

            Helper function to map ImageBitmapOptions to
            GraphicsContext.

        (WebCore::ImageBitmap::createPromise):

            Implement more of the sizing algorithm.

        * html/ImageBitmap.h: Origin tainting is defined to be false by default.

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

        Add initial implementation for serviceWorker.postMessage()
        https://bugs.webkit.org/show_bug.cgi?id=178534

        Reviewed by Youenn Fablet.

        Add initial implementation for serviceWorker.postMessage():
        - https://w3c.github.io/ServiceWorker/#service-worker-postmessage

        Test: http/tests/workers/service/basic-ServiceWorker-postMessage.https.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSExtendableMessageEvent.cpp: Added.
        (WebCore::JSExtendableMessageEvent::data const):
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.h:
        * dom/EventNames.in:
        * dom/MessagePortChannel.h:
        * dom/ScriptExecutionContext.h:
        * workers/WorkerGlobalScope.h:
        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::ExtendableEvent):
        (WebCore::ExtendableEvent::~ExtendableEvent):
        * workers/service/ExtendableEvent.h:
        * workers/service/ExtendableMessageEvent.cpp: Added.
        (WebCore::ExtendableMessageEvent::create):
        (WebCore::ExtendableMessageEvent::ExtendableMessageEvent):
        (WebCore::ExtendableMessageEvent::~ExtendableMessageEvent):
        * workers/service/ExtendableMessageEvent.h: Added.
        * workers/service/ExtendableMessageEvent.idl: Added.
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::postMessage):
        (WebCore::ServiceWorker::state const):
        (WebCore::ServiceWorker::scriptExecutionContext const):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::controller const):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::thread):
        * workers/service/ServiceWorkerGlobalScope.h:
        (isType):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postMessageToServiceWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWClientConnection.h:

2017-10-24  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement the "PaymentRequest updated" algorithm
        https://bugs.webkit.org/show_bug.cgi?id=178689

        Reviewed by Alex Christensen.

        Implemented the "PaymentRequest updated" algorithm by firing shippingaddresschange and
        shippingoptionchange events at the right times and implementing
        PaymentRequestUpdateEvent.updateWith().

        Tests: http/tests/paymentrequest/payment-request-change-shipping-address.https.html
               http/tests/paymentrequest/payment-request-change-shipping-option.https.html
               http/tests/paymentrequest/updateWith-method-pmi-handling.https.html

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convertAndValidate): Added. Converts a PaymentDetailsInit to a
        ApplePaySessionPaymentRequest::TotalAndLineItems.
        (WebCore::ApplePayPaymentHandler::shippingAddressUpdated): Created a ShippingContactUpdate
        and passed it to PaymentCoordinator::completeShippingContactSelection().
        (WebCore::ApplePayPaymentHandler::shippingOptionUpdated): Created a ShippingMethodUpdate and
        passed it to PaymentCoordinator::completeShippingMethodSelection().
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::checkAndCanonicalizeDetails): Moved the logic for checking and canonicalizing a
        PaymentDetailsBase from PaymentRequest::create() to here.
        (WebCore::PaymentRequest::create): Called checkAndCanonicalizeDetails().
        (WebCore::PaymentRequest::abortWithException): Moved the body of stop() to here and
        parameterized the Exception with which to abort m_showPromise.
        (WebCore::PaymentRequest::stop): Called abortWithException() with an AbortError.
        (WebCore::PaymentRequest::shippingAddressChanged): Called dispatchUpdateEvent() with
        shippingaddresschangeEvent.
        (WebCore::PaymentRequest::shippingOptionChanged): Ditto with shippingoptionchangeEvent.
        (WebCore::PaymentRequest::dispatchUpdateEvent): Created a PaymentRequestUpdateEvent and
        dispatched it.
        (WebCore::PaymentRequest::updateWith): Added a settle handler to m_detailsPromise.
        (WebCore::PaymentRequest::settleDetailsPromise): Updated the PaymentRequest with the new
        details and called PaymentHandler::shippingAddressUpdated() or
        PaymentHandler::shippingOptionUpdated().
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        (WebCore::PaymentRequestUpdateEvent::PaymentRequestUpdateEvent):
        (WebCore::PaymentRequestUpdateEvent::updateWith): Called PaymentRequest::updateWith().
        (WebCore::PaymentRequestUpdateEvent::eventInterface const): Returned
        PaymentRequestUpdateEventInterfaceType.
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.idl:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::MockPaymentCoordinator::openPaymentSetup):
        (WebCore::MockPaymentCoordinator::completeMerchantValidation): Stopped calling
        PaymentCoordinator::didAuthorizePayment().
        (WebCore::MockPaymentCoordinator::changeShippingOption): Called
        PaymentCoordinator::didSelectShippingMethod().
        (WebCore::MockPaymentCoordinator::acceptPayment): Called
        PaymentCoordinator::didAuthorizePayment().
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2017-10-24  Alex Christensen  <achristensen@webkit.org>

        Apply custom header fields from WebsitePolicies to same-domain requests
        https://bugs.webkit.org/show_bug.cgi?id=178356
        <rdar://problem/31073436>

        Reviewed by Brady Eidson.

        Covered by new API tests.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::clearHTTPAuthorization):
        (WebCore::ResourceRequestBase::clearHTTPContentType):
        (WebCore::ResourceRequestBase::clearHTTPReferrer):
        (WebCore::ResourceRequestBase::clearHTTPOrigin):
        (WebCore::ResourceRequestBase::clearHTTPUserAgent):
        (WebCore::ResourceRequestBase::clearHTTPAccept):
        (WebCore::ResourceRequestBase::clearHTTPAcceptEncoding):
        (WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):
        (WebCore::ResourceRequestBase::setHTTPBody):
        (WebCore::ResourceRequestBase::setAllowCookies):
        (WebCore::ResourceRequestBase::setPriority):
        (WebCore::ResourceRequestBase::addHTTPHeaderFieldIfNotPresent):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderFields):
        If we only update the platform request when headers are added (or other changes) for HTTP requests,
        then the changes will not affect the NSURLRequest that is sent over IPC or visible to the API.
        This is necessary for these new tests to work, but it's also of growing importance since our
        introduction of WKURLSchemeHandler.

2017-10-24  Brent Fulgham  <bfulgham@apple.com>

        Adopt new secure coding APIs
        https://bugs.webkit.org/show_bug.cgi?id=178484
        <rdar://problem/34837193>

        Reviewed by Tim Horton.

        Switch to new NSKeyed[Un]Archiver methods that active and use
        NSSecureCoding by default.

        Most of the new API is wrapped in a set of convenience methods so we can
        build without the new API on older systems.

        No change in behavior.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString): Use new convenience method
        to archive the string object.
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Update to
        use secure coding where possible.
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Ditto.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Use new secure API.
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Ditto.
        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData): Update to
        secure coding API where possible.

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

        HTMLMediaElement should iterate HTMLTrackElements consistently.
        https://bugs.webkit.org/show_bug.cgi?id=178423
        rdar://problem/35044967

        Reviewed by Eric Carlson.

        No new tests because no expected behavior change.

        HTMLMediaElement iterates HTMLTrackElements as children in every place but one, where it iterates them
        as descendants. It should always iterate them as children.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::finishParsingChildren):

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

        SerializedScriptValue::deserialize() should take ports as a const Vector&
        https://bugs.webkit.org/show_bug.cgi?id=178727

        Reviewed by Alex Christensen.

        SerializedScriptValue::deserialize() should take ports as a const Vector&, not a Vector&.
        It does not modify the input vector.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data const):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:

2017-10-24  Konstantin Tokarev  <annulen@yandex.ru>

        [MediaFoundation] Videos are always autoplaying for local files
        https://bugs.webkit.org/show_bug.cgi?id=178693

        Patch by Doug Massay.
        Reviewed by Alex Christensen.

        r199114 fixes autoplay issue only if starting session invokes
        buffering stage. However when local files are played, onBufferingStarted
        and onBufferingStopped are not called, and video is not paused.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::onSessionStarted):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2017-10-24  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r223889.

        This caused multiple crashes on all platforms

        Reverted changeset:

        "Adopt new secure coding APIs"
        https://bugs.webkit.org/show_bug.cgi?id=178484
        https://trac.webkit.org/changeset/223889

2017-10-24  Antti Koivisto  <antti@apple.com>

        Create inline wrappers for before/after pseudo elements that have display:contents
        https://bugs.webkit.org/show_bug.cgi?id=178722

        Reviewed by Ryosuke Niwa.

        We can handle before and after pseudo elements with display:contents by giving them
        inline renderers with style inherited from display:contents style. This removes
        need for complicated logic for this case and handles everything correctly.

        This is a better approach and replaces the one taken in bug 178584.
        It also fixes two display:contents WPTs.

        * dom/PseudoElement.h:

            There is no need to track content renderers separately anymore. They always descendants of
            pseudo element's renderer (which is an inline wrapper in case of display:contents).

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::copyContentFrom):
        * rendering/style/RenderStyle.h:
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::createContentRenderers):
        (WebCore::updateStyleForContentRenderers):
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        (WebCore::removeAndDestroyContentRenderers): Deleted.

            Since content renderers are now always descendants of the pseudo renderer
            there is no need for a separate destruction path.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

            Create ElementUpdate with a style that will produce an inline wrapper.

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

        [iOS] MediaPlayer::isAvailable() takes ~150 ms during web process initialization
        https://bugs.webkit.org/show_bug.cgi?id=178713
        <rdar://problem/35115906>

        Reviewed by Eric Carlson.

        Loading AVFoundation should not be required to answer the question of MediaPlayer::isAvailable() on iOS, where
        both AVFoundation and CoreMedia frameworks should always exist. As such, we can bail early and return true to
        avoid always dynamically loading AVFoundation and CoreMedia.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isAvailable):

2017-10-24  Antoine Quint  <graouts@apple.com>

        RenderThemeCocoa::mediaControlsFormattedStringForDuration may cause a crash due to unhandled Obj-C exception
        https://bugs.webkit.org/show_bug.cgi?id=178716
        <rdar://problem/35112900>

        Reviewed by Dean Jackson.

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

2017-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        SizesAttributeParser::SizesAttributeParser triggers layout
        https://bugs.webkit.org/show_bug.cgi?id=178712

        Reviewed by Antti Koivisto.

        Revert r213711 as this change introduced an unwated synchronous layout inside Node::insertedIntoAncestor.

        The test had been marked as timing out since r191379 and changed to failing expectation in r199225
        as the test result's error message changes from run to run.

        Disabled Tests: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html
                        had been marked failing since r199225, prior to which it was marked as timeout in r191379.
                        imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute.html
                        is now marked as flaky.

        * css/parser/SizesAttributeParser.cpp:
        (WebCore::SizesAttributeParser::SizesAttributeParser):

2017-10-24  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix internal iOS build.

        * Sources.txt:

2017-10-24  Brent Fulgham  <bfulgham@apple.com>

        Adopt new secure coding APIs
        https://bugs.webkit.org/show_bug.cgi?id=178484
        <rdar://problem/34837193>

        Reviewed by Tim Horton.

        Switch to new NSKeyed[Un]Archiver methods that active and use
        NSSecureCoding by default.

        Most of the new API is wrapped in a set of convenience methods so we can
        build without the new API on older systems.

        No change in behavior.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::archivedDataForAttributedString): Use new convenience method
        to archive the string object.
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Update to
        use secure coding where possible.
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Ditto.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Use new secure API.
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Ditto.
        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData): Update to
        secure coding API where possible.

2017-10-24  Miguel Gomez  <magomez@igalia.com>

        [GTK][X11] Windy.com shows always straight wind lines
        https://bugs.webkit.org/show_bug.cgi?id=176718

        Reviewed by Carlos Garcia Campos.

        WebGL's GL_LUMINANCE_ALPHA format is not available in OpenGL when using a version >= 3.2
        and a core profile. In that case, we need to replace it with GL_RG and swizzle the color
        components appropriately.

        No new behavior.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2017-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        DocumentOrderedMap::add should release assert that tree scopes match
        https://bugs.webkit.org/show_bug.cgi?id=178708

        Reviewed by Antti Koivisto.

        Assert that the tree scope of element matches the given tree scope instead of asserting that
        element is in tree scope, and replaced the use of RELEASE_ASSERT by the newly added
        RELEASE_ASSERT_WITH_SECURITY_IMPLICATION to clarify the semantics of these assertions.

        Also removed now redudnant early exits which would never execute due to release assertions.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get const):

2017-10-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wsubobject-linkage warning in InspectorIndexedDBAgent.cpp
        https://bugs.webkit.org/show_bug.cgi?id=178698

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorIndexedDBAgent.cpp:

2017-10-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add basic timing and target properties
        https://bugs.webkit.org/show_bug.cgi?id=178674

        Reviewed by Dean Jackson.

        We add three new interfaces to expose enough properties to establish basic timing properties,
        a start time and duration, and the target of an animation. The startTime property is set on
        the Animation object, the target is set on the KeyframeEffect set as the effect property on
        the Animation object, and the duration is set on the AnimationEffectTiming set on the effect.

        Tests: webanimations/animation-effect-timing.html
               webanimations/animation-effect.html
               webanimations/animation-interface-effect-property.html
               webanimations/animation-interface-start-time-property.html
               webanimations/keyframe-effect-interface-timing-duration.html
               webanimations/keyframe-effect.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffect.cpp: Copied from Source/WebCore/animation/WebAnimation.idl.
        (WebCore::AnimationEffect::AnimationEffect):
        (WebCore::AnimationEffect::~AnimationEffect):
        * animation/AnimationEffect.h: Copied from Source/WebCore/animation/WebAnimation.h.
        (WebCore::AnimationEffect::isKeyframeEffect const):
        (WebCore::AnimationEffect::timing const):
        (WebCore::AnimationEffect::classType const):
        * animation/AnimationEffect.idl: Copied from Source/WebCore/animation/WebAnimation.idl.
        * animation/AnimationEffectTiming.cpp: Copied from Source/WebCore/animation/WebAnimation.idl.
        (WebCore::AnimationEffectTiming::create):
        (WebCore::AnimationEffectTiming::AnimationEffectTiming):
        (WebCore::AnimationEffectTiming::~AnimationEffectTiming):
        * animation/AnimationEffectTiming.h: Copied from Source/WebCore/animation/WebAnimation.h.
        * animation/AnimationEffectTiming.idl: Copied from Source/WebCore/animation/WebAnimation.idl.
        * animation/KeyframeEffect.cpp: Copied from Source/WebCore/animation/WebAnimation.idl.
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::KeyframeEffect):
        * animation/KeyframeEffect.h: Copied from Source/WebCore/animation/WebAnimation.h.
        * animation/KeyframeEffect.idl: Copied from Source/WebCore/animation/WebAnimation.idl.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffect):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:
        * bindings/js/JSAnimationEffectCustom.cpp: Copied from Source/WebCore/animation/WebAnimation.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/WebCoreBuiltinNames.h:

2017-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        RenderSVGModelObject::checkIntersection triggers layout
        https://bugs.webkit.org/show_bug.cgi?id=178710

        Reviewed by Antti Koivisto.

        Don't trigger a layout inside getElementCTM. Update the layout upfront in getEnclosureList.

        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::getElementCTM):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getEnclosureList):

2017-10-24  Nan Wang  <n_wang@apple.com>

        AX: Crash at -[WebAccessibilityObjectWrapper _accessibilityMinValue] + 24
        https://bugs.webkit.org/show_bug.cgi?id=178697

        Reviewed by Chris Fleizach.

        When we are calling _accessibilityMinValue and _accessibilityMaxValue on iOS, 
        it might cause crash if the AX object has already been detached. Fixed this 
        by adding the necessary checks.

        Test: accessibility/ios-simulator/slider-min-value-crash.html

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

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Unreviewed, restore unneeded all in ones.

        * CMakeLists.txt:

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

        Unreviewed, rolling out r223870 and r223871.
        https://bugs.webkit.org/show_bug.cgi?id=178702

        broke the windows build (Requested by keith_miller on
        #webkit).

        Reverted changesets:

        "Add html, inspector, loader to unified sources"
        https://bugs.webkit.org/show_bug.cgi?id=178695
        https://trac.webkit.org/changeset/223870

        "Unrievwed, fix windows build."
        https://trac.webkit.org/changeset/223871

2017-10-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, attempt to fix initializeSupportedImageMIMETypes after r223860
        https://bugs.webkit.org/show_bug.cgi?id=178618
        <rdar://problem/35108852>

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

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Unrievwed, fix windows build.

        * CMakeLists.txt:

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Add html, inspector, loader to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178695

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused Console.setMonitoringXHREnabled
        https://bugs.webkit.org/show_bug.cgi?id=178617

        Reviewed by Sam Weinig.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::setMonitoringXHREnabled): Deleted.
        (WebCore::WebConsoleAgent::didFinishXHRLoading): Deleted.
        * inspector/WebConsoleAgent.h:
        Remove XHR monitoring code.

        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::setLastSendLineAndColumnNumber): Deleted.
        * xml/XMLHttpRequest.idl:
        Remove now unused state on XHR and ExecState requirement for send().

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Add dom, editing, fileapi, and history to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178694

        Rubber-stamped by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Move bridge, contentextensions, crypto, and css to unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=178691

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Unreviewed, fix the Windows build after r223860

        UTIUtilities only exists on Cocoa platforms, so we need to guard it accordingly.

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

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

        [iOS] DocumentWriter::createDocument can spend ~100ms unnecessarily converting image UTIs to MIME types
        https://bugs.webkit.org/show_bug.cgi?id=178618
        <rdar://problem/35108852>

        Reviewed by Said Abou-Hallawa.

        Currently, in setting up a new Document, DocumentWriter::createDocument() always asks whether or not the
        Document should be a PDF document by calling MIMETypeRegistry::isPDFMIMEType(), which forces lazy initialization
        of every MIME type dictionary (e.g. image types, PDF types, JavaScript types, etc.). As evidenced by traces,
        this can be an expensive operation on certain devices.

        This patch implements two optimizations. First, we refactor the initializeSupportedImageMIMETypes() helper to
        stop asking for MIMETypeForImageSourceType for each of the supported UTIs. This is because the known MIME types
        corresponding to these hard-coded UTI types is a fixed set anyways, so we can simply iterate over a constant
        array of MIME types and populate the supported image (and image resource) types. Also, add assertions to ensure
        that we keep allowed image MIME types in sync with allowed image UTIs.

        The second optimization removes initializeMIMETypeRegistry() altogether in favor of calling just the
        initialize*MIMETypes() functions needed to ensure the information required. For instance, getPDFMIMETypes()
        currently calls initializeMIMETypeRegistry() if the pdfMIMETypes dictionary doesn't exist, when it really only
        needs to ensure that the pdfMIMETypes is initialized, for which initializePDFMIMETypes() is sufficient.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedJavaScriptMIMETypes):
        (WebCore::initializePDFMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::initializeUnsupportedTextMIMETypes):

        Move MIME type dictionary creation into initialize*MIMETypes() helpers. Additionally, remove
        initializePDFAndPostScriptMIMETypes, which is no longer necessary.

        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MIMETypeRegistry::isUnsupportedTextMIMEType):
        (WebCore::MIMETypeRegistry::isPDFOrPostScriptMIMEType):

        Tweak to check that the type isPDFMIMEType(), or that it's otherwise "application/postscript".

        (WebCore::MIMETypeRegistry::isPDFMIMEType):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes):
        (WebCore::MIMETypeRegistry::getPDFMIMETypes):
        (WebCore::MIMETypeRegistry::getUnsupportedTextMIMETypes):

        Call only the relevant MIME type initializers when needed.

        (WebCore::initializePostScriptMIMETypes): Deleted.
        (WebCore::initializeMIMETypeRegistry): Deleted.
        (WebCore::MIMETypeRegistry::getPDFAndPostScriptMIMETypes): Deleted.

        Remove an unused and unexported function.

        * platform/MIMETypeRegistry.h:

2017-10-23  Andy Estes  <aestes@apple.com>

        [Payment Request] Take the JSC API lock before creating the PaymentResponse.details object
        https://bugs.webkit.org/show_bug.cgi?id=178686

        Reviewed by Keith Miller.

        This fixes several flaky crashes in http/tests/paymentrequest/ after r223855.

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

2017-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Please support HAR Export for network traffic
        https://bugs.webkit.org/show_bug.cgi?id=146692
        <rdar://problem/7463672>

        Reviewed by Brian Burg.

        Tests: http/tests/inspector/network/har/har-basic.html
               http/tests/inspector/network/har/har-page.html

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest):
        Include the wall time when sending a request. This is needed for HAR to
        include a wall time, and can be used for Cookie expiration time calculation
        as well.

2017-10-23  Andy Estes  <aestes@apple.com>

        [Payment Request] Resolve PaymentRequest.show()'s accept promise when a payment is authorized
        https://bugs.webkit.org/show_bug.cgi?id=178609
        <rdar://problem/33542813>

        Reviewed by Alex Christensen.

        This patch implements the logic for resolving PaymentRequest.show()'s accept promise when
        the user authorizes a payment, and implements PaymentResponse.complete().

        Tests: http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html
               http/tests/paymentrequest/payment-response-complete-method.https.html
               http/tests/paymentrequest/payment-response-methodName-attribute.https.html
               http/tests/paymentrequest/payment-response-payerEmail-attribute.https.html
               http/tests/paymentrequest/payment-response-payerName-attribute.https.html
               http/tests/paymentrequest/payment-response-payerPhone-attribute.https.html

        * DerivedSources.make:
        * Modules/applepay/ApplePayPaymentContact.h:
        * Modules/applepay/Payment.h:
        (WebCore::Payment::Payment): Deleted.
        (WebCore::Payment::pkPayment const): Deleted.
        * Modules/applepay/PaymentContact.h:
        (WebCore::PaymentContact::PaymentContact): Deleted.
        (WebCore::PaymentContact::pkContact const): Deleted.
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::convert):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::hasActiveSession):
        (WebCore::ApplePayPaymentHandler::ApplePayPaymentHandler):
        (WebCore::ApplePayPaymentHandler::document):
        (WebCore::ApplePayPaymentHandler::paymentCoordinator):
        (WebCore::ApplePayPaymentHandler::convertData):
        (WebCore::ApplePayPaymentHandler::show):
        (WebCore::ApplePayPaymentHandler::hide):
        (WebCore::ApplePayPaymentHandler::canMakePayment):
        (WebCore::ApplePayPaymentHandler::complete):
        (WebCore::convert):
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
        (WebCore::ApplePayPaymentHandler::didSelectShippingMethod):
        (WebCore::ApplePayPaymentHandler::didSelectShippingContact):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/PaymentAddress.h:
        * Modules/paymentrequest/PaymentAddress.idl:
        * Modules/paymentrequest/PaymentHandler.cpp:
        (WebCore::PaymentHandler::create):
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):
        (WebCore::PaymentRequest::stop):
        (WebCore::PaymentRequest::canMakePayment):
        (WebCore::PaymentRequest::canSuspendForDocumentSuspension const):
        (WebCore::PaymentRequest::shippingAddressChanged):
        (WebCore::PaymentRequest::shippingOptionChanged):
        (WebCore::PaymentRequest::accept):
        (WebCore::PaymentRequest::complete):
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::PaymentResponse):
        (WebCore::PaymentResponse::complete):
        * Modules/paymentrequest/PaymentResponse.h:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::mockPaymentCoordinator const):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockPayment.h: Added.
        * testing/MockPaymentAddress.h: Added.
        * testing/MockPaymentAddress.idl: Added.
        * testing/MockPaymentContact.h: Added.
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::MockPaymentCoordinator::openPaymentSetup):
        (WebCore::dispatchIfShowing):
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::completeMerchantValidation):
        (WebCore::MockPaymentCoordinator::completePaymentSession):
        (WebCore::MockPaymentCoordinator::abortPaymentSession):
        (WebCore::MockPaymentCoordinator::cancelPaymentSession):
        (WebCore::MockPaymentCoordinator::paymentCoordinatorDestroyed):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl: Added.

2017-10-23  Dean Jackson  <dino@apple.com>

        Attempt to stop iOS Simulator tests from failing because
        we don't support Accelerated ImageBuffer.

        * html/ImageBitmap.cpp:

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

        [FrameView::layout cleanup] Make m_subtreeLayoutRoot weak.
        https://bugs.webkit.org/show_bug.cgi?id=178621
        <rdar://problem/35110321>

        Reviewed by Simon Fraser.

        This patch turn m_subtreeLayoutRoot into a weak pointer to handle both the optional and the mutation cases.

        Covered by existing cases.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::willDestroyRenderTree):
        (WebCore::FrameView::didDestroyRenderTree):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::handleLayoutWithFrameFlatteningIfNeeded):
        (WebCore::FrameView::canPerformLayout const):
        (WebCore::FrameView::layout): WeakPtr<RenderElement> protects us from recursive layouts triggering UAF on layoutRoot.
        (WebCore::FrameView::convertSubtreeLayoutToFullLayout):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::needsLayout const):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/FrameView.h:

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix windows build.

        * CMakeLists.txt:

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Move shared accessibility and animiations files to unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=178677

        Reviewed by Tim Horton.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Drop confusing Event::dispatched() method
        https://bugs.webkit.org/show_bug.cgi?id=178670

        Reviewed by Youenn Fablet.

        Drop confusing Event::dispatched() method. What the call sites want to do is check
        that the Event's "dispatch" flag is set:
        - https://dom.spec.whatwg.org/#dispatch-flag

        This flag gets set at the beginning of dispatchEvent() and unset at the end of
        dispatchEvent():
        - https://dom.spec.whatwg.org/#ref-for-dispatch-flag③

        See as an example event.initEvent():
        - https://dom.spec.whatwg.org/#dom-event-initevent

        The right way to check the Event's "dispatch" flag is the Event::isBeingDispatched()
        method, so use this instead. One side effect of this change is that it is now
        possible to call the init*Event() method on events that have already been dispatched
        in order to dispatch them again, as per the specification.

        Test: fast/events/initEvent-after-dispatching.html

        * dom/CompositionEvent.cpp:
        (WebCore::CompositionEvent::initCompositionEvent):
        * dom/DeviceMotionEvent.cpp:
        (WebCore::DeviceMotionEvent::initDeviceMotionEvent):
        * dom/DeviceOrientationEvent.cpp:
        (WebCore::DeviceOrientationEvent::initDeviceOrientationEvent):
        * dom/Event.h:
        * dom/HashChangeEvent.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::initKeyboardEvent):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEvent):
        * dom/OverflowEvent.cpp:
        (WebCore::OverflowEvent::initOverflowEvent):
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::initTextEvent):
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::initTouchEvent):
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::initUIEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::initWheelEvent):
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::initStorageEvent):

2017-10-23  Antti Koivisto  <antti@apple.com>

        Remember previous child renderer during render tree update
        https://bugs.webkit.org/show_bug.cgi?id=178659

        Reviewed by Zalan Bujtas.

        We shouldn't need to recompute the previous renderer, we know it already.

        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::previousSiblingRenderer const): Deleted.

            No longer needed. This was also subtly wrong as doesn't take display:contents into account.

        * style/RenderTreePosition.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::textRendererIsNeeded):

            Use the saved previous renderer.

        (WebCore::RenderTreeUpdater::updateTextRenderer):
        (WebCore::RenderTreeUpdater::storePreviousRenderer):

            Save the previous renderere as we walk the tree.

        (WebCore::textRendererIsNeeded): Deleted.
        * style/RenderTreeUpdater.h:

2017-10-23  Keith Miller  <keith_miller@apple.com>

        Add Shared Modules files to the unified source build.
        https://bugs.webkit.org/show_bug.cgi?id=178675

        Reviewed by Tim Horton.

        This patch all the Modules sources files shared across all ports to
        unified sources.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2017-10-22  Dean Jackson  <dino@apple.com>

        Implement drawImage(ImageBitmap) on 2d canvas
        https://bugs.webkit.org/show_bug.cgi?id=178653
        <rdar://problem/35104360>

        Reviewed by Antoine Quint.

        Implement CanvasRenderingContext2D::drawImage with ImageBitmap.
        It's probably not going to be a very common operation, but
        it importantly allows us to test the ImageBitmap creation
        code.

        Test: http/wpt/2dcontext/imagebitmap/drawImage-ImageBitmap.html

        * html/ImageBitmap.cpp:
        (WebCore::taintsOrigin): New helper function to determine if a
        CachedImage would provide a clean origin.
        (WebCore::ImageBitmap::createPromise): Set the flag that records
        if this ImageBitmap has a clean origin.
        * html/ImageBitmap.h:
        (WebCore::ImageBitmap::buffer): Exposes the ImageBuffer backing
        store, allowing access to the data for drawing.
        (WebCore::ImageBitmap::originClean const): Is this ImageBitmap
        going to taint a destination.
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin): Implement
        the ImageBitmap version of this template function.
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): Implement the
        actual drawing of an ImageBitmap.

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

        Unreviewed, rolling out r223699.

        Caused regressions with right-to-left text selection and
        painting of markers in flipped writing mode and in overlapping
        lines. Will investigate offline.

        Reverted changeset:

        "Share logic in InlineTextBox to compute selection rect"
        https://bugs.webkit.org/show_bug.cgi?id=178232
        https://trac.webkit.org/changeset/223699

2017-10-23  Youenn Fablet  <youenn@apple.com>

        Create a Fetch event when ServiceWorker has to handle a fetch
        https://bugs.webkit.org/show_bug.cgi?id=178491

        Reviewed by Chris Dumez.

        Covered by existing test.

        Updating FetchEvent to pass a FetchResponse* within its onResponse callback.
        Making it a CompletionHandler.
        Fixing a check on respondWith to ensure that event is dispatched when respondWith is called.

        Adding ServiceWorkerFetch class to handle the creation of the fetch event, waiting for the fetch event to be responded
        and processing when fetch event is responded.
        ServiceWorkerFetchTask takes a client to which will be sent the response body or the error.
        WebKit implementation of it will be to send the related IPC message back to the WebProcess that made the fetch request.

        Adding a method to ServiceWorkerThread to create the fetch event on worker thread and dispatch on the global scope.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceResponseBase.h:
        * testing/Internals.cpp:
        (WebCore::Internals::waitForFetchEventToFinish):
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::~FetchEvent):
        (WebCore::FetchEvent::respondWith):
        (WebCore::FetchEvent::onResponse):
        (WebCore::FetchEvent::respondWithError):
        (WebCore::FetchEvent::processResponse):
        (WebCore::FetchEvent::promiseIsSettled):
        * workers/service/FetchEvent.h:
        * workers/service/context/ServiceWorkerFetch.cpp: Added.
        (WebCore::ServiceWorkerFetch::dispatchFetchTask):
        (WebCore::ServiceWorkerFetch::processResponse):
        * workers/service/context/ServiceWorkerFetch.h: Added.
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::m_workerObjectProxy):
        (WebCore::ServiceWorkerThread::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerThread.h:

2017-10-23  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix authentication related bugs
        https://bugs.webkit.org/show_bug.cgi?id=178652

        Reviewed by Alex Christensen.

        * platform/network/curl/AuthenticationChallengeCurl.cpp:
        (WebCore::AuthenticationChallenge::protectionSpaceFromHandle):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::setHttpAuthUserPass):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setUserPass):
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::didReceiveHeader):
        * platform/network/curl/CurlRequest.h:

2017-10-23  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r223820.

        This caused a build break on Windows.

        Reverted changeset:

        "Web Inspector: Remove unused Console.setMonitoringXHREnabled"
        https://bugs.webkit.org/show_bug.cgi?id=178617
        https://trac.webkit.org/changeset/223820

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

        Call FrameView::scheduleSelectionUpdate when selection needs repainting after layout instead of setting the RenderView dirty.
        https://bugs.webkit.org/show_bug.cgi?id=178651
        <rdar://problem/35117448>

        Reviewed by Antti Koivisto.

        Calling setNeedsLayout() on the RenderView to trigger selection update is problematic in 2 different ways:
        1. marking the root renderer dirty does not trigger layout (this is very specific to the root,
        other renderers do trigger layout). It means that it works as long as someone else schedules a layout.
        2. when a subtree layout is already scheduled and we mark the root renderer dirty, the root gets stuck with
        the dirty flag (since the entry point for the subsequent layout is a descendant of the root and not the root itself).

        This patch addresses these issues by scheduling/converting subtree layout when needed.  

        Covered by fast/dynamic/remove-invisible-node-inside-selection.html/remove-node-inside-selection.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::respondToNodeModification):
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleSelectionUpdate):
        * page/FrameView.h:

2017-10-23  Miguel Gomez  <magomez@igalia.com>

        [TexMap] Remove GraphicsContext3D usage from TextureMapperShaderProgram
        https://bugs.webkit.org/show_bug.cgi?id=175425

        Reviewed by Žan Doberšek.

        Remove usage of the GraphicsContext3D class in TextureMapperShaderProgram.
        Direct OpenGL API calls, types and constants are used instead.

        By removing GraphicsContext3D, we don't use ANGLE anymore to perform the
        shader adaptation to the used OpenGL/GLES2 version, so we need to do that
        inside TextureMapperShaderProgram. The main changes required for this are
        adding the #version directive and use in/out to define input/output parameters
        when using OpenGL >= 3.2, and defining the default precision only when using
        GLES2.

        Besides that, now that VideoTextureCopierGStreamer doesn't have its own
        GraphicsContext3D, we need to add a VAO to it when using OpenGL >= 3.2.

        Based on a previous patch by Žan Doberšek <zdobersek@igalia.com>.

        No behavior change.

        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::~VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::getShaderProgram):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawFiltered):
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::create):
        (WebCore::getShaderLog):
        (WebCore::getProgramLog):
        (WebCore::TextureMapperShaderProgram::TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgram::~TextureMapperShaderProgram):
        (WebCore::TextureMapperShaderProgram::setMatrix):
        (WebCore::TextureMapperShaderProgram::getLocation):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:
        (WebCore::TextureMapperShaderProgram::programID const):

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

        [Settings] Replace current Settings generation with template file based approach
        https://bugs.webkit.org/show_bug.cgi?id=178634

        Reviewed by Joseph Pecoraro.

        This replaces the recently added python based Settings generation with a generator
        built in ruby, so we can take advantage of ERB for templating. The result has much
        of the logic in the templates and as a result feels much easier to follow and cleaner.

        Since I was moving things to ruby, I took the opertunity to switch the Settings definition
        file from our .in format to yaml, which is quite a bit easier to read.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Scripts/GenerateSettings: Removed.
        * Scripts/GenerateSettings.py: Removed.
        * Scripts/GenerateSettings.rb: Added.
        * Scripts/GenerateSettings/GenerateInternalSettingsHeaderFile.py: Removed.
        * Scripts/GenerateSettings/GenerateInternalSettingsIDLFile.py: Removed.
        * Scripts/GenerateSettings/GenerateInternalSettingsImplementationFile.py: Removed.
        * Scripts/GenerateSettings/GenerateSettings.py: Removed.
        * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py: Removed.
        * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py: Removed.
        * Scripts/GenerateSettings/Settings.py: Removed.
        * Scripts/GenerateSettings/__init__.py: Removed.
        * Scripts/SettingsTemplates: Added.
        * Scripts/SettingsTemplates/InternalSettingsGenerated.cpp.erb: Added.
        * Scripts/SettingsTemplates/InternalSettingsGenerated.h.erb: Added.
        * Scripts/SettingsTemplates/InternalSettingsGenerated.idl.erb: Added.
        * Scripts/SettingsTemplates/Settings.cpp.erb: Added.
        * Scripts/SettingsTemplates/Settings.h.erb: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreMacros.cmake:
        * page/Settings.in: Removed.
        * page/Settings.yaml: Added.

2017-10-22  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r219675): Web Inspector: CommandLineAPI getEventListeners does not work
        https://bugs.webkit.org/show_bug.cgi?id=178650
        <rdar://problem/35116347>

        Reviewed by Sam Weinig.

        Test: inspector/console/command-line-api-getEventListeners.html

        * inspector/CommandLineAPIHost.cpp:
        (WebCore::listenerEntriesFromListenerInfo):
        Fix typo.

        (WebCore::CommandLineAPIHost::getEventListeners):
        Fix incorrect early return.

        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIHost.idl:
        Add more attributes about the listener. These new attributes match output from Chrome.

2017-10-22  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add animations to the timeline
        https://bugs.webkit.org/show_bug.cgi?id=178643

        Reviewed by Dean Jackson.

        If a timeline is provided as a parameter to the Animation constructor,
        add it to the timeline, and remove it when the object is destroyed.

        We also start the basic mechanism to dump the contents of a timeline
        as text for testing purposes, currently only logging the number of
        animations in a timeline and just logging the class name for animation
        themselves.

        Test: webanimations/animation-creation-addition.html

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::description):
        * animation/AnimationTimeline.h:
        * animation/AnimationTimeline.idl:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::~WebAnimation):
        (WebCore::WebAnimation::description):
        * animation/WebAnimation.h:
        * testing/Internals.cpp:
        (WebCore::Internals::timelineDescription):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        [FrameView::layout cleanup] Drop allowSubtree parameter
        https://bugs.webkit.org/show_bug.cgi?id=178623
        <rdar://problem/35111012>

        Reviewed by Sam Weinig.

        This flag is only set through ::forceLayout(). Let's just convert the subtree layout
        to full layout right before calling ::layout().

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::handleLayoutWithFrameFlatteningIfNeeded):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded):
        (WebCore::FrameView::forceLayout):
        * page/FrameView.h:

2017-10-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused Console.setMonitoringXHREnabled
        https://bugs.webkit.org/show_bug.cgi?id=178617

        Reviewed by Sam Weinig.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::setMonitoringXHREnabled): Deleted.
        (WebCore::WebConsoleAgent::didFinishXHRLoading): Deleted.
        * inspector/WebConsoleAgent.h:
        Remove XHR monitoring code.

        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::setLastSendLineAndColumnNumber): Deleted.
        * xml/XMLHttpRequest.idl:
        Remove now unused state on XHR and ExecState requirement for send().

2017-10-21  Dean Jackson  <dino@apple.com>

        createImageBitmap with basic HTMLImageElement
        https://bugs.webkit.org/show_bug.cgi?id=178619
        <rdar://problem/35104118>

        Reviewed by Antoine Quint.

        Implement the basic infrastructure for creating
        an ImageBitmap from an HTMLImageElement.

        Test: http/wpt/2dcontext/imagebitmap/createImageBitmap.html

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise): Create the image buffer
        and draw the image into its backing store.
        * html/ImageBitmap.h:

2017-10-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add bindings to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178620

        Reviewed by Dean Jackson.

        Removing the Web Animations bindings from the WebCore target and adding them to the unified sources list instead.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Fix the Mac CMake build

        * PlatformMac.cmake:

2017-10-21  Antti Koivisto  <antti@apple.com>

        Support ::before/::after pseudo elements with display:contents
        https://bugs.webkit.org/show_bug.cgi?id=178584

        Reviewed by Ryosuke Niwa.

        This is cases like

        ::before { display:contents; content:'foo' }

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustDisplayContentsStyle): Added.

            Allow display:contents on pseudo elements.
            Factor into function.

        (WebCore::StyleResolver::adjustRenderStyle):
        * dom/PseudoElement.h:

            Add a weak vector of content renderers.

        * style/RenderTreePosition.h:
        (WebCore::RenderTreePosition::moveToLastChild):

            Add a way to set a valid render tree position without a node.

        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::createContentRenderers):

            Take RenderTreePosition.

        (WebCore::updateStyleForContentRenderers):

            Update based on the content renderer vector instead of doing a tree walk.

        (WebCore::removeAndDestroyContentRenderers):

            Helper for destroying content renderers.

        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):

            In the normal case create a render tree position for the pseudo element renderer and
            use RenderTreePosition::moveToLastChild to make it a valid position. (The existing
            RenderTreePosition interface didn't have way to move to positions in anonymous boxes)

            In the case of a non box generating display:contents pseudo element, use the current
            render tree position instead.

            Ensure that pseudo element renderers are destroyed before creating the new ones since in
            display:contents case they are not descendants of the pseudo renderer and don't get cleared
            automatically.

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

        [FrameView::layout cleanup] Use SetForScope to ensure layout state correctness
        https://bugs.webkit.org/show_bug.cgi?id=178604
        <rdar://problem/35101890>

        Reviewed by Simon Fraser.

        SetForScope guarantees state correctness even with nested layouts. This is a lot less
        error prone than resetting the state value after each potential recursive call.

        Covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::handleDeferredScrollbarsUpdateAfterDirectionChange): This layout state does
        not look too useful.
        (WebCore::FrameView::layout):
        * page/FrameView.h: While performPostLayoutTasks() is somewhat special since it can either be sync or async,
        so painting should be allowed in both cases.

2017-10-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGPathElement should cache the built-up Path of its non animating pathByteStream()
        https://bugs.webkit.org/show_bug.cgi?id=178248

        Reviewed by Simon Fraser.

        Instead of creating a Path object from the non animating pathByteStream()
        every time we need to updatePathFromPathElement(), the Path object can be
        cached once it is created and used for later calls.

        * html/canvas/Path2D.h: buildPathFromString() now returns a Path.

        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        Define the move constructor and the move assignment operator for the the
        Path class so a statement like "Path path = buildPathFromString()" won't 
        go through the copy constructor and the copy assignment operator.

        * rendering/style/BasicShapes.cpp:
        (WebCore::SVGPathTranslatedByteStream::path const):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::updateShapeFromElement):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath const):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::pathFromCircleElement):
        (WebCore::pathFromEllipseElement):
        (WebCore::pathFromLineElement):
        (WebCore::pathFromPathElement):
        (WebCore::pathFromPolygonElement):
        (WebCore::pathFromPolylineElement):
        (WebCore::pathFromRectElement):
        (WebCore::pathFromGraphicsElement):
        (WebCore::updatePathFromCircleElement): Deleted.
        (WebCore::updatePathFromEllipseElement): Deleted.
        (WebCore::updatePathFromLineElement): Deleted.
        (WebCore::updatePathFromPathElement): Deleted.
        (WebCore::updatePathFromPolygonElement): Deleted.
        (WebCore::updatePathFromPolylineElement): Deleted.
        (WebCore::updatePathFromRectElement): Deleted.
        (WebCore::updatePathFromGraphicsElement): Deleted.
        * rendering/svg/SVGPathData.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseAttribute):
        (WebCore::SVGAnimateMotionElement::updateAnimationPath):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::toClipPath):
        * svg/SVGGraphicsElement.h:
        Rename updatePathFromElement() to pathFromGraphicsElement().

        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseAttribute): Clear the cache when
        m_pathByteStream changes.
        (WebCore::SVGPathElement::pathForByteStream const): Caches the m_cachedPath
        if it is null.
        (WebCore::SVGPathElement::pathSegListChanged): Clear the cache when
        m_pathByteStream changes.

        * svg/SVGPathElement.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::buildPathFromString):
        (WebCore::buildPathFromByteStream):
        * svg/SVGPathUtilities.h:
        Make thes buildPathFromString() and buildPathFromByteStream() return Paths.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):
        * svg/SVGUseElement.h:
        Make these toClipPath() return Path.

2017-10-20  Ryosuke Niwa  <rniwa@webkit.org>

        Rename insertedInto and removedFrom to insertedIntoAncestor and removedFromAncestor
        https://bugs.webkit.org/show_bug.cgi?id=178605

        Reviewed by Andy Estes.

        Renamed insertedInto and removedFrom to insertedIntoAncestor and removedFromAncestor respectively
        to make it clear that these functions can be called even when node's immediate parent didn't change.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyNodeInsertedIntoDocument):
        (WebCore::notifyNodeInsertedIntoTree):
        (WebCore::notifyNodeRemovedFromDocument):
        (WebCore::notifyNodeRemovedFromTree):
        (WebCore::notifyChildNodeRemoved):
        * dom/ContainerNodeAlgorithms.h:
        * dom/Element.cpp:
        (WebCore::Element::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::Element::removedFromAncestor): Renamed from removedFrom.
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::insertedIntoAncestor): 
        (WebCore::Node::removedFromAncestor):
        (WebCore::Node::removedFrom): Deleted.
        * dom/Node.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::ProcessingInstruction::removedFromAncestor): Renamed from removedFrom.
        * dom/ProcessingInstruction.h:
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::insertedIntoAncestor const): Renamed from insertedInto.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::ShadowRoot::removedFromAncestor): Renamed from removedFrom.
        * dom/ShadowRoot.h:
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::FormAssociatedElement::removedFromAncestor): Renamed from removedFrom.
        * html/FormAssociatedElement.h:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLBaseElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedIntoAncestor): Renamed from insertedInto.
        * html/HTMLBodyElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLFormControlElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLFormControlElementWithState::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLFormElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLFormElement.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::insertedIntoAncestor): Renamed from insertedInto.
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLFrameSetElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLFrameSetElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLImageElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLInputElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLLinkElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLMapElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLMapElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLMediaElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLMediaElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::insertedIntoAncestor): Renamed from insertedInto.
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLObjectElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLObjectElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::insertedIntoAncestor): Renamed from insertedInto.
        * html/HTMLOptionElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedIntoAncestor): Renamed from insertedInto.
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::insertedIntoAncestor): Renamed from insertedInto.
        * html/HTMLSelectElement.h:
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLSlotElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLSlotElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLSourceElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLStyleElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLStyleElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedIntoAncestor): Renamed from insertedInto.
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLTitleElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::HTMLTrackElement::removedFromAncestor): Renamed from removedFrom.
        * html/HTMLTrackElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removedFromAncestor): Renamed from removedFrom.
        (WebCore::SVGElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGElement::updateRelativeLengthsInformation):
        * svg/SVGElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGFEImageElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGFontFaceElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::insertedIntoAncestor): Renamed from insertedInto.
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::insertedIntoAncestor): Renamed from insertedInto.
        * svg/SVGImageElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGMPathElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGMPathElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGPathElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGPathElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGSVGElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::insertedIntoAncestor): Renamed from insertedInto.
        * svg/SVGScriptElement.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGStyleElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGStyleElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::buildPendingResource):
        (WebCore::SVGTRefElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGTRefElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGTextPathElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGTitleElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGUseElement::removedFromAncestor): Renamed from removedFrom.
        * svg/SVGUseElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoAncestor): Renamed from insertedInto.
        (WebCore::SVGSMILElement::removedFromAncestor): Renamed from removedFrom.
        * svg/animation/SVGSMILElement.h:

2017-10-20  Ryosuke Niwa  <rniwa@webkit.org>

        Fix conditions in HTMLSourceElement and HTMLTrackElement's insertedInto and removedFrom
        https://bugs.webkit.org/show_bug.cgi?id=178607

        Reviewed by Eric Carlson.

        Fixed the conditions in insertedInto and removedFrom of HTMLSourceElement and HTMLTrackElement to be
        semantically sensisble. Since these elements are only functional when their immediate parents are
        HTMLMediaElement and HTMLPictureElement, we have to check that its immediate parent changed, not when
        some of its ancestor had changed by insertion or removal.

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedInto):
        (WebCore::HTMLSourceElement::removedFrom):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedInto):
        (WebCore::HTMLTrackElement::removedFrom):

2017-10-20  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix windows build.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Use "= default" for more default constructors and destructors in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=178585

        Reviewed by Alex Christensen.

        Also remove some destructors that would be implicitly generated.

        * Modules/applepay/PaymentMerchantSession.h:
        (WebCore::PaymentMerchantSession::~PaymentMerchantSession): Deleted.
        * platform/ControlStates.h:
        (WebCore::ControlStates::~ControlStates): Deleted.
        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::~PlatformEvent): Use default.
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::PlatformStrategies): Ditto.
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameContext::GIFFrameContext):
        (GIFFrameContext::~GIFFrameContext): Deleted.
        (GIFImageReader::~GIFImageReader): Deleted.
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::~RenderBlockFlowRareData): Deleted.

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

        [FrameView::layout cleanup] Scheduling layout should be disabled for FrameView::layout
        https://bugs.webkit.org/show_bug.cgi?id=178562
        <rdar://problem/35089015>

        Reviewed by Simon Fraser.

        This patch extends the scope of m_layoutSchedulingEnabled. Now layout scheduling is disabled for the entire FrameView::layout(). 
        A scheduled layout at the end of FrameView::layout would indicated dirty tree (which is against FrameView::layout's contract).

        Covered by existing tests.

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

2017-10-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        When destroying a resource, register "only" the clients who are losing their resource as having pending resources
        https://bugs.webkit.org/show_bug.cgi?id=178567
        <rdar://problem/35064781>

        Reviewed by Simon Fraser.

        SVGResources::resourceDestroyed() will return a bool indicating whether 
        it had a reference to the destroyed resource or not. If it returns true
        SVGResourcesCache::resourceDestroyed() will register the client Element
        as having pending resources.

        * rendering/svg/SVGResources.cpp:
        (WebCore::paintingResourceFromSVGPaint):
        (WebCore::SVGResources::removeClientFromCache const):
        (WebCore::SVGResources::resourceDestroyed):
        (WebCore::SVGResources::buildSetOfResources):
        (WebCore::SVGResources::resetClipper):
        (WebCore::SVGResources::resetFilter):
        (WebCore::SVGResources::resetMarkerStart):
        (WebCore::SVGResources::resetMarkerMid):
        (WebCore::SVGResources::resetMarkerEnd):
        (WebCore::SVGResources::resetMasker):
        (WebCore::SVGResources::resetFill):
        (WebCore::SVGResources::resetStroke):
        (WebCore::SVGResources::resetLinkedResource):
        * rendering/svg/SVGResources.h:
        (WebCore::SVGResources::isEmpty const):
        (WebCore::SVGResources::ClipperFilterMaskerData::ClipperFilterMaskerData): Deleted.
        (WebCore::SVGResources::MarkerData::MarkerData): Deleted.
        (WebCore::SVGResources::FillStrokeData::FillStrokeData): Deleted.
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::resourceDestroyed):

2017-10-20  Ryosuke Niwa  <rniwa@webkit.org>

        Unify the node removal code in ContainerNode and expand the coverage of NoEventDispatchAssertion
        https://bugs.webkit.org/show_bug.cgi?id=178568

        Reviewed by Antti Koivisto.

        Consolidated the code to remove a child node in ContainerNode into removeAllChildrenWithScriptAssertion
        and removeNodeWithScriptAssertion to share code and make the semantics of when it becomes unsafe to run scripts.

        Also renamed getChildNodes to collectChildNodes, and made it return NodeVector instead of taking an out argument.

        No new tests since there should be no behavioral changes.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion): Added.
        (WebCore::ContainerNode::removeNodeWithScriptAssertion): Added.
        (WebCore::collectChildrenAndRemoveFromOldParent):
        (WebCore::ContainerNode::takeAllChildrenFrom): Deployed removeAllChildrenWithScriptAssertion.
        (WebCore::ContainerNode::notifyChildRemoved): Deleted. Merged into removeNodeWithScriptAssertion.
        (WebCore::willRemoveChild): Deleted. Ditto.
        (WebCore::willRemoveChildren): Deleted. Merged into removeAllChildrenWithScriptAssertion.
        (WebCore::ContainerNode::removeChild): Deployed removeNodeWithScriptAssertion.
        (WebCore::ContainerNode::parserRemoveChild): Ditto.
        (WebCore::ContainerNode::replaceAllChildren): Deployed removeAllChildrenWithScriptAssertion. Now removes the node
        outside executeNodeInsertionWithScriptAssertion but that's okay since executeNodeInsertionWithScriptAssertion
        doesn't execute any code with a side effect before invoking the callback.
        (WebCore::ContainerNode::removeChildren):
        (WebCore::dispatchChildRemovalEvents): Refactored to take Ref<Node>&.
        * dom/ContainerNode.h:
        (WebCore::collectChildNodes): Renamed from getChildNodes. Also removed the useless comment about NodeVector's
        initial size and instead prefer to webkit.org/b/80706 where the number 11 was picked.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearShadowTree): Added an assertion exception while tearing down the UA shadow tree.

2017-10-20  Youenn Fablet  <youenn@apple.com>

        ResourceResponse should have a ServiceWorker source
        https://bugs.webkit.org/show_bug.cgi?id=178593

        Reviewed by Alex Christensen.

        Covered by updated tests.

        Added ResourceResponse::Source::ServiceWorker.
        Added internals to get FetchResponse source.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::responseSource):
        * loader/ResourceLoader.cpp:
        (WebCore::logResourceResponseSource):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::serviceWorkerKey):
        * page/DiagnosticLoggingKeys.h:
        * platform/network/ResourceResponseBase.h:
        * testing/Internals.cpp:
        (WebCore::responseSourceToString):
        (WebCore::Internals::fetchResponseSource):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-10-20  Andy Estes  <aestes@apple.com>

        Generated serializers do not properly handle optional interface attributes
        https://bugs.webkit.org/show_bug.cgi?id=178542

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerDefinition):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerialization::serialize):

2017-10-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Provide basic timeline and animation interfaces
        https://bugs.webkit.org/show_bug.cgi?id=178526

        Reviewed by Dean Jackson.

        We're getting Web Animations work started by implementing a very minimal codebase which provides
        a DocumentTimeline class which has an instance created for each Document. The parent class,
        AnimationTimeline, allows for animations to be added and removed, and animations can be created
        using the Animation class, with an optional timeline as parameter.

        Tests: webanimations/animation-creation-basic.html
               webanimations/document-timeline.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationTimeline.cpp: Added.
        (WebCore::AnimationTimeline::AnimationTimeline):
        (WebCore::AnimationTimeline::~AnimationTimeline):
        (WebCore::AnimationTimeline::addAnimation):
        (WebCore::AnimationTimeline::removeAnimation):
        * animation/AnimationTimeline.h: Added.
        (WebCore::AnimationTimeline::isDocumentTimeline const):
        (WebCore::AnimationTimeline::classType const):
        * animation/AnimationTimeline.idl: Added.
        * animation/DocumentTimeline.cpp: Added.
        (WebCore::DocumentTimeline::create):
        (WebCore::DocumentTimeline::DocumentTimeline):
        * animation/DocumentTimeline.h: Added.
        * animation/DocumentTimeline.idl: Added.
        * animation/WebAnimation.cpp: Added.
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::WebAnimation):
        (WebCore::WebAnimation::~WebAnimation):
        * animation/WebAnimation.h: Added.
        * animation/WebAnimation.idl: Added.
        * bindings/js/JSAnimationTimelineCustom.cpp: Added.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::timeline):
        * dom/Document.h:
        * dom/Document.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webAnimationsEnabled const):

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

        Unreviewed, rolling out r223744, r223750, and r223751.
        https://bugs.webkit.org/show_bug.cgi?id=178594

        These caused consistent failures in test that existed and were
        added in the patches. (Requested by mlewis13 on #webkit).

        Reverted changesets:

        "[JSC] ScriptFetcher should be notified directly from module
        pipeline"
        https://bugs.webkit.org/show_bug.cgi?id=178340
        https://trac.webkit.org/changeset/223744

        "Unreviewed, fix changed line number in test expect files"
        https://bugs.webkit.org/show_bug.cgi?id=178340
        https://trac.webkit.org/changeset/223750

        "Unreviewed, follow up to reflect comments"
        https://bugs.webkit.org/show_bug.cgi?id=178340
        https://trac.webkit.org/changeset/223751

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

        [FrameView::layout cleanup] Move can-enter-layout logic to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=178546
        <rdar://problem/35083894>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::canPerformLayout const):
        (WebCore::FrameView::layout): We already assert on certain reentrancy conditions, loggig the reason
        does not seem to have high value.
        * page/FrameView.h:

2017-10-20  Dean Jackson  <dino@apple.com>

        Add createImageBitmap to Window and Worker
        https://bugs.webkit.org/show_bug.cgi?id=178573
        <rdar://problem/35092692>

        Reviewed by Sam Weinig.

        Implement the createImageBitmap functions that are exposed on the Window
        and Worker objects.

        Covered by the Web Platform Tests.

        * html/ImageBitmap.cpp: Make sure to call suspendIfNeeded since this is
        an ActiveDOMObject.
        * html/ImageBitmap.h: Change the order of the classes in the Variant
        to match the order of definitions in the IDL.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createImageBitmap): Call ImageBitmap::createPromise.
        * page/DOMWindow.h:
        * page/WindowOrWorkerGlobalScope.idl: Add the createImageBitmap methods.
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::createImageBitmap): Call ImageBitmap::createPromise.
        * workers/WorkerGlobalScope.h:

2017-10-20  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Events missing and state incorrect for aria-activedescendant
        https://bugs.webkit.org/show_bug.cgi?id=178523

        Reviewed by Chris Fleizach.

        When the aria-activedescendant of an element changes, emit object:state-changed:focused.
        When a focused element has a valid active descendant, do not expose the focused state on
        the element, but rather on the active descendant. Also expose the focusable state on the
        active descendant.

        Tests: accessibility/gtk/aria-activedescendant-changed-notification.html
               accessibility/gtk/aria-activedescendant.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isActiveDescendantOfFocusedContainer const):
        (WebCore::AccessibilityObject::ariaActiveDescendantReferencingElements const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::shouldNotifyActiveDescendant const):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2017-10-20  Ms2ger  <Ms2ger@igalia.com>

        Add the MAX_CLIENT_WAIT_TIMEOUT_WEBGL constant to WebGL2RenderingContext.
        https://bugs.webkit.org/show_bug.cgi?id=178572

        Reviewed by Žan Doberšek.

        Test: fast/canvas/webgl/webgl2/constants.html

        * html/canvas/WebGL2RenderingContext.idl:

2017-10-20  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Fix review comments on WEBPImageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=178080

        Reviewed by Said Abou-Hallawa.

        Properly free the demuxer in case of error, improve the code to detect the first
        required frame to decode, fix the usage of the DecodingStatus and some styling
        changes.

        Covered by existent tests.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::webpFrameAtIndex):
        (WebCore::WEBPImageDecoder::findFirstRequiredFrameToDecode):
        (WebCore::WEBPImageDecoder::decode):
        (WebCore::WEBPImageDecoder::decodeFrame):
        (WebCore::WEBPImageDecoder::initFrameBuffer):
        (WebCore::WEBPImageDecoder::clearFrameBufferCache):

2017-10-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Clean up old style code in old curl files.
        https://bugs.webkit.org/show_bug.cgi?id=178569

        Reviewed by Ryosuke Niwa.

        * platform/network/curl/AuthenticationChallenge.h:
        * platform/network/curl/CertificateInfo.h:
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/CurlCacheEntry.h:
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::singleton):
        (WebCore::CurlCacheManager::getInstance): Deleted.
        * platform/network/curl/CurlCacheManager.h:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::singleton):
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::singleton): Deleted.
        * platform/network/curl/CurlJobManager.cpp:
        (WebCore::CurlJobManager::singleton):
        * platform/network/curl/CurlJobManager.h:
        (WebCore::CurlJobManager::singleton): Deleted.
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/CurlRequestDelegate.h:
        * platform/network/curl/CurlResponse.h:
        (WebCore::CurlResponse::isolatedCopy const):
        * platform/network/curl/CurlSSLHandle.h:
        * platform/network/curl/CurlSSLVerifier.h:
        * platform/network/curl/DownloadBundle.h:
        * platform/network/curl/MultipartHandle.h:
        * platform/network/curl/ResourceError.h:
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::createCurlRequest):
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveBuffer):
        (WebCore::ResourceHandleCurlDelegate::curlDidComplete):
        (WebCore::ResourceHandleCurlDelegate::curlDidFailWithError):
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
        (WebCore::ResourceRequest::cfURLRequest const):
        (WebCore::ResourceRequest::httpPipeliningEnabled):
        (WebCore::ResourceRequest::setHTTPPipeliningEnabled):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceHTTPBody):
        (WebCore::ResourceRequest::doPlatformSetAsIsolatedCopy):
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::isAppendableHeader):
        (WebCore::ResourceResponse::ResourceResponse):

2017-10-20  Frederic Wang  <fwang@igalia.com>

        RenderLayerCompositor: Move implementation of simple methods into the header file.
        https://bugs.webkit.org/show_bug.cgi?id=178514

        Reviewed by Darin Adler.

        No new tests, behavior unchanged.

2017-10-19  Antti Koivisto  <antti@apple.com>

        Support ::before/::after pseudo elements on elements with display:contents
        https://bugs.webkit.org/show_bug.cgi?id=178513

        Reviewed by Ryosuke Niwa.

        Add support for

            div { display:contents }
            div::after { content:'foo' }

        That is support non-box generating elements with generated content.

        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::nextSiblingRenderer const):

            Implement full pseudo-inclusive traversal starting from any element (including pseudo)
            to locate the next rendering sibling. In case of display:content this may need to look
            into descendants.

        * style/RenderTreeUpdater.cpp:
        (WebCore::textRendererIsNeeded):

            RenderTreePosition::nextSiblingRenderer can no longer be called with a node that already has a renderer.
            Maintain the existing behavior.

        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::needsPseudoElement):

            Don't require for host to have a renderer.

        * style/RenderTreeUpdaterGeneratedContent.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

2017-10-20  Keith Miller  <keith_miller@apple.com>

        Move common bindings files to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=178561

        Rubber-stamped by Ryosuke Niwa.

        This patch moves most of the common bindings files to unified sources.

        Additionally, it adds a change to make_names to unique a struct
        name that caused name conflicts that I missed when I made the
        source changes before.

        Lastly, add missing reference to WebCoreJSBuiltins.cpp in CMake build.

        No new behavior no tests.

        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/make_names.pl:
        (printFactoryCppFile):

2017-10-20  Saam Barati  <sbarati@apple.com>

        Optimize accesses to how we get the direct prototype
        https://bugs.webkit.org/show_bug.cgi?id=178548

        Reviewed by Yusuke Suzuki.

        No new tests: no functionality change.

        * bindings/js/JSDOMAbstractOperations.h:
        (WebCore::isVisibleNamedProperty):
        (WebCore::accessVisibleNamedProperty):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::JSDOMWindowProperties::getOwnPropertySlot):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementCustomGetOwnPropertySlot):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GeneratePutByIndex):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObjectConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::put):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::put):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::put):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifier::put):
        (WebCore::JSTestNamedSetterNoIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingException::put):
        (WebCore::JSTestNamedSetterThrowingException::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifier::put):
        (WebCore::JSTestNamedSetterWithIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetter::put):
        (WebCore::JSTestNamedSetterWithIndexedGetter::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::put):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgableProperties::put):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::putByIndex):

2017-10-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] ScriptFetcher should be notified directly from module pipeline
        https://bugs.webkit.org/show_bug.cgi?id=178340

        Reviewed by Sam Weinig.

        No behavior change.

        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::loadModule):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::jsValueToModuleKey): Deleted.
        (WebCore::ScriptController::setupModuleScriptHandlers): Deleted.
        * bindings/js/ScriptController.h:
        * dom/LoadableModuleScript.cpp:
        (WebCore::LoadableModuleScript::notifyLoadFailed):
        * dom/LoadableModuleScript.h:

2017-10-19  Ms2ger  <Ms2ger@igalia.com>

        Remove proprietary constants from WebGL2RenderingContext.
        https://bugs.webkit.org/show_bug.cgi?id=178511

        Reviewed by Ryosuke Niwa.

        As far as I can tell, these constants are not in the specification,
        and no other browser supports them.

        No new tests: just code removal.

        * html/canvas/WebGL2RenderingContext.idl:

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

        [FrameView::layout cleanup] Move style update related logic to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=178558
        <rdar://problem/35088218>

        Reviewed by Simon Fraser.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::ensureStyleIsUpToDateForLayout):
        (WebCore::FrameView::layout):
        * page/FrameView.h:

2017-10-19  JF Bastien  <jfbastien@apple.com>

        WebAssembly: no VM / JS version of everything but Instance
        https://bugs.webkit.org/show_bug.cgi?id=177473

        Reviewed by Filip Pizlo, Saam Barati.

        * ForwardingHeaders/wasm/WasmModule.h: Added. This used to be
        included in JSWebAssemblyModule.h.
        * bindings/js/SerializedScriptValue.cpp: Update postMessage code
        according to C++ API changes.

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

        SerializedScriptValue passed to postMessage() cannot be null
        https://bugs.webkit.org/show_bug.cgi?id=178550

        Reviewed by Youenn Fablet.

        SerializedScriptValue passed to postMessage() cannot be null. Therefore, we
        should use Ref<> type, not RefPtr<>.

        * dom/MessagePortChannel.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::postMessageToRemote):
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        * workers/service/context/ServiceWorkerThread.cpp:

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

        Use "= default" to denote default constructor or destructor
        https://bugs.webkit.org/show_bug.cgi?id=178528

        Rubber-stamped by Andy Estes.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        * Modules/applepay/ApplePayError.cpp:
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp:
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.cpp:
        * Modules/applepay/ApplePaySession.cpp:
        * Modules/applepay/ApplePaySessionPaymentRequest.cpp:
        * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp:
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp:
        * Modules/applepay/ApplePayValidateMerchantEvent.cpp:
        * Modules/applepay/Payment.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/credentials/BasicCredential.cpp:
        * Modules/credentials/FederatedCredential.cpp:
        * Modules/credentials/NavigatorCredentials.cpp:
        * Modules/credentials/PasswordCredential.cpp:
        * Modules/encryptedmedia/CDMClient.h:
        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        * Modules/encryptedmedia/legacy/LegacyCDMPrivate.h:
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.h:
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.h:
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp:
        * Modules/entriesapi/DOMFileSystem.cpp:
        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        * Modules/entriesapi/FileSystemEntry.cpp:
        * Modules/fetch/FetchLoaderClient.h:
        * Modules/gamepad/Gamepad.cpp:
        * Modules/gamepad/GamepadEvent.h:
        * Modules/gamepad/deprecated/Gamepad.cpp:
        [ truncated ]

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

        [Bindings] Standardize on DOMPromise as the way to store passed in promises
        https://bugs.webkit.org/show_bug.cgi?id=178533

        Reviewed by Youenn Fablet.

        This standardizes on RefPtr<DOMPromise> as the canonical way to store a promise
        that has been passed in from JS. This does not change promises that start off in
        WebCore and are passed to JS; they remain using DOMPromiseDeferred and DOMPromiseProxy.

        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h:
        * dom/PromiseRejectionEvent.cpp:
        * dom/PromiseRejectionEvent.h:
        * dom/RejectedPromiseTracker.cpp:

            Use a RefPtr<DOMPromise> rather than a JSPromise* to hold onto the promise.

        * bindings/IDLTypes.h:

            Use IDLWrapper to get better defaults, since DOMPromise is refcounted.

        * bindings/js/JSDOMConvertPromise.h:
        (WebCore::Converter<IDLPromise<T>>::convert):

            Switch default conversion to return a RefPtr<DOMPromise> rather than a JSPromise*

        (WebCore::JSConverter<IDLPromise<T>>::convert):

            Add support for converting from a DOMPromise to a JSValue.

        * bindings/js/JSDOMPromise.cpp:
        * bindings/js/JSDOMPromise.h:
        (WebCore::DOMPromise::create): Deleted.

            Remove now unused constructor.    

        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::waitUntil):
        * workers/service/ExtendableEvent.h:
        * workers/service/ExtendableEvent.idl:
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::respondWith):
        (WebCore::FetchEvent::promiseIsSettled):
        * workers/service/FetchEvent.h:
        * workers/service/FetchEvent.idl:

            Address FIXMEs and remove need for passing an ExecState to ExtendableEvent
            and FetchEvent by using the new default conversion to DOMPromise.

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

        [Settings] Move global settings into their own file
        https://bugs.webkit.org/show_bug.cgi?id=178512

        Reviewed by Darin Adler.

        Moves all global settigns out of SettingsBase and into the new DeprecatedGlobalSettings.
        It's called DeprecatedGlobalSettings to indicate that this is an anti-pattern we would
        like to discourage, as WebCore can operate in a process with multiple clients, each of
        which should be able to set their own preferences.

        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:

            Add new files.
        
        * page/DeprecatedGlobalSettings.cpp: Copied from Source/WebCore/page/SettingsBase.cpp.
        * page/DeprecatedGlobalSettings.h: Copied from Source/WebCore/page/SettingsBase.h.
        * page/SettingsBase.cpp:
        * page/SettingsBase.h:
        
            Move all global settings out of SettingsBase and into the new DeprecatedGlobalSettings.
        
        * Modules/mediastream/UserMediaRequest.cpp:
        * bindings/js/CommonVM.cpp:
        * css/CSSStyleDeclaration.cpp:
        * dom/DataTransfer.cpp:
        * dom/DataTransferItemList.cpp:
        * editing/Editor.cpp:
        * loader/ResourceLoadObserver.cpp:
        * page/FrameView.cpp:
        * page/PerformanceMonitor.cpp:
        * platform/ScrollbarTheme.cpp:
        (WebCore::ScrollbarTheme::theme):
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/mac/NSScrollerImpDetails.mm:
        * platform/mock/ScrollbarThemeMock.cpp:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        * platform/network/ios/NetworkStateNotifierIOS.mm:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        * platform/win/MainThreadSharedTimerWin.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderListBox.cpp:
        * testing/InternalSettings.cpp:
        * testing/Internals.cpp:

            Update users of global settings to reference the new class name.

2017-10-19  Youenn Fablet  <youenn@apple.com>

        Add preliminary support for ServiceWorker Handle Fetch
        https://bugs.webkit.org/show_bug.cgi?id=178475
        <rdar://problem/35066424>

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/basic-fetch.https.html

        Adding parameters to allow WebKit to do loading through Service Worker or through regular networking.
        A script context is now storing its selected service worker identifier. This should be fully implemented later on.
        This selected service worker identifier is passed to loading code as a ResourceLoaderOptions field.
        Service workers mode is also added as a ResourceLoaderOptions field so that the service worker can be bypassed.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::selectedServiceWorkerIdentifier const):
        (WebCore::ScriptExecutionContext::setSelectedServiceWorkerIdentifier):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * loader/FetchOptions.h:
        (WebCore::isPotentialNavigationOrSubresourceRequest):
        (WebCore::isNonSubresourceRequest):
        * loader/ResourceLoaderOptions.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/WorkerThreadableLoader.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * workers/WorkerThread.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/context/SWContextManager.cpp: Removed.
        * workers/service/context/ServiceWorkerThread.h:

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

        [FrameView::layout cleanup] Move post layout task scheduling logic to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=178538
        <rdar://problem/35080743>

        Reviewed by Simon Fraser.

        Move and reorganize post layout task scheduling code.
        
        Covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::runOrSchedulePostLayoutTasks):
        * page/FrameView.h:

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

        [FrameView::layout cleanup] Move scrollbars setup logic to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=178394
        <rdar://problem/35031066>

        Reviewed by Antti Koivisto.

        Decouple scrollbars setup and the unrelated first-layout logic.
        FIXME: find out why m_firstLayout depends on the subtree flag (I'd assume we issue full layout the very first time). 

        Covered by existing test cases.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustScrollbarsForLayout):
        (WebCore::FrameView::layout):
        * page/FrameView.h:

2017-10-19  Tim Horton  <timothy_horton@apple.com>

        Expand r209943 to suppress paste during provisional navigation as well
        https://bugs.webkit.org/show_bug.cgi?id=178429
        <rdar://problem/33952830>

        Reviewed by Dean Jackson.

        No new tests; adjusted an existing test to cover this case.

        * editing/Editor.cpp:
        (WebCore::Editor::canPaste const):
        Disable pasting during provisional navigation, like r209943 did for
        various other forms of text input.

        (WebCore::Editor::shouldInsertText const):
        * dom/EventDispatcher.cpp:
        (WebCore::shouldSuppressEventDispatchInDOM):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldSuppressTextInputFromEditing const):
        (WebCore::FrameLoader::shouldSuppressKeyboardInput const): Deleted.
        * loader/FrameLoader.h:
        * page/Settings.in:
        Rename the setting to be about editing-related text input, not "keyboard" input.

        * editing/EditorCommand.cpp:
        (WebCore::allowExecutionWhenDisabled):
        (WebCore::doNotAllowExecutionWhenDisabled):
        (WebCore::allowExecutionWhenDisabledCopyCut):
        (WebCore::allowExecutionWhenDisabledPaste):
        (WebCore::createCommandMap):
        (WebCore::Editor::Command::allowExecutionWhenDisabled const):
        Completely disable execution of paste events when in no-text-input-from-editing mode.
        Otherwise, even though canPaste was false and we wouldn't do a default paste action,
        we would still dispatch the paste event to the DOM.

2017-10-19  Dean Jackson  <dino@apple.com>

        Avoid duplicate multisample resolve before WebGL compositing
        https://bugs.webkit.org/show_bug.cgi?id=178537
        <rdar://problem/35080724>

        Fix iOS build.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):

2017-10-19  Dean Jackson  <dino@apple.com>

        Avoid duplicate multisample resolve before WebGL compositing
        https://bugs.webkit.org/show_bug.cgi?id=178537
        <rdar://problem/35080724>

        Reviewed by Jer Noble.

        Both endPaint and prepareTexture were doing the MSAA resolve
        into the renderbuffer, and being called on macOS before compositing.
        Without that step, endPaint became unnecessary on iOS so I renamed
        it presentRenderbuffer.

        Covered by existing tests.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::presentRenderbuffer):
        (WebCore::GraphicsContext3D::endPaint): Deleted.
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer display]):

2017-10-19  Andy Estes  <aestes@apple.com>

        [Payment Request] Only process shipping options if shipping is requested, and throw an exception on duplicate shipping option IDs
        https://bugs.webkit.org/show_bug.cgi?id=178535

        Reviewed by Alex Christensen.

        Progresses four tests in web-platform-tests/payment-request/payment-request-constructor.https.html.

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

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

        Share logic in InlineTextBox to compute selection rect
        https://bugs.webkit.org/show_bug.cgi?id=178232
        <rdar://problem/34963452>

        Reviewed by Zalan Bujtas.

        Currently each paint routine in InlineTextBox duplicates similar code to compute the selection
        rect it will paint. This change consolidates all the duplication into localSelectionRectWithClampedPositions()
        and writes all of the paint operations, except for paintCompositionUnderline(), in terms of it.
        We will write paintCompositionUnderline() in terms of localSelectionRectWithClampedPositions()
        in a subsequent patch.

        We also write localSelectionRect() in terms of localSelectionRectWithClampedPositions(). Ideally
        we would have one way to compute the selection rect. However, localSelectionRect() and paintDocumentMarker()
        currently expect the enclosing integral rectangle of the selection rectangle. The function
        paintDocumentMarker() needs the enclosing integral rectangle to avoid truncating the dot pattern
        drawn under marked words (e.g. a spelling error) on Cocoa platforms. With regards to localSelectionRect()
        we should look to have it return the actual selection rectangle. See <https://bugs.webkit.org/show_bug.cgi?id=138913>
        for more details.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect const): Move logic in common with paintSelection() into
        localSelectionRectWithClampedPositions() and modified code to use it.
        (WebCore::InlineTextBox::localSelectionRectWithClampedPositions const): Added.
        (WebCore::InlineTextBox::paint): Store the local paint offset as a LayoutPoint as it is the canonical
        data type for representing an offset when painting. Pass the local paint offset instead of the analagous boxOrigin value.
        (WebCore::InlineTextBox::paintSelection): Write in terms of localSelectionRectWithClampedPositions().
        (WebCore::InlineTextBox::paintTextSubrangeBackground): Ditto.
        (WebCore::InlineTextBox::paintCompositionBackground): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::paintDocumentMarker): Ditto.
        (WebCore::InlineTextBox::paintDocumentMarkers): Pass paint offset instead of the analogous boxOrigin value.
        * rendering/InlineTextBox.h:

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

        Referrer policy should be inherited from creator
        https://bugs.webkit.org/show_bug.cgi?id=178403
        <rdar://problem/31546136>

        Reviewed by Andy Estes.

        As per section Browsing contexts of the the HTML standard, <https://html.spec.whatwg.org/multipage/browsers.html>
        (17 October 2017), the referrer policy of a document should initially be inherited from its
        creator.

        Tests: http/tests/security/referrer-policy-nested-subframe.html
               http/tests/security/referrer-policy-nested-window-open.html
               http/tests/security/referrer-policy-subframe-window-open.html
               http/tests/security/referrer-policy-window-open-subframe.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Ask the loader for the effective referrer policy.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::effectiveReferrerPolicy const): Added. Returns the referrer policy
        of the creator document. The creator document is document of the parent frame or the document
        of the opener for a subframe or child window, respectively. If we do not have a creator frame
        then we return the default referrer policy, non-referrer-when-downgrade, by <https://www.w3.org/TR/2017/CR-referrer-policy-20170126/#referrer-policy-empty-string>.
        * loader/FrameLoader.h:

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

        [FrameView::layout cleanup] Do not reenter FrameView::performPostLayoutTasks
        https://bugs.webkit.org/show_bug.cgi?id=178518
        <rdar://problem/35075409>

        Reviewed by Antti Koivisto.

        This patch tightens existing reentrancy policy on performPostLayoutTasks.

        Covered by existing test cases.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:

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

        Unreviewed, revert r223650 as it caused crashes on the bots.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * loader/FetchOptions.h:
        * loader/ResourceLoaderOptions.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/WorkerThreadableLoader.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * workers/WorkerThread.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/context/SWContextManager.cpp: Copied from Source/WebKit/WebProcess/Storage/ServiceWorkerContextManager.h.
        (WebCore::SWContextManager::singleton):
        (WebCore::SWContextManager::SWContextManager):
        (WebCore::SWContextManager::startServiceWorkerContext):
        * workers/service/context/SWContextManager.h: Renamed from Source/WebKit/WebProcess/Storage/ServiceWorkerContextManager.h.
        * workers/service/context/ServiceWorkerThread.h:

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

        [FrameView::layout cleanup] Replace m_nestedLayoutCount with isLayoutNested()
        https://bugs.webkit.org/show_bug.cgi?id=178503
        <rdar://problem/35066561>

        Reviewed by Antti Koivisto.

        Covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::updateLayerPositionsAfterScrolling):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        (WebCore::FrameView::updateEmbeddedObjects):
        (WebCore::FrameView::flushPostLayoutTasksQueue):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded):
        * page/FrameView.h:

2017-10-19  Antti Koivisto  <antti@apple.com>

        Overlapping text on all CSS fonts specs
        https://bugs.webkit.org/show_bug.cgi?id=177585
        <rdar://problem/34704078>

        Reviewed by Daniel Bates.

        We were resetting StyleResolver::overrideDocumentElementStyle too early when resolving slot elements.
        This resulted in 'rem' units being miscomputed.

        Reduction by Zalan.

        Test: fast/html/details-line-height-overlap.html

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Scope::Scope):
        (WebCore::Style::TreeResolver::Scope::~Scope):

            Only reset overrideDocumentElementStyle when destroying the scope.

        (WebCore::Style::TreeResolver::pushScope):
        (WebCore::Style::TreeResolver::pushEnclosingScope):
        (WebCore::Style::TreeResolver::popScope):

            A scope can show up multiple times in scope stack.

        * style/StyleTreeResolver.h:

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

        Consolidate calls to insertedInto and expand the coverage of NoEventDispatchAssertion
        https://bugs.webkit.org/show_bug.cgi?id=178504

        Reviewed by Antti Koivisto.

        Consolidated calls to notifyChildNodeInserted, childrenChanged, didFinishInsertingNode, and
        dispatchChildInsertionEvents for inserting a node by executeNodeInsertionWithScriptAssertion,
        a new templatefunction which takes a closure to do the node insertion to make exactly when
        the script becomes runnable clear.

        Added an exception to SVGTRefElement::updateReferencedText since this code mutates user agent
        shadow root during insertedInto, and turned ChildChangeSource into an enum class.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::setDataAndUpdate):
        * dom/ContainerNode.cpp:
        (WebCore::executeNodeInsertionWithScriptAssertion): Extracted.
        (WebCore::ContainerNode::takeAllChildrenFrom): Deployed executeNodeInsertionWithScriptAssertion.
        (WebCore::ContainerNode::insertBefore): Ditto.
        (WebCore::ContainerNode::changeForChildInsertion): Deleted.
        (WebCore::ContainerNode::notifyChildInserted): Deleted.
        (WebCore::ContainerNode::parserInsertBefore): Deployed executeNodeInsertionWithScriptAssertion. 
        (WebCore::ContainerNode::replaceChild): Ditto.
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::parserRemoveChild):
        (WebCore::ContainerNode::replaceAllChildren): Ditto.
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck): Ditto.
        (WebCore::ContainerNode::parserAppendChild): Ditto.
        (WebCore::ContainerNode::childrenChanged):
        (WebCore::ContainerNode::updateTreeAfterInsertion): Deleted.
        * dom/ContainerNode.h:
        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::childrenChanged):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::childrenChanged):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::childrenChanged):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::childrenChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::childrenChanged):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::childrenChanged):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::childrenChanged):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::childrenChanged):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText): Allow DOM mutations inside the user agent shadow tree here.

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

        Add an argument indicating the type of removal to Node::removedFrom
        https://bugs.webkit.org/show_bug.cgi?id=178505

        Reviewed by Antti Koivisto.

        Like r223628, added RemovalType as the first argument to Node::removedFrom, which contains two booleans indicating
        whether the node just become disconnected from a document, and whether node's tree scope had changed or not.

        These boolean flags simplifies the logic in removedFrom implementations, and are required to have a better
        guarantee about the correctness of node flags during calls to removedFrom. Right now, Node::isConnected() and
        Node::isInShadowTree() are both outdated until Node::removedFrom is called.

        Also renamed the second argument of removedFrom to parentOfRemovedTree to make the semantics clear.

        Note that in some implementations of removedFrom, we check whether isConnected() was true to decide whether
        the node had already been disconnected from a document prior to calls to this particular call of removedFrom.
        This extra check is no longer necessary since no node will be removed from a document without first being inserted
        completely somewhere after r223458.

        No new tests since there should be no behavioral changes.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyNodeInsertedIntoDocument): Replaced RELEASE_ASSERT with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION.
        (WebCore::notifyNodeRemovedFromDocument): Replaced the check that the node had not been re-connected by scripts
        by a release assert now that we believe we've eliminated all causes of these unwanted DOM mutations in r223458.
        Also moved the code to call setCSSTarget to Element::removedFrom. This random call to setCSSTarget predates r114351,
        as well as r40475. It was originally introduced by r29311 into Node::removedFromDocument() ten years ago.
        (WebCore::notifyNodeRemovedFromTree): Moved NoEventDispatchAssertion to notifyChildNodeRemoved.
        (WebCore::notifyChildNodeRemoved): Added NoEventDispatchAssertion.
        * dom/ContainerNodeAlgorithms.h:
        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Replaced the complicated code to detect when this element is removed from a document
        and its tree scope had changed by removalType.disconnectedFromDocument and removalType.treeScopeChanged.
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::removedFrom):
        * dom/Node.h: Replaced a long block of comments above insertedInto by two lines of concise comments now that
        the semantics of insertedInto and didFinishInsertingNode are more clear, and enforced by assertions.
        (WebCore::Node::RemovalType::RemovalType): Addedl
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::removedFrom):
        * dom/ProcessingInstruction.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::removedFrom): The extra !isConnected() check is no longer needed. See the description above.
        * dom/ShadowRoot.h:
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::removedFrom):
        * html/FormAssociatedElement.h:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::removedFrom):
        * html/HTMLBaseElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFrom):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::removedFrom):
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::removedFrom):
        * html/HTMLFormElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::removedFrom):
        * html/HTMLFrameSetElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::removedFrom):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::removedFrom):
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFrom): The extra !isConnected() check is no longer needed. See above.
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::removedFrom):
        * html/HTMLMapElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFrom):
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::removedFrom):
        * html/HTMLObjectElement.h:
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::removedFrom): Simplifies the logic to detect when this slot element is being
        removed from a shadow tree using removalType.treeScopeChanged.
        * html/HTMLSlotElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedInto): Added a FIXME for an obvious bug.
        (WebCore::HTMLSourceElement::removedFrom): Ditto.
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::removedFrom):
        * html/HTMLStyleElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::removedFrom):
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::removedFrom): Ditto.
        * html/HTMLTrackElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removedFrom): Replaced isConnected() check before calling Node::removedFrom by the check of
        removalType.disconnectedFromDocument.
        * svg/SVGElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::removedFrom):
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::removedFrom):
        * svg/SVGFontFaceElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::removedFrom):
        * svg/SVGMPathElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::removedFrom):
        * svg/SVGPathElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::removedFrom):
        * svg/SVGSVGElement.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::removedFrom): The extra !isConnected() check is no longer needed. See above.
        * svg/SVGStyleElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::removedFrom):
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::removedFrom):
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::removedFrom):
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removedFrom):
        * svg/SVGUseElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::removedFrom):
        * svg/animation/SVGSMILElement.h:

2017-10-19  Ms2ger  <Ms2ger@igalia.com>

        Update the signatures of compressedTexSubImage3D.
        https://bugs.webkit.org/show_bug.cgi?id=178507

        Reviewed by Ryosuke Niwa.

        No new tests: not much point in adding tests now; this method doesn't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::compressedTexSubImage3D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-10-19  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [curl] Segfault in WebCore::CurlRequest::setupPOST
        https://bugs.webkit.org/show_bug.cgi?id=178434

        Reviewed by Ryosuke Niwa.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::resolveBlobReferences):
        (WebCore::CurlRequest::setupPOST):

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

        Don't expose raw HTML in pasteboard to the web content
        https://bugs.webkit.org/show_bug.cgi?id=178422
        <rdar://problem/34567052>

        Reviewed by Wenson Hsieh.

        This patch enables HTML sanitization added in r223440 when WebKit pastes & concludes edit drag as opposed to
        just when dataTransfer.get is used. This is important to avoid leaking privacy sensitive information such as
        local file paths and pasting potentially harmful content such as scripts in event handler serialized by
        WebKit prior to r223462. In addition, we start using blob URLs in the pasted content instead of retaining
        the original URL and overriding the document loader like r222839 for RTFD and r222119 for image files.

        To do this, a new superclass FrameWebContentReader of PasteboardWebContentReader and WebContentMarkupReader
        is introduced, and helper functions are extracted out of WebContentMarkupReader in WebContentReaderCocoa.mm
        to be also used in WebContentReader.

        Tests: http/tests/security/clipboard/copy-paste-html-cross-origin-iframe-across-origin.html
               http/tests/security/clipboard/copy-paste-html-cross-origin-iframe-in-same-origin.html
               http/tests/security/clipboard/drag-drop-html-cross-origin-iframe-in-same-origin.html
               PasteWebArchive.SanitizesHTML

        * editing/WebContentReader.cpp:
        (WebCore::FrameWebContentReader::shouldSanitize const): Moved from WebContentMarkupReader.
        * editing/WebContentReader.h:
        (WebCore::FrameWebContentReader): Added to share code between WebContentReader and WebContentMarkupReader.
        (WebCore::FrameWebContentReader::FrameWebContentReader): Added.
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::writeSelectionToPasteboard): Store the content's origin in the pasteboard so that we can
        avoid sanitizing the content when pasting into the same document. This is important since converting all URLs
        into blob URLs would break editors on the Web which tracks images, etc... in the content using URLs.
        (WebCore::Editor::writeSelection): Ditto.
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::MarkupAndArchive): Replaced FragmentAndArchive. Now returns the markup string in the archive
        instead of the parsed fragment.
        (WebCore::extractMarkupAndArchive): Renamed from createFragmentFromWebArchive. Now returns the markup string.
        (WebCore::sanitizeMarkupWithArchive): Extracted out of WebContentMarkupReader::readWebArchive to share code
        between WebContentReader and WebContentMarkupReader, and added the code to handle subframes recursively.
        As inefficient as this code is, we can't delay the conversion of subframes' marksup until later time since
        the main frame's markup would contain blob URLs to refer to those subframes. 
        (WebCore::WebContentReader::readWebArchive): Use sanitizeMarkupWithArchive when shouldSanitize() is true.
        Don't add the subresources to the document loader when the content will be loaded into the same origin since
        subresouces are mostly likely available in the document anyway.
        (WebCore::WebContentMarkupReader::readWebArchive):
        * platform/Pasteboard.h:
        (WebCore::PasteboardWebContent): Added contentOrigin.
        * platform/PasteboardWriterData.h:
        (WebCore::PasteboardWriterData): Ditto.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read): Read the origin before branching out to readRespectingUTIFidelities.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Record the content origin into the pasteboard.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write): Ditto.
        * platform/mac/PasteboardWriter.mm:
        (WebCore::createPasteboardWriter): Ditto.

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

        Another attempt to fix the windows build.

        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::resourceUsageOverlayVisibleChanged):
        * page/SettingsBase.h:

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

        Attempt to fix the windows build.

        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::resourceUsageOverlayVisibleChanged):
        * page/SettingsBase.h:

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

        [Settings] Convert more settings to be generated
        https://bugs.webkit.org/show_bug.cgi?id=177766

        Reviewed by Dean Jackson.

        - Replaces setNeedsStyleRecalcInAllFrames option in Settings.in
          with a more generic, onChange, which allows you to specify a function
          in SettingsBase that will be called when the setting changes. 
          setNeedsStyleRecalcInAllFrames is then reimplemented in terms of
          onChange.
        - Moves most (all but two) of the remaining non-static settings from
          SettingsBase to Settings.in

        * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py:
        (printSetterBody):
        * Scripts/GenerateSettings/Settings.py:
        (Setting.__init__):
        (Setting.__str__):
        (Setting.typeIsValueType):
        (Setting.setterFunctionName):
        (Setting.setterChangeFunctionName):
        (Setting.hasComplexSetter):
        (parseInput):
        
            Add support for the onChange option.
        
        * page/Settings.in:

            Migrate most of the remaining non-static settings to Settings.in.
            Adopt onChange option.

        * page/SettingsBase.cpp:
        * page/SettingsBase.h:

            Add helper functions for use by the onChange option.

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

        Implement ServiceWorkerRegistration.scope / updateViaCache
        https://bugs.webkit.org/show_bug.cgi?id=178497

        Reviewed by Youenn Fablet.

        Implement ServiceWorkerRegistration.scope / updateViaCache.

        No new tests, updated existing test.

        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::resolvedWithRegistration):
        * workers/service/ServiceWorkerJob.h:
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::scope const):
        (WebCore::ServiceWorkerRegistration::updateViaCache const):
        (WebCore::ServiceWorkerRegistration::update):
        (WebCore::ServiceWorkerRegistration::unregister):
        (WebCore::ServiceWorkerRegistration::scriptExecutionContext const):
        (WebCore::ServiceWorkerRegistration::activeDOMObjectName const):
        (WebCore::ServiceWorkerRegistration::canSuspendForDocumentSuspension const):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/ServiceWorkerRegistration.idl:
        * workers/service/ServiceWorkerRegistrationData.cpp:
        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::encode const):
        (WebCore::ServiceWorkerRegistrationData::decode):
        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::jobResolvedInServer):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptContextStarted):
        (WebCore::SWServerRegistration::data const):

2017-10-18  Youenn Fablet  <youenn@apple.com>

        Add preliminary support for ServiceWorker Handle Fetch
        https://bugs.webkit.org/show_bug.cgi?id=178475

        Reviewed by Chris Dumez.

        Test: http/tests/workers/service/basic-fetch.https.html

        Adding parameters to allow WebKit to do loading through Service Worker or through regular networking.
        A script context is now storing its selected service worker identifier. This should be fully implemented later on.
        This selected service worker identifier is passed to loading code as a ResourceLoaderOptions field.
        Service workers mode is also added as a ResourceLoaderOptions field so that the service worker can be bypassed.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::selectedServiceWorkerIdentifier const):
        (WebCore::ScriptExecutionContext::setSelectedServiceWorkerIdentifier):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * loader/FetchOptions.h:
        (WebCore::isPotentialNavigationOrSubresourceRequest):
        (WebCore::isNonSubresourceRequest):
        * loader/ResourceLoaderOptions.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/WorkerThreadableLoader.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * workers/WorkerThread.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        * workers/service/ServiceWorkerProvider.h:
        * workers/service/context/SWContextManager.cpp: Removed.
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/server/SWServer.h:

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

        [FrameView::layout cleanup] Group related pre-layout code to improve readability
        https://bugs.webkit.org/show_bug.cgi?id=178496
        <rdar://problem/35065718>

        Reviewed by Simon Fraser.

        Early returns/asserts/member variable resets etc.

        Covered by existing tests.

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

2017-10-17  Jiewen Tan  <jiewen_tan@apple.com>

        Replace some stack raw pointers with RefPtrs within WebCore/html
        https://bugs.webkit.org/show_bug.cgi?id=178201
        <rdar://problem/34841692>

        Reviewed by Ryosuke Niwa.

        This is an effort to reduce raw pointer usage in DOM code. In this patch, raw pointers
        that are ref countable are blindly selected to be replaced with RefPtrs with one exception
        which is auto*.

        Also, this patch occasionally modifies the return type of some methods, and therefore callers
        of those methods are modified accordingly.

        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        (WebCore::LegacyCDM::mediaPlayer const):
        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.cpp:
        (WebCore::CDMPrivateMediaPlayer::createSession):
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
        (WebCore::WebKitMediaKeys::cdmMediaPlayer const):
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::externalDeviceDisplayName const):
        (WebCore::MediaControlsHost::externalDeviceType const):
        * dom/Element.cpp:
        (WebCore::Element::focusDelegate):
        (WebCore::Element::userAgentShadowRoot const):
        (WebCore::Element::ensureUserAgentShadowRoot):
        * dom/Element.h:
        * dom/EventContext.cpp:
        (WebCore::TouchEventContext::checkReachability const):
        * dom/EventPath.cpp:
        (WebCore::shouldEventCrossShadowBoundary):
        (WebCore::EventPath::setRelatedTarget):
        (WebCore::EventPath::retargetTouch):
        (WebCore:: const):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toNode):
        (WebCore::EventTarget::addEventListener):
        * dom/EventTarget.h:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::toElement const):
        (WebCore::MouseEvent::fromElement const):
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/Node.cpp:
        (WebCore::Node::toNode):
        * dom/Node.h:
        * dom/ScopedEventQueue.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        * editing/EditorCommand.cpp:
        (WebCore::targetFrame):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateAppearance):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::updateColorSwatch):
        (WebCore::ColorInputType::shadowColorSwatch const):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::disabledAttributeChanged):
        (WebCore::FileInputType::multipleAttributeChanged):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::findAssociatedForm):
        (WebCore::FormAssociatedElement::formOwnerRemovedFromTree):
        (WebCore::FormAssociatedElement::resetFormOwner):
        (WebCore::FormAssociatedElement::formAttributeChanged):
        * html/FormController.cpp:
        (WebCore::recordFormStructure):
        (WebCore::FormKeyGenerator::formKey):
        (WebCore::FormController::restoreControlStateIn):
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::imageElement const):
        (WebCore::HTMLAreaElement::isFocusable const):
        (WebCore::HTMLAreaElement::setFocus):
        (WebCore::HTMLAreaElement::updateFocusAppearance):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        (WebCore::HTMLBodyElement::scrollHeight):
        (WebCore::HTMLBodyElement::scrollWidth):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createElementRenderer):
        (WebCore:: const):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::width):
        (WebCore::HTMLDocument::height):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsNeeded):
        (WebCore::setHasDirAutoFlagRecursively):
        (WebCore::HTMLElement::directionality const):
        (WebCore::HTMLElement::dirAttributeChanged):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetLoadingPlugin const):
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::updateFromControlElementsAncestorDisabledStateUnder):
        (WebCore::HTMLFieldSetElement::disabledStateChanged):
        (WebCore::HTMLFieldSetElement::childrenChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::computeIsDisabledByFieldsetAncestor const):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::didChangeForm):
        (WebCore::HTMLFormControlElement::shouldAutocorrect const):
        (WebCore::HTMLFormControlElement::autocapitalizeType const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::handleLocalEvents):
        (WebCore::submitElementFromEvent):
        (WebCore::HTMLFormElement::prepareForSubmission):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::shouldAutocorrect const):
        (WebCore::HTMLFormElement::parseAttribute):
        (WebCore::HTMLFormElement::resetDefaultButton):
        (WebCore::HTMLFormElement::elementFromPastNamesMap const):
        (WebCore::HTMLFormElement::namedElements):
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::didAttachRenderers):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed const):
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::didAttachRenderers):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::setContentFrame):
        (WebCore::HTMLFrameOwnerElement::clearContentFrame):
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame):
        (WebCore::SubframeLoadingDisabler::canLoadFrame):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::findContaining):
        (WebCore::HTMLFrameSetElement::willAttachRenderers):
        (WebCore::HTMLFrameSetElement::insertedInto):
        (WebCore::HTMLFrameSetElement::removedFrom):
        * html/HTMLFrameSetElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        (WebCore::HTMLImageElement::pictureElement const):
        (WebCore::HTMLImageElement::destroyImageControls):
        (WebCore::HTMLImageElement::hasImageControls const):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::innerTextElement const):
        (WebCore::HTMLInputElement::endEditing):
        (WebCore::HTMLInputElement::dataList const):
        (WebCore::HTMLInputElement::resetListAttributeTargetObserver): Deleted.
        (WebCore::HTMLInputElement::listAttributeTargetChanged): Deleted.
        (WebCore::HTMLInputElement::isSteppable const): Deleted.
        (WebCore::HTMLInputElement::dateType const): Deleted.
        (WebCore::HTMLInputElement::isTextButton const): Deleted.
        (WebCore::HTMLInputElement::isRadioButton const): Deleted.
        (WebCore::HTMLInputElement::isSearchField const): Deleted.
        (WebCore::HTMLInputElement::isInputTypeHidden const): Deleted.
        (WebCore::HTMLInputElement::isPasswordField const): Deleted.
        (WebCore::HTMLInputElement::isCheckbox const): Deleted.
        (WebCore::HTMLInputElement::isRangeControl const): Deleted.
        (WebCore::HTMLInputElement::isColorControl const): Deleted.
        (WebCore::HTMLInputElement::isText const): Deleted.
        (WebCore::HTMLInputElement::isEmailField const): Deleted.
        (WebCore::HTMLInputElement::isFileUpload const): Deleted.
        (WebCore::HTMLInputElement::isImageButton const): Deleted.
        (WebCore::HTMLInputElement::isNumberField const): Deleted.
        (WebCore::HTMLInputElement::isSubmitButton const): Deleted.
        (WebCore::HTMLInputElement::isTelephoneField const): Deleted.
        (WebCore::HTMLInputElement::isURLField const): Deleted.
        (WebCore::HTMLInputElement::isDateField const): Deleted.
        (WebCore::HTMLInputElement::isDateTimeField const): Deleted.
        (WebCore::HTMLInputElement::isDateTimeLocalField const): Deleted.
        (WebCore::HTMLInputElement::isMonthField const): Deleted.
        (WebCore::HTMLInputElement::isTimeField const): Deleted.
        (WebCore::HTMLInputElement::isWeekField const): Deleted.
        (WebCore::HTMLInputElement::isEnumeratable const): Deleted.
        (WebCore::HTMLInputElement::supportLabels const): Deleted.
        (WebCore::HTMLInputElement::shouldAppearChecked const): Deleted.
        (WebCore::HTMLInputElement::supportsPlaceholder const): Deleted.
        (WebCore::HTMLInputElement::updatePlaceholderText): Deleted.
        (WebCore::HTMLInputElement::isEmptyValue const): Deleted.
        (WebCore::HTMLInputElement::maxLengthAttributeChanged): Deleted.
        (WebCore::HTMLInputElement::minLengthAttributeChanged): Deleted.
        (WebCore::HTMLInputElement::updateValueIfNeeded): Deleted.
        (WebCore::HTMLInputElement::defaultToolTip const): Deleted.
        (WebCore::HTMLInputElement::matchesIndeterminatePseudoClass const): Deleted.
        (WebCore::HTMLInputElement::shouldAppearIndeterminate const): Deleted.
        (WebCore::HTMLInputElement::mediaCaptureType const): Deleted.
        (WebCore::HTMLInputElement::isInRequiredRadioButtonGroup): Deleted.
        (WebCore:: const): Deleted.
        (WebCore::HTMLInputElement::checkedRadioButtonForGroup const): Deleted.
        (WebCore::HTMLInputElement::radioButtonGroups const): Deleted.
        (WebCore::HTMLInputElement::addToRadioButtonGroup): Deleted.
        (WebCore::HTMLInputElement::removeFromRadioButtonGroup): Deleted.
        (WebCore::HTMLInputElement::height const): Deleted.
        (WebCore::HTMLInputElement::width const): Deleted.
        (WebCore::HTMLInputElement::setHeight): Deleted.
        (WebCore::HTMLInputElement::setWidth): Deleted.
        (WebCore::ListAttributeTargetObserver::ListAttributeTargetObserver): Deleted.
        (WebCore::ListAttributeTargetObserver::idTargetChanged): Deleted.
        (WebCore::HTMLInputElement::setRangeText): Deleted.
        (WebCore::HTMLInputElement::shouldTruncateText const): Deleted.
        (WebCore::HTMLInputElement::selectionStartForBindings const): Deleted.
        (WebCore::HTMLInputElement::setSelectionStartForBindings): Deleted.
        (WebCore::HTMLInputElement::selectionEndForBindings const): Deleted.
        (WebCore::HTMLInputElement::setSelectionEndForBindings): Deleted.
        (WebCore::HTMLInputElement::selectionDirectionForBindings const): Deleted.
        (WebCore::HTMLInputElement::setSelectionDirectionForBindings): Deleted.
        (WebCore::HTMLInputElement::setSelectionRangeForBindings): Deleted.
        (WebCore::HTMLInputElement::createInnerTextStyle const): Deleted.
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters): Deleted.
        (WebCore::HTMLInputElement::capsLockStateMayHaveChanged): Deleted.
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::shadowSelect const):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::handleClick):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::mapMouseEvent):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        (WebCore::HTMLMediaElement::controls const):
        (WebCore::HTMLMediaElement::layoutSizeChanged):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::mediaControls const):
        (WebCore::HTMLMediaElement::hasMediaControls const):
        (WebCore::HTMLMediaElement::mediaPlayerReferrer const):
        (WebCore::HTMLMediaElement::mediaPlayerUserAgent const):
        (WebCore::HTMLMediaElement::mediaPlayerShouldWaitForResponseToAuthenticationChallenge):
        (WebCore::HTMLMediaElement::sourceApplicationIdentifier const):
        (WebCore::HTMLMediaElement::getVideoPlaybackQuality):
        (WebCore::HTMLMediaElement::session const):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::player const):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasFallbackContent const):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::ownerSelectElement const):
        (WebCore::HTMLOptGroupElement::accessKeyAction):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText):
        (WebCore::HTMLOptionElement::accessKeyAction):
        (WebCore::HTMLOptionElement::index const):
        (WebCore::HTMLOptionElement::parseAttribute):
        (WebCore::HTMLOptionElement::selected):
        (WebCore::HTMLOptionElement::setSelected):
        (WebCore::HTMLOptionElement::setSelectedState):
        (WebCore::HTMLOptionElement::childrenChanged):
        (WebCore::HTMLOptionElement::ownerDataListElement const):
        (WebCore::HTMLOptionElement::ownerSelectElement const):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel const):
        (WebCore::HTMLOptionElement::insertedInto):
        (WebCore::HTMLOptionElement::collectOptionInnerText const):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::willDetachRenderers):
        (WebCore::HTMLPlugInElement::isKeyboardFocusable const):
        (WebCore::HTMLPlugInElement::isUserObservable const):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay const):
        (WebCore::HTMLPlugInImageElement::restartSimilarPlugIns):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::recalcListItems const):
        (WebCore::HTMLSelectElement::selectOption):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/HTMLSlotElement.cpp:
        (WebCore::flattenAssignedNodes):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::removedFrom):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::isActiveSummary const):
        (WebCore::isClickableControl):
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalPresentationAttributeStyle const):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalPresentationAttributeStyle const):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead const):
        (WebCore::HTMLTableElement::setTHead):
        (WebCore::HTMLTableElement::tFoot const):
        (WebCore::HTMLTableElement::createTBody):
        (WebCore::HTMLTableElement::lastBody const):
        (WebCore::HTMLTableElement::deleteRow):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::findParentTable const):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::subtreeHasChanged):
        (WebCore::HTMLTextAreaElement::innerTextElement const):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        (WebCore::HTMLTextFormControlElement::indexForVisiblePosition const):
        (WebCore::HTMLTextFormControlElement::visiblePositionForIndex const):
        (WebCore::HTMLTextFormControlElement::computeSelectionStart const):
        (WebCore::HTMLTextFormControlElement::computeSelectionEnd const):
        (WebCore::HTMLTextFormControlElement::computeSelectionDirection const):
        (WebCore::HTMLTextFormControlElement::selection const):
        (WebCore::HTMLTextFormControlElement::updateInnerTextElementEditability):
        (WebCore::innerTextValueFrom):
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        (WebCore::HTMLTextFormControlElement::innerTextValue const):
        (WebCore::positionForIndex):
        (WebCore::HTMLTextFormControlElement::indexForPosition const):
        (WebCore::HTMLTextFormControlElement::hidePlaceholder):
        (WebCore::HTMLTextFormControlElement::showPlaceholderIfNecessary):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        (WebCore::enclosingTextFormControl):
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::canLoadURL):
        (WebCore::HTMLTrackElement::setReadyState):
        (WebCore::HTMLTrackElement::mediaElementCrossOriginAttribute const):
        (WebCore::HTMLTrackElement::textTrackKindChanged):
        (WebCore::HTMLTrackElement::textTrackModeChanged):
        (WebCore::HTMLTrackElement::textTrackAddCues):
        (WebCore::HTMLTrackElement::textTrackRemoveCues):
        (WebCore::HTMLTrackElement::textTrackAddCue):
        (WebCore::HTMLTrackElement::textTrackRemoveCue):
        (WebCore::HTMLTrackElement::mediaElement const):
        * html/HTMLTrackElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::setDisplayMode):
        (WebCore::HTMLVideoElement::paintCurrentFrameInContext):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        (WebCore::ImageDocument::scale):
        (WebCore::ImageDocument::imageFitsInWindow):
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/InputType.h:
        (WebCore::InputType::innerTextElement const):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::defaultEventHandler):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled const):
        (WebCore::MediaElementSession::setWirelessVideoPlaybackDisabled):
        (WebCore::isMainContentForPurposesOfAutoplay):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::decorationWidth const):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        (WebCore::RadioInputType::isKeyboardFocusable const):
        (WebCore::RadioInputType::didDispatchClick):
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter const):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::handleTouchEvent):
        (WebCore::RangeInputType::sliderTrackElement const):
        (WebCore::RangeInputType::listAttributeTargetChanged):
        (WebCore::RangeInputType::updateTickMarkValues):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::createShadowSubtree):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::isEmptyValue const):
        (WebCore::TextFieldInputType::handleKeydownEvent):
        (WebCore::TextFieldInputType::handleFocusEvent):
        (WebCore::TextFieldInputType::innerTextElement const):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        (WebCore::TextFieldInputType::didSetValueByUserEdit):
        (WebCore::TextFieldInputType::shouldDrawCapsLockIndicator const):
        * html/TextFieldInputType.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::copyBufferSubData):
        (WebCore::WebGL2RenderingContext::getBufferSubData):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::attach):
        (WebCore::WebGLFramebuffer::getAttachmentObject const):
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):
        (WebCore::WebGLFramebuffer::getColorBufferWidth const):
        (WebCore::WebGLFramebuffer::getColorBufferHeight const):
        (WebCore::WebGLFramebuffer::getColorBufferFormat const):
        (WebCore::WebGLFramebuffer::checkStatus const):
        (WebCore::WebGLFramebuffer::hasStencilBuffer const):
        (WebCore::WebGLFramebuffer::initializeAttachments):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::bufferData):
        (WebCore::WebGLRenderingContextBase::bufferSubData):
        (WebCore::WebGLRenderingContextBase::compressedTexImage2D):
        (WebCore::WebGLRenderingContextBase::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::generateMipmap):
        (WebCore::WebGLRenderingContextBase::getAttachedShaders):
        (WebCore::WebGLRenderingContextBase::getTexParameter):
        (WebCore::WebGLRenderingContextBase::linkProgramWithoutInvalidatingAttribLocations):
        (WebCore::WebGLRenderingContextBase::texImage2DBase):
        (WebCore::WebGLRenderingContextBase::validateTexFunc):
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::texSubImage2DBase):
        (WebCore::WebGLRenderingContextBase::copyTexImage2D):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        (WebCore::WebGLRenderingContextBase::texParameter):
        (WebCore::WebGLRenderingContextBase::loseContextImpl):
        (WebCore::WebGLRenderingContextBase::checkTextureCompleteness):
        (WebCore::WebGLRenderingContextBase::validateTextureBinding):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        * html/canvas/WebGPURenderPassColorAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::clearColor const):
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::setClearColor):
        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::clearDepth const):
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::setClearDepth):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeInsertAlreadyParsedChildTask):
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::tryToEnsureNoahsArkConditionQuickly):
        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::shouldYieldBeforeExecutingScript):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::parentMediaElement):
        * html/shadow/MediaControlElementTypes.h:
        (WebCore::parentMediaElement):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::startDrag):
        (WebCore::MediaControlPanelElement::endDrag):
        (WebCore::MediaControlVolumeSliderContainerElement::defaultEventHandler):
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler):
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        (WebCore::MediaControlTextTrackContainerElement::updateActiveCuesFontSize):
        (WebCore::MediaControlTextTrackContainerElement::updateTextStrokeStyle):
        (WebCore::MediaControlTextTrackContainerElement::updateTextTrackRepresentation):
        (WebCore::MediaControlTextTrackContainerElement::clearTextTrackRepresentation):
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::containsRelatedTarget):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::isDisabledFormControl const):
        (WebCore::SliderThumbElement::matchesReadWritePseudoClass const):
        (WebCore::SliderThumbElement::focusDelegate):
        (WebCore::SliderThumbElement::setPositionFromPoint):
        (WebCore::SliderThumbElement::startDragging):
        (WebCore::SliderThumbElement::stopDragging):
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::willRespondToMouseMoveEvents):
        (WebCore::SliderThumbElement::willRespondToMouseClickEvents):
        (WebCore::SliderThumbElement::willDetachRenderers):
        (WebCore::findTouchWithIdentifier):
        (WebCore::SliderThumbElement::handleTouchStart):
        (WebCore::SliderThumbElement::handleTouchMove):
        (WebCore::SliderThumbElement::handleTouchEndAndCancel):
        (WebCore::SliderThumbElement::handleTouchEvent):
        (WebCore::SliderThumbElement::hostInput const):
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::SpinButtonElement::releaseCapture):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::willRespondToMouseClickEvents):
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::defaultEventHandler):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::trackElementIndex):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setMode):
        (WebCore::TextTrack::hasCue):
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::copyWebVTTNodeToDOMTree):
        (WebCore::VTTCue::determineTextDirection):
        (WebCore::VTTCue::markFutureAndPastNodes):
        (WebCore::VTTCue::removeDisplayTree):
        (WebCore::VTTCue::cueContentsMatch const):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didAddEventListener):
        (WebCore::InspectorDOMAgent::willRemoveEventListener):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::innerTextElement const):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::textBlockLogicalWidth const):
        (WebCore::RenderTextControl::computeLogicalHeight const):
        (WebCore::RenderTextControl::hitInnerTextElement):
        (WebCore::RenderTextControl::canScroll const):
        (WebCore::RenderTextControl::innerLineHeight const):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isFocused const):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderTrack):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::willBeDestroyed):
        (WebCore::RenderVideo::calculateIntrinsicSize):
        (WebCore::RenderVideo::paintReplaced):
        (WebCore::RenderVideo::updatePlayer):
        (WebCore::RenderVideo::supportsAcceleratedRendering const):
        (WebCore::RenderVideo::acceleratedRenderingStateChanged):
        (WebCore::RenderVideo::requiresImmediateCompositing const):
        (WebCore::RenderVideo::foregroundIsKnownToBeOpaqueInRect const):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearShadowTree):
        (WebCore::SVGUseElement::targetClone const):

2017-10-18  Dean Jackson  <dino@apple.com>

        Some older hardware can't actually use renderbuffers at the size they advertise
        https://bugs.webkit.org/show_bug.cgi?id=178417
        <rdar://problem/35042291>

        Reviewed by Tim Horton.

        The change in r223567 caused some older hardware to fail, because even though
        they claimed to support a maximum renderbuffer and viewport of 16K, they were
        unable to actually handle one. Rather than trying to identify such hardware,
        clamp all buffers to a maximum of 8192. This is bigger than the previous value
        of 4096, and large enough to have a full-screen buffer on a Retina 5K iMac.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getIntegerv):

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

        [Service Worker] Add stubs for Client / WindowClient / Clients
        https://bugs.webkit.org/show_bug.cgi?id=178469

        Reviewed by Youenn Fablet.

        Add stubs for Client / WindowClient / Clients:
        - https://w3c.github.io/ServiceWorker/v1/#clients
        - https://w3c.github.io/ServiceWorker/v1/#client-interface

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::visibilityState const):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/VisibilityState.h: Renamed from Source/WebCore/page/PageVisibilityState.h.
        * dom/VisibilityState.idl: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        * page/Page.cpp:
        (WebCore::Page::visibilityState const):
        * page/Page.h:
        * workers/service/ServiceWorkerClient.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        (WebCore::ServiceWorkerClient::ServiceWorkerClient):
        (WebCore::ServiceWorkerClient::activeDOMObjectName const):
        (WebCore::ServiceWorkerClient::canSuspendForDocumentSuspension const):
        (WebCore::ServiceWorkerClient::url const):
        (WebCore::ServiceWorkerClient::frameType const):
        (WebCore::ServiceWorkerClient::id const):
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/ServiceWorkerClient.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        * workers/service/ServiceWorkerClient.idl: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        * workers/service/ServiceWorkerClients.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp.
        (WebCore::ServiceWorkerClients::ServiceWorkerClients):
        (WebCore::ServiceWorkerClients::activeDOMObjectName const):
        (WebCore::ServiceWorkerClients::canSuspendForDocumentSuspension const):
        (WebCore::ServiceWorkerClients::get):
        (WebCore::ServiceWorkerClients::matchAll):
        (WebCore::ServiceWorkerClients::openWindow):
        (WebCore::ServiceWorkerClients::claim):
        * workers/service/ServiceWorkerClients.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.h.
        (WebCore::ServiceWorkerClients::create):
        * workers/service/ServiceWorkerClients.idl: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        (WebCore::ServiceWorkerGlobalScope::clients):
        * workers/service/ServiceWorkerGlobalScope.idl:
        * workers/service/ServiceWorkerWindowClient.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        (WebCore::ServiceWorkerWindowClient::ServiceWorkerWindowClient):
        (WebCore::ServiceWorkerWindowClient::visibilityState const):
        (WebCore::ServiceWorkerWindowClient::isFocused const):
        (WebCore::ServiceWorkerWindowClient::focus):
        (WebCore::ServiceWorkerWindowClient::navigate):
        * workers/service/ServiceWorkerWindowClient.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.
        * workers/service/ServiceWorkerWindowClient.idl: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.idl.

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

        [FrameView::layout cleanup] Use SetForScope to protect m_needsFullRepaint's value on reentrancy
        https://bugs.webkit.org/show_bug.cgi?id=178479
        <rdar://problem/35056950>

        Reviewed by Simon Fraser.

        No change in functionality.

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

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

        [FrameView::layout cleanup] Remove InPreLayoutStyleUpdate.
        https://bugs.webkit.org/show_bug.cgi?id=178483
        <rdar://problem/35058800>

        Reviewed by Simon Fraser.

        Its client, updateCompositingLayersAfterStyleChange only needs to know if there's a upcoming
        layer update (part of FrameView::layout()).

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::layout):
        * page/FrameView.h:

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

        Global constructors exposed to service workers should go on ServiceWorkerGlobalScope interface
        https://bugs.webkit.org/show_bug.cgi?id=178482

        Reviewed by Sam Weinig.

        Global constructors exposed to service workers should go on ServiceWorkerGlobalScope interface,
        not the ServiceWorker interface.

        * bindings/scripts/preprocess-idls.pl:

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

        Add an argument indicating the type of insertion to Node::insertedInto
        https://bugs.webkit.org/show_bug.cgi?id=178431

        Reviewed by Antti Koivisto.

        Added InsertionType as the first argument to Node::insertedInto, which contains two booleans indicating
        whether the node just become newly connected to a document, and whether node's tree scope had changed or not.

        These boolean flags simplifie the logic in insertedInto implementations, and are required to have a better
        guarantee about the correctness of node flags during calls to insertedInto. Right now, isConnected() and
        isInShadowTree() are both outdated until Node::insertedInto is called.

        Also renamed the second argument from insertionPoint to parentOfInsertedTree to make the semantics clear,
        and renamed finishedInsertingSubtree to didFinishInsertingNode, and renamed InsertionNotificationRequest
        to InsertedIntoResult using enum class.

        Note that in some implementations of insertedInto, we check whether isConnected() was false to decide whether
        the node is newly connected to a document. This extra check is no longer necessary since no node will be inserted
        into a document without first being completely removed after r223458.

        No new tests since there should be no behavioral changes.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::notifyChildInserted):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyNodeInsertedIntoDocument): Replaced the check that the node had not been disconnected by scripts
        by a release assert now that we believe we've eliminated all causes of these unwanted DOM mutations in r223458.
        (WebCore::notifyNodeInsertedIntoTree): Removed NoEventDispatchAssertion since notifyChildNodeInserted has it
        already since r223458.
        (WebCore::notifyChildNodeInserted): Made this function return NodeVector (copy elision).
        * dom/ContainerNodeAlgorithms.h:
        * dom/Element.cpp:
        (WebCore::Element::insertedInto): Use insertionType.connectedToDocument to detect when this element had become
        connected to some document. Similarly, use insertionType.treeScopeChanged to detect when this element had been
        inserted into a new tree scope. Removed the comment which became obsolete due to this cleanup.
        (WebCore::Element::addShadowRoot): Simplified the code here since we never attach a ShadowRoot with children.
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::insertedInto):
        * dom/Node.h:
        (WebCore::Node::InsertedIntoResult): Renamed from InsertionNotificationRequest, and turned into an enum class.
        (WebCore::Node::InsertionType): Added. We pass this object by value to insertedInto as a performance optimization
        as passing two booleans by value is faster than passing a pointer and then de-referencing it in a virtual callee.
        (WebCore::Node::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::insertedInto):
        (WebCore::ProcessingInstruction::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * dom/ProcessingInstruction.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::shouldCallFinishedInsertingSubtree): Deleted.
        (WebCore::ScriptElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::insertedInto const): Added. Extracted from shouldCallFinishedInsertingSubtree.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertedInto): The extra isConnected() check is no longer needed. See the description above.
        * dom/ShadowRoot.h:
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedInto):
        * html/FormAssociatedElement.h:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::insertedInto):
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedInto):
        (WebCore::HTMLBodyElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLBodyElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedInto):
        (WebCore::HTMLFormControlElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::insertedInto):
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::insertedInto):
        * html/HTMLFormElement.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::insertedInto):
        (WebCore::HTMLFrameElementBase::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::insertedInto):
        * html/HTMLFrameSetElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::insertedInto):
        (WebCore::HTMLInputElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::insertedInto): The extra isConnected() check is no longer needed. See above.
        (WebCore::HTMLLinkElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::insertedInto):
        * html/HTMLMapElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedInto):
        (WebCore::HTMLMediaElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLMediaElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::insertedInto):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::insertedInto):
        (WebCore::HTMLObjectElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLObjectElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::insertedInto):
        * html/HTMLOptionElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedInto):
        (WebCore::HTMLScriptElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::insertedInto):
        * html/HTMLSelectElement.h:
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::insertedInto): Replaced a cumbersome condition by a boolean check on insertionType's
        treeScopeChanged and removed the accompanying comment which is no longer needed.
        * html/HTMLSlotElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedInto):
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::insertedInto): The extra isConnected() check is no longer needed. See above.
        * html/HTMLStyleElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedInto):
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedInto):
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::insertedInto): Added a FIXME since this code is clearly wrong.
        * html/HTMLTrackElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedInto):
        * svg/SVGElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::insertedInto):
        (WebCore::SVGFEImageElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * svg/SVGFEImageElement.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::insertedInto):
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::insertedInto):
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::insertedInto):
        * svg/SVGImageElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::insertedInto):
        (WebCore::SVGMPathElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * svg/SVGMPathElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::insertedInto):
        * svg/SVGPathElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::insertedInto):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::insertedInto):
        (WebCore::SVGScriptElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * svg/SVGScriptElement.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::insertedInto): The extra isConnected() check is no longer needed. See above description.
        * svg/SVGStyleElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::insertedInto):
        (WebCore::SVGTRefElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedInto):
        (WebCore::SVGTextPathElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto):
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedInto):
        * svg/SVGUseElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedInto):
        (WebCore::SVGSMILElement::didFinishInsertingNode): Renamed from finishedInsertingSubtree.
        * svg/animation/SVGSMILElement.h:

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

        Key events should not update Document.lastHandledUserGestureTimestamp unless key event is handled
        https://bugs.webkit.org/show_bug.cgi?id=178473
        <rdar://problem/34869935>

        Reviewed by Brent Fulgham.

        No new tests, updated media/restricted-audio-playback-with-document-gesture.html for this change.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Restore the current Document's "lastHandledUserGestureTimestamp"
        if the key event was not handled.

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

        Unreviewed, rolling out r223291.

        After further investigation, this removed codepath is
        something Mail may want to re-adopt. Additionally, the
        original breaking change was rolled out in r223408, so
        this test once again passes on ToT.

        Reverted changeset:

        "Remove Editor::simplifyMarkup"
        https://bugs.webkit.org/show_bug.cgi?id=178271
        https://trac.webkit.org/changeset/223291

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

        [Settings] Move remaining simple settings to Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=177730
        <rdar://problem/34763346>

        Reviewed by Daniel Bates.

        * Scripts/GenerateSettings/Settings.py:
        (Setting.__init__):
        (Setting.__str__):
        (Setting.getterFunctionName):
        (parseInput):

            Add support for parsing the 'getter' option.

        * page/Settings.in:
        
            Migrate simple settings from SettingsBase to here.
        
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::SettingsBase):
        (WebCore::SettingsBase::setJavaEnabled): Deleted.
        (WebCore::SettingsBase::setJavaEnabledForLocalFiles): Deleted.
        (WebCore::SettingsBase::setPreferMIMETypeForImages): Deleted.
        (WebCore::SettingsBase::setForcePendingWebGLPolicy): Deleted.
        (WebCore::SettingsBase::setNeedsAdobeFrameReloadingQuirk): Deleted.
        (WebCore::SettingsBase::setFontRenderingMode): Deleted.
        (WebCore::SettingsBase::fontRenderingMode const): Deleted.
        (WebCore::SettingsBase::setShowTiledScrollingIndicator): Deleted.
        (WebCore::SettingsBase::setFontFallbackPrefersPictographs): Deleted.
        * page/SettingsBase.h:
        (WebCore::SettingsBase::isJavaEnabled const): Deleted.
        (WebCore::SettingsBase::isJavaEnabledForLocalFiles const): Deleted.
        (WebCore::SettingsBase::preferMIMETypeForImages const): Deleted.
        (WebCore::SettingsBase::needsAcrobatFrameReloadingQuirk const): Deleted.
        (WebCore::SettingsBase::showTiledScrollingIndicator const): Deleted.
        (WebCore::SettingsBase::setTouchEventEmulationEnabled): Deleted.
        (WebCore::SettingsBase::isTouchEventEmulationEnabled const): Deleted.
        (WebCore::SettingsBase::setTimeWithoutMouseMovementBeforeHidingControls): Deleted.
        (WebCore::SettingsBase::timeWithoutMouseMovementBeforeHidingControls const): Deleted.
        (WebCore::SettingsBase::fontFallbackPrefersPictographs const): Deleted.
        (WebCore::SettingsBase::setMediaKeysStorageDirectory): Deleted.
        (WebCore::SettingsBase::mediaKeysStorageDirectory const): Deleted.
        (WebCore::SettingsBase::setMediaDeviceIdentifierStorageDirectory): Deleted.
        (WebCore::SettingsBase::mediaDeviceIdentifierStorageDirectory const): Deleted.
        (WebCore::SettingsBase::applePayEnabled const): Deleted.
        (WebCore::SettingsBase::setApplePayEnabled): Deleted.
        (WebCore::SettingsBase::applePayCapabilityDisclosureAllowed const): Deleted.
        (WebCore::SettingsBase::setApplePayCapabilityDisclosureAllowed): Deleted.
        (WebCore::SettingsBase::isForcePendingWebGLPolicy const): Deleted.
        
            Remove simple settings.

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

        [FrameView::layout cleanup] Move root/body marking dirty logic to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=178477
        <rdar://problem/35056478>

        Reviewed by Simon Fraser.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::markRootOrBodyRendererDirty const):
        (WebCore::FrameView::layout):
        * page/FrameView.h:

2017-10-18  Keith Miller  <keith_miller@apple.com>

        Setup WebCore build to start using unified sources.
        https://bugs.webkit.org/show_bug.cgi?id=178362

        Reviewed by Tim Horton.

        This patch adds all the long tooling needed to start adding
        unified sources to WebCore. Most of the source list files
        are empty to start but will be filled over the next few days.

        I started by moving all the non-derived bindings code to
        unified sources to make sure everything worked correctly.

        * CMakeLists.txt:
        * Configurations/GenerateUnifiedSources.xcconfig: Added.
        * Configurations/WebCore.xcconfig:
        * PlatformMac.cmake:
        * Sources.txt: Added.
        * SourcesCocoa.txt: Added.
        * SourcesIOS.txt: Added.
        * SourcesMac.txt: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMediaStreamCapabilitiesCustom.cpp: Removed. No one seems to use this...

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

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

        This protocol change broke some internal builds (Requested by
        brrian__ on #webkit).

        Reverted changeset:

        "Web Inspector: provide a way to enable/disable event
        listeners"
        https://bugs.webkit.org/show_bug.cgi?id=177451
        https://trac.webkit.org/changeset/223321

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

        [Settings] Miscellaneous cleanup of the settings generation scripts
        https://bugs.webkit.org/show_bug.cgi?id=178462

        Reviewed by Daniel Bates.

        - Stop generating and remove now unused SettingsMacros.h
        - Make functions operating on the python Setting object member functions
        - Add predicate to determine if a Setting's type is a value type, allowing
          us to exclude those from using const references.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Scripts/GenerateSettings.py:
        * Scripts/GenerateSettings/GenerateInternalSettingsHeaderFile.py:
        * Scripts/GenerateSettings/GenerateInternalSettingsIDLFile.py:
        * Scripts/GenerateSettings/GenerateInternalSettingsImplementationFile.py:
        * Scripts/GenerateSettings/GenerateSettings.py:
        * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py:
        * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py:
        * Scripts/GenerateSettings/GenerateSettingsMacrosHeader.py: Removed.
        * Scripts/GenerateSettings/Settings.py:
        * WebCoreMacros.cmake:
        * WebCore.xcodeproj/project.pbxproj:

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

        Align ImageData constructor with the specification
        https://bugs.webkit.org/show_bug.cgi?id=178406

        Reviewed by Youenn Fablet.

        Align ImageData constructor with the specification:
        - https://html.spec.whatwg.org/multipage/canvas.html#dom-imagedata

        It sometimes throws the wrong exception.

        No new tests, rebaselined existing test.

        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        * html/ImageData.h:
        * html/ImageData.idl:

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

        Add an efficient data structure for WebCore to query if there is a Service Worker registered for a given origin
        https://bugs.webkit.org/show_bug.cgi?id=177876
        <rdar://problem/34813129>

        Reviewed by Ryosuke Niwa.

        No new tests, updatdd existing test.

        * dom/Document.h:
        * testing/Internals.cpp:
        (WebCore::Internals::hasServiceWorkerRegisteredForOrigin):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/ServiceWorkerProvider.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::startServiceWorkerContext):
        * workers/service/server/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::scriptContextStarted):
        (WebCore::SWServer::scriptContextStarted):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptContextFailedToStart):
        (WebCore::SWServerRegistration::scriptContextStarted):
        * workers/service/server/SWServerRegistration.h:

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

        [Settings] Replace macros in Settings.h/cpp with generated code
        https://bugs.webkit.org/show_bug.cgi?id=178419

        Reviewed by Antti Koivisto.

        * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py:
        * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py:

            Rather than use macros in the generated Settings class, generate the code the macros
            would expand to.

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

        [FrameView::layout cleanup] Move frame flattening layout logic to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=178425
        <rdar://problem/35045836>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::handleLayoutWithFrameFlatteningIfNeeded):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded):
        * page/FrameView.h:

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

        Resolve ::before and ::after pseudo elements during style resolution
        https://bugs.webkit.org/show_bug.cgi?id=178339

        Reviewed by Ryosuke Niwa.

        They are currently resolved during render tree building which creates problems with display:contents and animations.

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement):

            Call InspectorInstrumentation from constructor.

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::Parent::Parent):
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::pushParent):

            Push the full update to the parent stack.

        (WebCore::RenderTreeUpdater::popParent):
        (WebCore::RenderTreeUpdater::updateBeforeDescendants):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        (WebCore::RenderTreeUpdater::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        * style/RenderTreeUpdater.h:
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):

            No need to resolve pseudo style, we have it already.

        (WebCore::RenderTreeUpdater::GeneratedContent::needsPseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::updateBeforePseudoElement): Deleted.
        (WebCore::RenderTreeUpdater::GeneratedContent::updateAfterPseudoElement): Deleted.
        * style/RenderTreeUpdaterGeneratedContent.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

            Resolve pseudos.

        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

            Make a private member function.

        (WebCore::Style::TreeResolver::resolveComposedTree):
        * style/StyleTreeResolver.h:
        * style/StyleUpdate.cpp:
        (WebCore::Style::Update::elementUpdates const):
        (WebCore::Style::Update::elementUpdates):

            Bundle the style update for an element and the associated before/after pseudos.

        (WebCore::Style::Update::elementStyle const):
        (WebCore::Style::Update::elementStyle):
        (WebCore::Style::Update::addElement):
        (WebCore::Style::Update::elementUpdate const): Deleted.
        (WebCore::Style::Update::elementUpdate): Deleted.
        * style/StyleUpdate.h:

2017-10-18  Ms2ger  <Ms2ger@igalia.com>

        Update the signatures of texSubImage3D.
        https://bugs.webkit.org/show_bug.cgi?id=178435

        Reviewed by Sam Weinig.

        Update the signatures of texSubImage3D.

        No new tests: not much point in adding tests now; this method doesn't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texSubImage3D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-10-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use LazyNeverDestroyed instead of DEFINE_GLOBAL for WebKitFontFamilyNames
        https://bugs.webkit.org/show_bug.cgi?id=175106

        Reviewed by Yusuke Suzuki.

        No new tests because there is no behavior change.

        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::familyNameFromPrimitive): Call get() method of LazyNeverDestroyed.
        * dom/make_names.pl: Use LazyNeverDestroyed for font names.

2017-10-18  Zan Dobersek  <zdobersek@igalia.com>

        [MSE] Move SourceBuffer's pending append data into the platform implementations
        https://bugs.webkit.org/show_bug.cgi?id=178003

        Reviewed by Jer Noble.

        In SourceBuffer::appendBufferTimerFired(), we can use move semantics to
        pass the pending append data into the platform layer, where it can then
        be used more efficiently.

        Resources in the m_pendingAppendData member are moved into the append()
        call on the SourceBufferPrivate object. The m_pendingAppendData is still
        cleared out manually in case the underlying implementation doesn't clear
        it out through a move operation. The SourceBufferPrivate interface is
        updated to accept a Vector rvalue reference as the only parameter of the
        append() method.

        For the GStreamer implementation, signature of the append() method in
        MediaSourceClientGStreamerMSE class is also updated. The implementation
        now moves the Vector resources over to a on-heap Vector object that is
        then wrapped into a GstBuffer object by using the
        gst_buffer_new_wrapped_full() API and specifying the custom deleter.

        The AVFoundation implementation of SourceBufferPrivate is only updated
        to reflect the changes in the interface. The Vector data that is passed
        in is still copied into the NSData allocation.

        MockSourceBufferPrivate is also updated, with the append data still
        being copied into the m_inputBuffer Vector.

        No new tests -- no change in behavior.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::append):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::append):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::append):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::append):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

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

        [FrameView::layout cleanup] Remove redundant body->renderer()->setChildNeedsLayout() call
        https://bugs.webkit.org/show_bug.cgi?id=178414
        <rdar://problem/35040876>

        Reviewed by Simon Fraser.

        Since m_size always equals to layoutSize() at this point, we never call setChildNeedsLayout() on the body's renderer.
        However a few lines below, when we adjust the frame size and check if oldSize != m_size, we actually
        dirty the body's renderer.

        Covered by existing tests.

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

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

        [Regression] Webkit "-apple-system" font fallback token handles font weights of PingFang incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=177345
        <rdar://problem/32975942>

        Reviewed by Jon Lee.

        This bug has a fairly insideous cause. In particular, the system font fallback path follows
        system conventions, which are not the same as the CSS fallback path. For example, the Chinese
        fallback of San Francisco weight 600 is Ping Fang weight 500. This doesn't match our
        assumptions in CSS, because Ping Fang does have a 600 weight, which CSS would think is closer.
        However, the whole point of system-ui is that it follows the system fallback path, not CSS's.
        Therefore, falling back from a bold system-ui request to a non-bold fallback font is correct
        and expected, and we shouldn't synthesize bold in this situation.

        Test: fast/text/system-ui-chinese-bold-fallback.html

        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):

2017-10-17  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Don't turn fields yellow after filling credentials
        https://bugs.webkit.org/show_bug.cgi?id=178411

        Reviewed by Wenson Hsieh.

        * editing/ios/AutofillElements.cpp:
        (WebCore::AutofillElements::autofill): We don't want to turn fields yellow when filling the user name
        and password. Remove the code that was causing that to happen.

2017-10-16  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add subLocality and subAdministrativeArea to ApplePayPaymentContact and ApplePayError
        https://bugs.webkit.org/show_bug.cgi?id=178191
        <rdar://problem/34906367>

        Reviewed by Tim Horton.

        Added test cases to http/tests/ssl/applepay/ApplePaySession.html.

        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePayPaymentContact.h:
        * Modules/applepay/ApplePayPaymentContact.idl:
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::subLocality):
        (WebCore::setSubLocality):
        (WebCore::subAdministrativeArea):
        (WebCore::setSubAdministrativeArea):
        (WebCore::convert):

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

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

        Introduced a crash in CSSAnimationController::updateAnimations
        (Requested by rniwa on #webkit).

        Reverted changeset:

        "Resolve ::before and ::after pseudo elements during style
        resolution"
        https://bugs.webkit.org/show_bug.cgi?id=178339
        https://trac.webkit.org/changeset/223500

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

        Delete button doesn't fully delete certain emoji
        https://bugs.webkit.org/show_bug.cgi?id=178096
        <rdar://problem/34785106>

        Reviewed by Simon Fraser.

        System infrastructure for handling emoji changes every year. Instead of having
        custom code to specifically walk over codepoints, we should delegate to the
        system handling.

        Tests: editing/deleting/delete-emoji.html
               editing/deleting/delete-emoji-1.html
               editing/deleting/delete-emoji-2.html
               editing/deleting/delete-emoji-3.html
               editing/deleting/delete-emoji-4.html
               editing/deleting/delete-emoji-5.html
               editing/deleting/delete-emoji-6.html
               editing/deleting/delete-emoji-7.html
               editing/deleting/delete-emoji-8.html
               editing/deleting/delete-emoji-9.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset const):
        (WebCore::RenderText::previousOffsetForBackwardDeletion const):
        (WebCore::RenderText::nextOffset const):
        (WebCore::isHangulLVT): Deleted.
        (WebCore::isMark): Deleted.
        (WebCore::isRegionalIndicator): Deleted.
        (WebCore::isInArmenianToLimbuRange): Deleted.

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

        Add preliminary support for fetch event
        https://bugs.webkit.org/show_bug.cgi?id=178171

        Unreviewed.

        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::promiseIsSettled): build fix by removing unnecessary captured this at the moment.

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

        [CSS Font Loading] Fonts are erroneously invisible when the policy says they should be visible
        https://bugs.webkit.org/show_bug.cgi?id=178238

        Reviewed by Simon Fraser.

        When implementing font-display, I added testing infrastructure (so we don't have to wait for
        3 second timeouts to occur). This testing infrastructure covered up a real bug where the wrong
        font would be reported to CSSFontAccessor. This patch reverts the erroneous testing
        infrastructure and replaces it with a real fix to the problem. The replacement fix is covered
        by the same tests that I wrote when implementing the feature.

        Covered by existing tests.

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

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

        [Settings] Generate Settings.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=178361

        Reviewed by Dean Jackson.

        This change generates Settings.h and Settings.cpp exactly as they are,
        using SettingsMacros.h and everything. In follow up changes, the use of
        SettingsMacros.h will be removed.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Scripts/GenerateSettings.py:
        * Scripts/GenerateSettings/GenerateSettings.py:
        * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py: Added.
        * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreMacros.cmake:
        * page/Settings.cpp: Removed.
        * page/Settings.h: Removed.

2017-10-17  Ms2ger  <Ms2ger@igalia.com>

        Create bindings for WebGL2's versions of texSubImage2D.
        https://bugs.webkit.org/show_bug.cgi?id=178382

        Reviewed by Ryosuke Niwa.

        Create bindings for WebGL2's versions of texSubImage2D.

        No new tests: not much point in adding tests now; this method doesn't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLRenderingContextBase.idl:

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

        [FrameView::layout cleanup] Subtree should read subtreeLayout.
        https://bugs.webkit.org/show_bug.cgi?id=178401

        Reviewed by Simon Fraser.

        Rename some variables to improve readability.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::shouldDisableLayoutStateForSubtree):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::willDestroyRenderTree):
        (WebCore::FrameView::didDestroyRenderTree):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::convertSubtreeLayoutToFullLayout):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::needsLayout const):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/FrameView.h:

2017-10-16  Dean Jackson  <dino@apple.com>

        WebGL clamps drawingBufferWidth to 4096 pixels on a 5120 monitor/canvas
        https://bugs.webkit.org/show_bug.cgi?id=178223
        <rdar://problem/34597567>

        Reviewed by Antoine Quint.

        Remove the limit of 4k on the width/height of the renderbuffer.

        Test: fast/canvas/webgl/large-drawing-buffer-resize.html

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

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

        Add and remove cookie partition accordingly in intermediary redirect requests
        https://bugs.webkit.org/show_bug.cgi?id=178369
        <rdar://problem/34467603>

        Reviewed by Brent Fulgham.

        Tests: http/tests/resourceLoadStatistics/add-partitioning-to-redirect.html
               http/tests/resourceLoadStatistics/remove-partitioning-from-redirect.html

        * loader/ResourceLoadObserver.h:
            Now exposes notifyObserver() so that it can be triggered
            by the TestRunner.
            Removed unimplemented ResourceLoadObserver::setShouldThrottleObserverNotifications().

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

        Corrupted image after looping movie-backed <img>.
        https://bugs.webkit.org/show_bug.cgi?id=178398

        Reviewed by Eric Carlson.

        Use the decode-order sample cursor rather than the destination sample cursor when generating
        the CMSampleBuffer to decode.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):

2017-10-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223459.

        This change introduced LayoutTest failures.

        Reverted changeset:

        "WebGL clamps drawingBufferWidth to 4096 pixels on a 5120
        monitor/canvas"
        https://bugs.webkit.org/show_bug.cgi?id=178223
        https://trac.webkit.org/changeset/223459

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

        Add preliminary support for fetch event
        https://bugs.webkit.org/show_bug.cgi?id=178171

        Reviewed by Chris Dumez.

        Test: http/wpt/service-workers/fetchEvent.https.html
              http/wpt/service-workers/extendableEvent.https.html

        Adding support for ExtendableEvent and FetchEvent as per 
        https://w3c.github.io/ServiceWorker/v1/#extendableevent-interface and
        https://w3c.github.io/ServiceWorker/v1/#fetchevent-interface.

        Both events need to handle promises as method parameters.
        Beefing up DOMPromise for that purpose by exposing status, result and being able to call then.
        Adding a new DOMPromise create method that would be the base for https://heycam.github.io/webidl/#es-promise
        which might be implemented in the binding generator as a follow-up.

        This patch makes them exposed on Window for test purposes until they can be fully tested on ServiceWorker environment.
        It is also adding two internal methods for the same reason. These should be removed once events can be tested in its environment.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/fetch/FetchResponse.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMPromise.cpp: Added.
        (WebCore::callFunction):
        (WebCore::DOMPromise::create):
        (WebCore::DOMPromise::whenSettled):
        (WebCore::DOMPromise::result const):
        (WebCore::DOMPromise::status const):
        * bindings/js/JSDOMPromise.h:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:
        * testing/Internals.cpp:
        (WebCore::Internals::waitFetchEventToFinish):
        (WebCore::Internals::waitExtendableEventToFinish):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/ExtendableEvent.cpp: Added.
        (WebCore::ExtendableEvent::ExtendableEvent):
        (WebCore::ExtendableEvent::waitUntil):
        (WebCore::ExtendableEvent::addPendingPromise):
        * workers/service/ExtendableEvent.h:
        (WebCore::ExtendableEvent::onFinishedWaiting):
        (WebCore::ExtendableEvent::promiseSettled):
        * workers/service/ExtendableEvent.idl: Added.
        * workers/service/ExtendableEventInit.h: Added.
        * workers/service/ExtendableEventInit.idl: Added.
        * workers/service/FetchEvent.cpp: Added.
        (WebCore::FetchEvent::FetchEvent):
        (WebCore::FetchEvent::respondWith):
        (WebCore::FetchEvent::onResponse):
        (WebCore::FetchEvent::respondWithError):
        (WebCore::FetchEvent::processResponse):
        (WebCore::FetchEvent::promiseSettled):
        * workers/service/FetchEvent.h:
        * workers/service/FetchEvent.idl:

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

        Leak of one AVSampleCursor inside ImageDecoderAVFObjC::createFrameImageAtIndex()
        https://bugs.webkit.org/show_bug.cgi?id=178397

        Reviewed by Eric Carlson.

        Explicitly wrap the return value of -copy in a RetainPtr.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):

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

        Cache API implementation should be able to compute storage size for WebKit client applications.
        https://bugs.webkit.org/show_bug.cgi?id=178350

        Reviewed by Chris Dumez.

        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::equals const):

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

        ASSERTION FAILED: m_truncation != cFullTruncation in InlineTextBox::clampedOffset()
        https://bugs.webkit.org/show_bug.cgi?id=178322

        Reviewed by Darin Adler.

        It is acceptable for InlineTextBox::clampedOffset() to be called for a fully truncated box,
        say a person clicks on the ellipsis in a truncated text run. Restore the behavior prior to
        r223259 and return the clamped offset.

        Test: fast/text/click-ellipsis-assertion-failure.html

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

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

        REGRESSION (r222670 and r222732): RTL truncated text may not be drawn
        https://bugs.webkit.org/show_bug.cgi?id=178278
        <rdar://problem/34982818>

        Reviewed by Darin Adler.

        Revert r222732 and partially revert r222670. The underlying font rendering machinery implements
        text truncation by taking a TextRun object that represents all of the text in the line fragment
        and a subrange of the glyphs to render from this fragment. Only the glyphs in this subrange are
        drawn and they are drawn in the same position they would be in had the entire line fragment been
        drawn. Following r222670 InlineTextBox applies the truncation to the TextRun in InlineTextBox::text().
        Together with r222732, which assumed that the number of glyphs to draw is equal to the length of
        the TextRun, a truncated text run would be drawn at the wrong position on screen and could give
        the impression that the text is not drawn. Instead InlineTextBox::text() should always return
        the text for the entire line fragment without considering truncation and when calling TextPainter::paint()
        we need to pass the truncated length of the line fragment.

        Test: fast/text/ellipsis-text-rtl.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Compute the truncated length (number of glyphs) and pass this
        to TextPainter::paint()
        (WebCore::InlineTextBox::text const): Do not apply truncation to the text run. Truncation is
        implemented by telling the underlying font rendering machinery to paint the subrange of the
        text run that represents the non-truncated (visible) text.
        * rendering/InlineTextBox.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow): Pass the entire length of the text run as we did prior
        to r222732.
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paint): Take a length that represents the number of glyphs to draw from
        the text run as we use to take prior to r222732.
        * rendering/TextPainter.h:

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

        [FrameView::layout cleanup] Move text auto sizing logic to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=178391
        <rdar://problem/35030264>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::applyTextSizingIfNeeded):
        (WebCore::FrameView::layout):

2017-10-17  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [Curl] Forward declaration "class Cookie;" in CookieJarCurl.h should be "struct Cookie;"
        https://bugs.webkit.org/show_bug.cgi?id=178378

        Reviewed by Per Arne Vollan.

        No new tests. No change in behaviors.

        * platform/network/curl/CookieJarCurl.h:

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

        [FrameView::layout cleanup] Merge InPreLayout blocks
        https://bugs.webkit.org/show_bug.cgi?id=178373

        Reviewed by Antti Koivisto.

        Remove redundant comment and scoping.

        No change in functionality.

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

2017-10-17  Antti Koivisto  <antti@apple.com>

        Text nodes with display:contents parent should render as if they were wrapped in an unstyled <span>
        https://bugs.webkit.org/show_bug.cgi?id=178332

        Reviewed by Ryosuke Niwa.

        According to https://github.com/w3c/csswg-drafts/issues/1118

            <div style="display:contents;color:green">text</div>

        must result in green text even though div doesn't generate a box.

        This patch implements the behavior by wrapping text renderers with display:contents parent element
        in an anonymous inline box that receives its style by inheriting from the parent element.

        * dom/Document.cpp:
        (WebCore::Document::updateTextRenderer):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::computeFirstLineStyle const):

            Synthesize the first line style in display:contents parent case.

        * rendering/RenderObject.cpp:
        (WebCore::findDestroyRootIncludingAnonymous):

            Factor into a function.

        (WebCore::RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers):

            Get rid of the anonymous wrapper if it exists.

        * rendering/RenderText.cpp:
        (WebCore::inlineWrapperForDisplayContentsMap):
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::willBeDestroyed):
        (WebCore::RenderText::inlineWrapperForDisplayContents):
        (WebCore::RenderText::setInlineWrapperForDisplayContents):

            Add a weak member (implemented as a rare data map) for holding the wrapper pointer.

        (WebCore::RenderText::findByDisplayContentsInlineWrapperCandidate):

            Helper to get the text renderer for a wrapper.

        * rendering/RenderText.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::createTextRenderer):
        (WebCore::RenderTreeUpdater::updateTextRenderer):

            Create the wrapper if needed.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveComposedTree):

            Compute the wrapper style by inheriting from the display:contents parent.

        * style/StyleUpdate.h:
        (WebCore::Style::TextUpdate::TextUpdate):

2017-10-17  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Insert parser elements in AppendPipeline when demuxing opus or Vorbis
        https://bugs.webkit.org/show_bug.cgi?id=178076

        Reviewed by Xabier Rodriguez-Calvar.

        YouTube does not include durations in the WebM container for files
        containing Opus audio, so we need to read them from the contained
        stream. Fortunately, GStreamer has an element to do that: opusparse.

        The same thing happens with Vorbis contained in WebM files from the
        W3C tests, which should also be fixed by the GStreamer element
        vorbisparse.

        This patch adds an opusparse or vorbisparse element to the
        AppendPipeline at the sinkpad of the demuxer when either is found.

        Tests: updated expectations.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::createOptionalParserForFormat):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/GStreamerMediaSample.cpp:
        (WebCore::GStreamerMediaSample::GStreamerMediaSample):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::attachTrack):

2017-10-17  Ms2ger  <Ms2ger@igalia.com>

        Add WebGL2 texImage3D overloads.
        https://bugs.webkit.org/show_bug.cgi?id=178119

        Reviewed by Ryosuke Niwa.

        No new tests: not much point in adding tests now; this method doesn't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texImage3D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-10-17  Antti Koivisto  <antti@apple.com>

        Resolve ::before and ::after pseudo elements during style resolution
        https://bugs.webkit.org/show_bug.cgi?id=178339

        Reviewed by Ryosuke Niwa.

        They are currently resolved during render tree building which creates problems with display:contents and animations.

        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement):

            Call InspectorInstrumentation from constructor.

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::Parent::Parent):
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::pushParent):

            Push the full update to the parent stack.

        (WebCore::RenderTreeUpdater::popParent):
        (WebCore::RenderTreeUpdater::updateBeforeDescendants):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        (WebCore::RenderTreeUpdater::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        * style/RenderTreeUpdater.h:
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):

            No need to resolve pseudo style, we have it already.

        (WebCore::RenderTreeUpdater::GeneratedContent::needsPseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::updateBeforePseudoElement): Deleted.
        (WebCore::RenderTreeUpdater::GeneratedContent::updateAfterPseudoElement): Deleted.
        * style/RenderTreeUpdaterGeneratedContent.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

            Resolve pseudos.

        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

            Make a private member function.

        (WebCore::Style::TreeResolver::resolveComposedTree):
        * style/StyleTreeResolver.h:
        * style/StyleUpdate.cpp:
        (WebCore::Style::Update::elementUpdates const):
        (WebCore::Style::Update::elementUpdates):

            Bundle the style update for an element and the associated before/after pseudos.

        (WebCore::Style::Update::elementStyle const):
        (WebCore::Style::Update::elementStyle):
        (WebCore::Style::Update::addElement):
        (WebCore::Style::Update::elementUpdate const): Deleted.
        (WebCore::Style::Update::elementUpdate): Deleted.
        * style/StyleUpdate.h:

2017-10-17  Keith Miller  <keith_miller@apple.com>

        Change WebCore sources to work with unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=178229

        Rubber stamped by Tim Horton.

        This patch does the following:

        1) Move all “using namespace <name>;” into the WebCore namespace
        (They used to go in the global namespace) and change to "using
        WebCore::<name>;” in .mm files.

        2) Move a bunch of the soft linking library/framework macros out
        of the .mm files since those caused name collision problems.

        3) Fix minor other naming collisions.

        The problem with 1 in a unified source world is generic names
        often collide with system header names. For example, WebCore has a
        Rect class and that collided with a system header type elsewhere.

        This patch shouldn't change behavior so no new tests.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/cache/CacheStorageConnection.cpp:
        * Modules/cache/DOMCache.cpp:
        * Modules/cache/DOMCacheStorage.cpp:
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        * Modules/encryptedmedia/InitDataRegistry.cpp:
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBKeyRange.cpp:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setReadyState):
        (WebCore::toString): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::jsValueWithAVMetadataItemInContext):
        * Modules/webdriver/NavigatorWebDriver.cpp:
        * PlatformAppleWin.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (-[WAKView accessibilityIsIgnored]): Deleted.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WAKView accessibilityIsIgnored]):
        * accessibility/win/AXObjectCacheWin.cpp:
        * bindings/js/CommonVM.cpp:
        * bindings/js/DOMWrapperWorld.cpp:
        * bindings/js/GCController.cpp:
        * bindings/js/IDBBindingUtilities.cpp:
        * bindings/js/JSAudioTrackCustom.cpp:
        * bindings/js/JSAudioTrackListCustom.cpp:
        * bindings/js/JSBlobCustom.cpp:
        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSRuleListCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCallbackData.cpp:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * bindings/js/JSCustomElementInterface.cpp:
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        * bindings/js/JSCustomEventCustom.cpp:
        * bindings/js/JSDOMBindingSecurity.cpp:
        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
        * bindings/js/JSDOMConstructorBase.cpp:
        * bindings/js/JSDOMConstructorWithDocument.cpp:
        * bindings/js/JSDOMConvertDate.cpp:
        * bindings/js/JSDOMConvertNumbers.cpp:
        * bindings/js/JSDOMConvertStrings.cpp:
        * bindings/js/JSDOMConvertWebGL.cpp:
        * bindings/js/JSDOMExceptionHandling.cpp:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMGuardedObject.cpp:
        * bindings/js/JSDOMPromiseDeferred.cpp:
        * bindings/js/JSDOMQuadCustom.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowProxy.cpp:
        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSDOMWrapperCache.cpp:
        * bindings/js/JSDeprecatedCSSOMValueCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSDocumentFragmentCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSErrorHandler.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventTargetCustom.cpp:
        * bindings/js/JSFileSystemEntryCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSIDBCursorCustom.cpp:
        * bindings/js/JSIDBCursorWithValueCustom.cpp:
        * bindings/js/JSIDBIndexCustom.cpp:
        * bindings/js/JSIDBObjectStoreCustom.cpp:
        * bindings/js/JSIDBTransactionCustom.cpp:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMediaStreamCapabilitiesCustom.cpp:
        * bindings/js/JSMessageEventCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSMutationObserverCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSPerformanceEntryCustom.cpp:
        * bindings/js/JSPluginElementFunctions.cpp:
        * bindings/js/JSPopStateEventCustom.cpp:
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        * bindings/js/JSReadableStreamSourceCustom.cpp:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * bindings/js/JSTextTrackCueCustom.cpp:
        * bindings/js/JSTextTrackCustom.cpp:
        * bindings/js/JSTextTrackListCustom.cpp:
        * bindings/js/JSTrackCustom.cpp:
        * bindings/js/JSVideoTrackCustom.cpp:
        * bindings/js/JSVideoTrackListCustom.cpp:
        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * bindings/js/JSWebGPURenderPassAttachmentDescriptorCustom.cpp:
        * bindings/js/JSWebGPURenderingContextCustom.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        * bindings/js/JSXPathNSResolverCustom.cpp:
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::pipeTo):
        (WebCore::ReadableStream::tee):
        (WebCore::checkReadableStream):
        (WebCore::callFunction): Deleted.
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptCachedFrameData.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/StructuredClone.cpp:
        * bindings/js/WebCoreJSClientData.cpp:
        * bindings/js/WorkerScriptController.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumerationImplementation):
        (GenerateImplementation):
        (GenerateDictionaryImplementation):
        (GenerateCallbackFunctionImplementation):
        (GenerateCallbackInterfaceImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.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/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp:
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.cpp:
        * bridge/IdentifierRep.cpp:
        * bridge/NP_jsobject.cpp:
        (ObjectMap::get): Deleted.
        (ObjectMap::add): Deleted.
        (ObjectMap::remove): Deleted.
        (objectMap): Deleted.
        (ObjectMap::RootObjectInvalidationCallback::operator()): Deleted.
        (getListFromVariantArgs): Deleted.
        (jsAllocate): Deleted.
        (jsDeallocate): Deleted.
        (_NPN_CreateNoScriptObject): Deleted.
        (_NPN_InvokeDefault): Deleted.
        (_NPN_Invoke): Deleted.
        (_NPN_Evaluate): Deleted.
        (_NPN_GetProperty): Deleted.
        (_NPN_SetProperty): Deleted.
        (_NPN_RemoveProperty): Deleted.
        (_NPN_HasProperty): Deleted.
        (_NPN_HasMethod): Deleted.
        (_NPN_SetException): Deleted.
        (_NPN_Enumerate): Deleted.
        (_NPN_Construct): Deleted.
        * bridge/NP_jsobject.h:
        * contentextensions/ContentExtensionParser.cpp:
        * crypto/SubtleCrypto.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        (WebCore::CryptoAlgorithmAES_CBC::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        (WebCore::CryptoAlgorithmAES_CFB::importKey):
        (WebCore::CryptoAlgorithmAES_CFB::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::parametersAreValid):
        (WebCore::CryptoAlgorithmAES_CTR::importKey):
        (WebCore::CryptoAlgorithmAES_CTR::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::tagLengthIsValid):
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        (WebCore::CryptoAlgorithmAES_GCM::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        (WebCore::CryptoAlgorithmAES_KW::exportKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        (WebCore::CryptoAlgorithmHMAC::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        (WebCore::CryptoAlgorithmRSA_OAEP::exportKey):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::importKey):
        (WebCore::CryptoAlgorithmRSA_PSS::exportKey):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        (WebCore::commonCryptoHMACAlgorithm): Deleted.
        * css/CSSBasicShapes.cpp:
        * css/CSSPrimitiveValue.cpp:
        * css/parser/CSSParser.cpp:
        * css/parser/CSSPropertyParser.cpp:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::positionFromThreeOrFourValues):
        (WebCore::CSSPropertyParserHelpers::consumePosition):
        (WebCore::CSSPropertyParserHelpers::createPrimitiveValuePair): Deleted.
        * dom/DOMQuad.cpp:
        * dom/Document.cpp:
        * dom/ErrorEvent.cpp:
        * dom/EventListenerMap.cpp:
        * dom/EventTarget.cpp:
        * dom/PromiseRejectionEvent.cpp:
        * dom/RejectedPromiseTracker.cpp:
        * dom/ScriptExecutionContext.cpp:
        * domjit/JSDocumentDOMJIT.cpp:
        * domjit/JSDocumentFragmentDOMJIT.cpp:
        * domjit/JSElementDOMJIT.cpp:
        * domjit/JSEventDOMJIT.cpp:
        * domjit/JSNodeDOMJIT.cpp:
        * editing/TextIterator.cpp:
        * editing/cocoa/HTMLConverter.mm:
        * history/CachedPage.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLFontElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLSelectElement.cpp:
        * html/TypeAhead.cpp:
        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::tokenizeDescriptors):
        * html/parser/HTMLTokenizer.cpp:
        * html/parser/ParsingUtilities.h:
        (WebCore::isNotASCIISpace):
        * html/parser/XSSAuditorDelegate.cpp:
        * html/track/DataCue.cpp:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIModule.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCanvas.cpp:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorClient.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorNetworkAgent.cpp:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorShaderProgram.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InstrumentingAgents.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageHeapAgent.cpp:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageScriptDebugServer.cpp:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/WebConsoleAgent.cpp:
        * inspector/WebDebuggerAgent.cpp:
        * inspector/WebHeapAgent.cpp:
        * inspector/WebInjectedScriptHost.cpp:
        * inspector/WebInjectedScriptManager.cpp:
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.cpp:
        * inspector/WorkerScriptDebugServer.cpp:
        * loader/FTPDirectoryParser.cpp:
        * loader/TextResourceDecoder.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * page/ContextMenuController.cpp:
        * page/DOMWindow.cpp:
        * page/Navigator.cpp:
        * page/PageConsoleClient.cpp:
        * page/PageDebuggable.cpp:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        * page/csp/ContentSecurityPolicy.cpp:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::isNotASCIISpace): Deleted.
        * page/csp/ContentSecurityPolicyMediaListDirective.cpp:
        (WebCore::isNotASCIISpace): Deleted.
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):
        (WebCore::operator*): Deleted.
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange):
        (WebCore::operator*): Deleted.
        * platform/Length.cpp:
        * platform/URL.cpp:
        (WebCore::isSchemeFirstChar):
        (WebCore::isSchemeChar):
        (WebCore::isBadChar):
        (WebCore::isTabNewline):
        * platform/audio/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pushSamples):
        * platform/cf/CoreMediaSoftLink.cpp: Removed.
        * platform/cf/CoreMediaSoftLink.h: Removed.
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        * platform/graphics/FloatPolygon.cpp:
        (WebCore::areCollinearPoints):
        (WebCore::FloatPolygon::FloatPolygon):
        (WebCore::VertexPair::intersection const):
        (WebCore::determinant): Deleted.
        * platform/graphics/FontCache.cpp:
        * platform/graphics/FontCascade.cpp:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        * platform/graphics/WidthIterator.cpp:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::process):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes):
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples):
        (WebCore::InbandTextTrackPrivateAVF::readNativeSampleBuffer):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:
        (WebCore::assetTrackMeetsHardwareDecodeRequirements):
        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::readSampleMetadata):
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer):
        (WebCore::ImageDecoderAVFObjC::frameIsCompleteAtIndex const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::releaseImageData): Deleted.
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        * platform/graphics/opentype/OpenTypeVerticalData.cpp:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::MatrixTransformOperation::blend):
        (WebCore::createOperation): Deleted.
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        * platform/graphics/win/FontWin.cpp:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        * platform/graphics/win/UniscribeController.cpp:
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (): Deleted.
        * platform/ios/LegacyTileLayer.mm:
        (-[LegacyTileHostLayer renderInContext:]):
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        * platform/ios/ScrollAnimatorIOS.mm:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController skipBackwardThirtySeconds:]):
        (-[WebAVPlayerController gotoEndOfSeekableRanges:]):
        (-[WebAVPlayerController canSeekToBeginning]):
        (-[WebAVPlayerController canSeekToEnd]):
        (-[WebAVPlayerController observeValueForKeyPath:ofObject:change:context:]):
        (-[WebAVPlayerController updateMinMaxTiming]):
        * platform/ios/WebEvent.mm:
        * platform/ios/WebItemProviderPasteboard.mm:
        * platform/ios/wak/WKContentObservation.cpp:
        * platform/mac/KeyEventMac.mm:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::timeRangesToArray):
        * platform/mac/ScrollAnimatorMac.mm:
        (macScrollbarTheme): Deleted.
        (scrollerImpForScrollbar): Deleted.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarMap):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::dataForURLComponentType):
        * platform/mac/WebPlaybackControlsManager.mm:
        * platform/mac/WebVideoFullscreenController.mm:
        (SOFT_LINK_CLASS): Deleted.
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        * platform/mac/WebWindowAnimation.mm:
        (WebWindowAnimationDurationFromDuration): Deleted.
        (scaledRect): Deleted.
        (squaredDistance): Deleted.
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::applyFrameRate):
        (WebCore::AVVideoCaptureSource::processNewFrame):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer):
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.cpp:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        * platform/network/HTTPParsers.cpp:
        * platform/text/LocaleICU.cpp:
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecUTF8.cpp:
        * platform/text/TextEncodingRegistry.cpp:
        * platform/text/win/LocaleWin.cpp:
        * platform/win/BString.cpp:
        * platform/win/KeyEventWin.cpp:
        * platform/win/ScrollbarThemeWin.cpp:
        * rendering/BidiRun.cpp:
        * rendering/FloatingObjects.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderQuote.cpp:
        * rendering/RenderText.cpp:
        * rendering/RenderThemeWin.cpp:
        * testing/Internals.cpp:
        * testing/js/WebCoreTestSupport.cpp:
        * workers/WorkerConsoleClient.cpp:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerInspectorProxy.cpp:
        * xml/SoftLinkLibxslt.cpp: Added.
        * xml/SoftLinkLibxslt.h: Added.
        * xml/XPathGrammar.cpp:
        * xml/XPathParser.cpp:
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTExtensions.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/XSLTUnicodeSort.cpp:
        (xsltTransformErrorTrampoline):
        (WebCore::xsltUnicodeSortFunction):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::updateLeafTextNode):
        (WebCore::toString): Deleted.

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

        Allow reading data and blob URLs via DataTransfer when the pasteboard contains files
        https://bugs.webkit.org/show_bug.cgi?id=178377

        Reviewed by Ryosuke Niwa.

        Adds data and blob URLs, alongside http(s), as URL protocols safe to expose to bindings.

        Test: editing/pasteboard/drag-drop-href-as-url.html

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

2017-10-16  Ryosuke Niwa  <rniwa@webkit.org>

        Strip away event handlers and JavaScript URLs when copying
        https://bugs.webkit.org/show_bug.cgi?id=178375

        Reviewed by Wenson Hsieh.

        Don't serialize event handlers and URLs with javascript protocol when serializing HTML
        since they're not safe to be pasted elsewhere.

        Test: editing/pasteboard/copying-html-strips-javascript-url-and-event-handler.html

        * dom/Element.cpp:
        (WebCore::Element::isEventHandlerAttribute const):
        (WebCore::isEventHandlerAttribute): Deleted.
        * dom/Element.h:
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):

2017-10-16  Dean Jackson  <dino@apple.com>

        WebGL clamps drawingBufferWidth to 4096 pixels on a 5120 monitor/canvas
        https://bugs.webkit.org/show_bug.cgi?id=178223
        <rdar://problem/34597567>

        Reviewed by Antoine Quint.

        Remove the limit of 4k on the width/height of the renderbuffer.

        Test: fast/canvas/webgl/large-drawing-buffer-resize.html

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

2017-10-16  Ryosuke Niwa  <rniwa@webkit.org>

        Assert that Node::insertedInto doesn't fire an event
        https://bugs.webkit.org/show_bug.cgi?id=178376
        <rdar://problem/35022857>

        Reviewed by Daniel Bates.

        Fixed the assertion in notifyChildNodeInserted since this function MUST NOT dispatch an event,
        and moved a bunch of event-dispatching code from Node::insertedInto into Node::finishedInsertingSubtree.

        No new tests since the existing tests cover the behavioral change.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted): Fixed the assertion.
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::insertedInto):
        (WebCore::ProcessingInstruction::finishedInsertingSubtree): Extracted from insertedInto since
        checkStyleSheet can dispatch an event.
        * dom/ProcessingInstruction.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedInto):
        (WebCore::HTMLBodyElement::finishedInsertingSubtree): Extracted from insertedInto since
        setIntegralAttribute could dispatch DOMAttrModified synchronously.
        * html/HTMLBodyElement.h:

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

        ServiceWorkerRegistration should subclass RefCounted<>
        https://bugs.webkit.org/show_bug.cgi?id=178374

        Reviewed by Ryosuke Niwa.

        ServiceWorkerRegistration should subclass RefCounted<> or we end up with an infinite recursion
        when constructing such object. This is because ServiceWorkerRegistration subclasses
        EventTargetWithInlineData which implements ref() / deref() by calling refEventTarget() /
        derefEventTarget(). refEventTarget() / derefEventTarget() are implemented in
        ServiceWorkerRegistration so that they call ref() / deref() (which ends up being EventTarget's
        methods).

        * workers/service/ServiceWorkerRegistration.h:

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

        ImageDecoderAVFObjC fails to create more CMSampleBuffers after creating about 32MB worth.
        https://bugs.webkit.org/show_bug.cgi?id=178360

        Reviewed by Eric Carlson.

        AVSampleBufferGenerator has a constrained memory pool of about 32MB in size. Once
        CMSampleBuffers representing about 32MB of memory are allocated, no more can be created
        until previously created ones are released. So rather than (only) creating the sample
        buffers up front in readSampleMetadata(), also create them dynamically, if missing, in
        createFrameImageAtIndex(...) and release them in storeSampleBuffer(...) after they have been
        decoded.

        Drive-by fix: the expected content length was never actually set by the owner of ImageDecoderAVFObjC.
        Now that the expected content length is available, we don't have to wait until the data is complete
        to respond to requests.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ensureDecoderAvailable):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (SOFT_LINK_POINTER_OPTIONAL):
        (-[WebCoreSharedBufferResourceLoaderDelegate canFulfillRequest:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate fulfillRequest:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (WebCore::imageDecoderAssetOptions):
        (WebCore::ImageDecoderAVFObjC::firstEnabledTrack):
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer):
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):
        (WebCore::ImageDecoderAVFObjC::setExpectedContentSize):

2017-10-12  Matt Rajca  <mrajca@apple.com>

        Add API support for quirk that lets an arbitrary click allow auto-play.
        https://bugs.webkit.org/show_bug.cgi?id=178227

        Reviewed by Alex Christensen.

        Added API test.
        
        Instead of hardcoding sites in WebCore, let API clients control which websites opt into the quirk that lets
        an arbitrary click allow auto-play via website policies.

        * html/MediaElementSession.cpp:
        (WebCore::needsArbitraryUserGestureAutoplayQuirk):
        * loader/DocumentLoader.h:

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

        DOMQuad.p1 / p2 / p3 / p4 should behave as [SameObject]
        https://bugs.webkit.org/show_bug.cgi?id=178366

        Reviewed by Youenn Fablet.

        DOMQuad.p1 / p2 / p3 / p4 should behave as [SameObject]. We attempted to do so using JSDOMQuad::visitAdditionalChildren()
        but the code did not work because we failed to generate a "isReachableFromOpaqueRoots()" function for JSDOMPoint.

        Test: fast/css/DOMQuad-points-SameObject.html

        * dom/DOMPoint.idl:

2017-10-16  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add subLocality and subAdministrativeArea to ApplePayPaymentContact and ApplePayError
        https://bugs.webkit.org/show_bug.cgi?id=178191
        <rdar://problem/34906367>

        Reviewed by Tim Horton.

        Added test cases to http/tests/ssl/applepay/ApplePaySession.html.

        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePayPaymentContact.h:
        * Modules/applepay/ApplePayPaymentContact.idl:
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::subLocality):
        (WebCore::setSubLocality):
        (WebCore::subAdministrativeArea):
        (WebCore::setSubAdministrativeArea):
        (WebCore::convert):

2017-10-16  Alex Christensen  <achristensen@webkit.org>

        Allow modern decoding of URLs
        https://bugs.webkit.org/show_bug.cgi?id=178265

        Reviewed by Chris Dumez.

        * platform/URL.h:
        (WebCore::URL::decode):

2017-10-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223425.

        This change broke internal builds.

        Reverted changeset:

        "Remove unnecessary include from Document.h"
        https://bugs.webkit.org/show_bug.cgi?id=178247
        https://trac.webkit.org/changeset/223425

2017-10-16  Maureen Daum  <mdaum@apple.com>

        If an origin doesn't have databases in the Databases table we should still remove its information from disk in DatabaseTracker::deleteOrigin()
        https://bugs.webkit.org/show_bug.cgi?id=178281
        <rdar://problem/34576132>

        Reviewed by Brent Fulgham.

        New test:
        DatabaseTracker.DeleteOriginWithMissingEntryInDatabasesTable

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):
        If databaseNames is empty, don't bail early. Instead, delete everything in the directory
        containing the databases for this origin. This condition indicates that we previously
        tried to remove the origin but didn't get all of the way through the deletion process.
        Because we have lost track of the databases for this origin, we can assume that no
        other process is accessing them. This means it should be safe to delete them outright.

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

        [FETCH] Remove Request.type getter
        https://bugs.webkit.org/show_bug.cgi?id=177798

        Reviewed by Chris Dumez.

        Tests: imported/w3c/web-platform-tests/fetch/api/request/request-type-attribute-historical.html
               imported/w3c/web-platform-tests/fetch/api/request/url-encoding.html

        Removing FetchRequest type getter.
        Merging Type and Destination as per https://fetch.spec.whatwg.org/#concept-request-destination.
        Setting destination of request within CachedResourceLoader as this will be useful to Service Workers.

        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequest.idl:
        * loader/FetchOptions.h:
        (WebCore::FetchOptions::isolatedCopy const):
        (WebCore::FetchOptions::FetchOptions):
        (WebCore::FetchOptions::encode const):
        (WebCore::FetchOptions::decode):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::isolatedCopy const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestMedia):
        (WebCore::CachedResourceLoader::requestIcon):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestBeaconResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setDestinationIfNotSet):
        * loader/cache/CachedResourceRequest.h:

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

        Cannot access images included in the content pasted from Microsoft Word
        https://bugs.webkit.org/show_bug.cgi?id=124391
        <rdar://problem/26862741>

        Reviewed by Antti Koivisto.

        The bug is caused by the fact Microsoft Word generates HTML content which references an image using file URL.
        Because the websites don't have access to arbtirary file URLs, this prevents editors such as TinyMCE to save
        those images.

        This patch fixes the problem by converting file URLs for images and all other subresources in the web archive
        generated by Microsoft Word by blob URLs like r222839 for RTF/RTFD and r222119 for images.

        To avoid revealing privacy sensitive information such as the absolute local file path to the user's home directory
        Microsoft Word and other applications in the system includes in the web archive placed in the system pasteboard,
        this patch also introduces the mechanism to sanitize when the HTML content is read by DataTransfer's getData.

        This patch also introduces the sanitization for when writing HTML into the pasteboard since other applications
        in the syste which is capable to processing web archives are not necessarily equipped to pretect itself and the
        rest of the system from potentially dangerous JavaScript included in the web archive placed in the system pasteboard.

        Finally, this patch expands the list of clipboard types that are exposed as "text/html" to the Web platform by
        adding the capability to convert RTF, RTFD, and web archive into HTML markup by introducing WebContentMarkupReader,
        a new subclass of PasteboardWebContentReader which creates a HTML markup instead of a document fragment. Most of
        the sanitization process happens in this new class, and will be expanded to WebContentReader to make pasting safer.

        Tests: editing/pasteboard/data-transfer-get-data-on-pasting-html-uses-blob-url.html
               editing/pasteboard/data-transfer-set-data-sanitizes-html-when-copying-in-null-origin.html
               editing/pasteboard/data-transfer-set-data-sanitizes-html-when-copying.html
               editing/pasteboard/data-transfer-set-data-sanitlize-html-when-dragging-in-null-origin.html
               http/tests/security/clipboard/copy-paste-html-across-origin-sanitizes-html.html
               CopyHTML.Sanitizes
               DataInteractionTests.DataTransferSanitizeHTML
               PasteRTF.ExposesHTMLTypeInDataTransfer
               PasteRTFD.ExposesHTMLTypeInDataTransfer
               PasteRTFD.ImageElementUsesBlobURLInHTML
               PasteWebArchive.ExposesHTMLTypeInDataTransfer

        * dom/DataTransfer.cpp:
        (WebCore::originIdentifierForDocument): Moved to Document::originIdentifierForPasteboard.
        (WebCore::DataTransfer::createForCopyAndPaste):
        (WebCore::DataTransfer::getDataForItem const): Use WebContentMarkupReader read HTMl content so that we can read
        web arhive, RTF, and RTFD as text/html.
        (WebCore::DataTransfer::getData const):
        (WebCore::DataTransfer::setData):
        (WebCore::DataTransfer::setDataFromItemList): Sanitize the HTML before placing into the system pasteboard.
        (WebCore::DataTransfer::createForDragStartEvent):
        (WebCore::DataTransfer::createForDrop):
        (WebCore::DataTransfer::createForUpdatingDropTarget):
        * dom/DataTransfer.h:
        * dom/DataTransfer.idl:
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::getAsString const):
        * dom/Document.cpp:
        (WebCore::Document::originIdentifierForPasteboard): Renamed from uniqueIdentifier. Moved the code to use the origin
        string and then falling back to the UUID here from originIdentifierForDocument in DataTransfer.cpp.
        * dom/Document.h:
        * editing/WebContentReader.cpp:
        (WebCore::WebContentMarkupReader::shouldSanitize const): Added.
        * editing/WebContentReader.h:
        (WebCore::WebContentMarkupReader): Added.
        (WebCore::WebContentMarkupReader::WebContentMarkupReader):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentFromWebArchive): Extracted out of WebContentReader::readWebArchive to share code.
        (WebCore::WebContentReader::readWebArchive):
        (WebCore::WebContentMarkupReader::readWebArchive): Added. Reads the web archive, replace all subresource URLs by
        blob URLs, and re-generate the markup using our copy & paste code. The last step is requied to strip away any privacy
        sensitive information as well as potentially dangerous JavaScript code.
        (WebCore::stripMicrosoftPrefix): Extracted out of WebContentReader::readHTML to share code.
        (WebCore::WebContentReader::readHTML):
        (WebCore::WebContentMarkupReader::readHTML): Added. Only sanitize the markup when it comes from a different origin.
        (WebCore::WebContentReader::readRTFD): Added a nullity check for frame.document().
        (WebCore::WebContentMarkupReader::readRTFD): Added.
        (WebCore::WebContentMarkupReader::readRTF): Added.
        * editing/markup.h:
        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent): Added.
        (WebCore::sanitizeMarkup): Added. This function "pastes" the markup into a new isolated document then reserializes
        using our serialization code for copy. It strips away all invisible information such as comments, and strips away
        event handlers and script elements to remove potentially dangerous scripts.
        * platform/Pasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readPasteboardWebContentDataForType): Now that this code can be called by DataTransfer, added
        the checks for the change count to make sure we stop letting web content read if the pasteboard had been changed by
        some other applications. To do this, turned this function into a member of Pasteboard. Also changed the return type
        to an enum with tri-state to exist the loop early in the call sites.
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readRespectingUTIFidelities):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType): Treat RTF, RTFD, and web archive as HTML.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read): Add the change count checks now that this code can be called by DataTransfer.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType): Treat RTF, RTFD, and web archive as HTML.

2017-10-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed attempt to fix the Windows debug build.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):

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

        Log using differential privacy domains where the WebContent process crashes
        https://bugs.webkit.org/show_bug.cgi?id=178346
        <rdar://problem/33293830>

        Reviewed by Alex Christensen.

        Add new diagnostic logging key for domain causing crashes.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::domainCausingCrashKey):
        * page/DiagnosticLoggingKeys.h:

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

        [Settings] Remove all custom code from Settings.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=178330

        Reviewed by Simon Fraser.

        Removes the two remaining functions out of Settings paving the way
        for the file to be generated.
        
        - pageDestroyed was moved down into SettingsBase.
        - effectiveFrameFlattening was moved to FrameView (to reduce the need
          for additional includes, the FrameFlattening enum was converted to
          an enum class to allow it to be forward declared).
          
        Also moves default values into SettingsDefaultValues.h

        * WebCore.xcodeproj/project.pbxproj:
        
            Add new files.
        
        * page/FrameView.cpp:
        * page/FrameView.h:

            Move effectiveFrameFlattening function here from Settings.

        * page/Settings.cpp:
        * page/Settings.h:

            Move effectiveFrameFlattening, pageDestroyed and default values out.

        * page/Settings.in:
        
            Update for turning FrameFlattening into an enum class.
        
        * page/SettingsBase.h:

            Turn FrameFlattening into an enum class and move pageDestroyed here.

        * page/SettingsDefaultValues.h: Added.

            Move all the default values from Settings here.

        * rendering/RenderFrameSet.cpp:
        * rendering/RenderIFrame.cpp:
        * rendering/RenderView.cpp:

            Get effectiveFrameFlattening from the FrameView.

        * testing/InternalSettings.cpp:
        * testing/InternalSettings.h:
        
            Update now that FrameFlattening is an enum class.

2017-10-16  Maureen Daum  <mdaum@apple.com>

        If we fail to delete any database file, don't remove its information from the tracker database
        <rdar://problem/34576132> and https://bugs.webkit.org/show_bug.cgi?id=178251

        Reviewed by Brady Eidson.

        New tests:
        DatabaseTracker.DeleteDatabase
        DatabaseTracker.DeleteDatabaseWhenDatabaseDoesNotExist
        DatabaseTracker.DeleteOrigin
        DatabaseTracker.DeleteOriginWhenDeletingADatabaseFails
        DatabaseTracker.DeleteOriginWhenDatabaseDoesNotExist

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
        If the database doesn't exist, we previously deleted it but failed to remove the
        information from the tracker database. We still want to delete all of the information
        associated with this database from the tracker database, so add it to databaseNamesToDelete.
        (WebCore::DatabaseTracker::deleteOrigin):
        If a database doesn't exist, don't try to delete it. We don't need to, but more
        importantly, deleteDatabaseFile() will fail if the database doesn't exist, which
        will cause us to incorrectly think we failed to remove database information from disk.
        If we actually fail to delete any database file, return before we remove the origin
        information from the tracker database so we don't lose track of the database.
        (WebCore::DatabaseTracker::deleteDatabase):
        If a database doesn't exist, don't try to delete it. We don't need to, but also it
        will cause us to incorrectly think that we were unable to delete a database, so we
        would bail before we remove the database information from the tracker database. We
        want to remove the database information from the tracker database because the database
        doesn't exist.
        * Modules/webdatabase/DatabaseTracker.h:
        Expose fullPathForDatabase() for use by tests.
        * platform/Logging.h:
        Add a logging channel.

2017-10-16  Alex Christensen  <achristensen@webkit.org>

        Remove unnecessary include from Document.h
        https://bugs.webkit.org/show_bug.cgi?id=178247

        Reviewed by Darin Adler.

        * dom/Document.cpp:
        (WebCore::Document::hasTouchEventHandlers const):
        (WebCore::Document::touchEventTargetsContain const):
        * dom/Document.h:
        (WebCore::Document::hasTouchEventHandlers const): Deleted.
        (WebCore::Document::touchEventTargetsContain const): Deleted.

2017-10-16  Alex Christensen  <achristensen@webkit.org>

        Fix iOS build after r223422
        https://bugs.webkit.org/show_bug.cgi?id=178251

        * Modules/webdatabase/DatabaseManager.h:

2017-10-16  Maureen Daum  <mdaum@apple.com>

        We should wrap the removal of information from the tracker database in a transaction in DatabaseTracker::deleteOrigin()
        https://bugs.webkit.org/show_bug.cgi?id=178274
        <rdar://problem/34576132>

        Reviewed by Tim Horton.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):
        Wrap the removal of information from the tracker database in a transaction so that
        we don't end up in a case where only one of the tables contains information about
        an origin.
        If anything goes wrong when we're modifying the tracker database, rollback the transaction
        before bailing.

2017-10-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223419.

        This change broke the Windows build.

        Reverted changeset:

        "If we fail to delete any database file, don't remove its
        information from the tracker database"
        https://bugs.webkit.org/show_bug.cgi?id=178251
        https://trac.webkit.org/changeset/223419

2017-10-16  Maureen Daum  <mdaum@apple.com>

        If we fail to delete any database file, don't remove its information from the tracker database
        <rdar://problem/34576132> and https://bugs.webkit.org/show_bug.cgi?id=178251

        Reviewed by Brady Eidson.

        New tests:
        DatabaseTracker.DeleteDatabase
        DatabaseTracker.DeleteDatabaseWhenDatabaseDoesNotExist
        DatabaseTracker.DeleteOrigin
        DatabaseTracker.DeleteOriginWhenDeletingADatabaseFails
        DatabaseTracker.DeleteOriginWhenDatabaseDoesNotExist

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
        If the database doesn't exist, we previously deleted it but failed to remove the
        information from the tracker database. We still want to delete all of the information
        associated with this database from the tracker database, so add it to databaseNamesToDelete.
        (WebCore::DatabaseTracker::deleteOrigin):
        If a database doesn't exist, don't try to delete it. We don't need to, but more
        importantly, deleteDatabaseFile() will fail if the database doesn't exist, which
        will cause us to incorrectly think we failed to remove database information from disk.
        If we actually fail to delete any database file, return before we remove the origin
        information from the tracker database so we don't lose track of the database.
        (WebCore::DatabaseTracker::deleteDatabase):
        If a database doesn't exist, don't try to delete it. We don't need to, but also it
        will cause us to incorrectly think that we were unable to delete a database, so we
        would bail before we remove the database information from the tracker database. We
        want to remove the database information from the tracker database because the database
        doesn't exist.
        * Modules/webdatabase/DatabaseTracker.h:
        Expose fullPathForDatabase() for use by tests.
        * platform/Logging.h:
        Add a logging channel.

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

        REGRESSION(223307): ASSERTION in WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution
        https://bugs.webkit.org/show_bug.cgi?id=178342
        <rdar://problem/35008505>

        Reviewed by Chris Dumez.

        In r223307 I mistakenly used 'topDocument->topDocument()' because of a copy/paste error. I should have just used
        'topDocument'.

        Tests: CommandBackForwardTestWKWebView in TestWebKitAPI.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution): We might enter this routine at a time
        where there is no page. If so, we should return early and not log credit.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Correct the argument passed to the log function.

2017-10-15  Filip Pizlo  <fpizlo@apple.com>

        Make some asserts into release asserts
        https://bugs.webkit.org/show_bug.cgi?id=178324

        Reviewed by Saam Barati.

        No new tests because no change in behavior.
        
        This introduces some release asserts. Perf testing shows that it's neutral. So, we get some extra
        safety without losing any perf.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeInserted):
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):
        (WebCore::Document::frameDestroyed):
        (WebCore::Document::attachToCachedFrame):
        (WebCore::Document::detachFromCachedFrame):
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::dispatchWindowEvent):
        (WebCore::Document::dispatchWindowLoadEvent):
        (WebCore::Document::applyQuickLookSandbox):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get const):
        (WebCore:: const):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::DidMoveToNewDocumentAssertionScope::~DidMoveToNewDocumentAssertionScope):
        (WebCore::DidMoveToNewDocumentAssertionScope::didRecieveCall):
        (WebCore::moveNodeToNewDocument):
        (WebCore::moveShadowTreeToNewDocument):
        (WebCore::Node::moveTreeToNewScope):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchDOMActivateEvent):

2017-10-16  Alejandro G. Castro  <alex@igalia.com>

        Make RealtimeIncomingAudioSources and RealtimeOutgoingAudioSources port agnostic
        https://bugs.webkit.org/show_bug.cgi?id=177928

        Reviewed by Youenn Fablet.

        Refactor the RealtimeIncomingAudioSource and RealtimeOutgoingAudioSource classes,
        move the mac specific code to a different class. This way we can use them from
        other ports.

        No new tests, we are not adding new functionality just refactoring.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeIncomingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Just the port agnostic parts.
        * platform/mediastream/RealtimeIncomingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h. Ditto.
        * platform/mediastream/RealtimeOutgoingAudioSource.cpp: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp. Ditto.
        * platform/mediastream/RealtimeOutgoingAudioSource.h: Copied from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h. Ditto.
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: Added, it adds Cocoa code parts from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp.
        (WebCore::RealtimeIncomingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there.
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h.
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp: Added Cocoa code from original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp.
        (WebCore::RealtimeOutgoingAudioSource::create): Moved this function from the RealtimeOutgoingAudioSource.cpp file to avoid including the Cocoa file there.
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h: Added Cocoa code from the original Source/WebCore/platform/mediastream/mac/RealtimeOutgoingAudioSource.h.

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

        Unreviewed, fix the tvOS build after r223340.

        Add a new #define in PlatformPasteboardIOS.mm for item provider support, and guard usages of
        WebItemProviderPasteboard using it.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::pasteboardMayContainFilePaths):
        (WebCore::PlatformPasteboard::readURL):

2017-10-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223271.

        This change introduced LayoutTest failures on WK1.

        Reverted changeset:

        "Use asynchronous ResourceHandleClient calls for WebKit1"
        https://bugs.webkit.org/show_bug.cgi?id=160677
        https://trac.webkit.org/changeset/223271

2017-10-16  Alejandro G. Castro  <alex@igalia.com>

        Make RealtimeIncomingVideoSources and RealtimeOutgoingVideoSources port agnostic
        https://bugs.webkit.org/show_bug.cgi?id=177869

        Reviewed by Youenn Fablet.

        Refactor the RealtimeIncomingVideoSource and RealtimeOutgoingVideoSource classes,
        move the cocoa specific code to a different class. This way we can use them from
        other ports.

        No new functionality, just a refactor.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeIncomingVideoSource.cpp: Moved from Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h. Just the port agnostic parts.
        * platform/mediastream/RealtimeIncomingVideoSource.h: Moved from Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h. DItto
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp: Moved from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.cpp. Ditto
        * platform/mediastream/RealtimeOutgoingVideoSource.h: Moved from Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSource.h. Ditto
        * platform/mediastream/mac/RealtimeIncomingVideoSourceMac.cpp: Added, it adds the Cocoa specific parts from Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp.
        (WebCore::RealtimeIncomingVideoSource::create): Moved this function from the base class, it allows avoiding the include.
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h: Added, cocoa dependent code from Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h.
        (WebCore::RealtimeOutgoingVideoSource::create): Moved this funtion from the base class, now we can use the Cocoa create without including it in the base class.
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: Added, cocoa dependent code.
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h: Added, cocoa dependent code.

2017-10-16  Manuel Rego Casasnovas  <rego@igalia.com>

        Don't use intrinsic width if our container's width is zero
        https://bugs.webkit.org/show_bug.cgi?id=178073

        Reviewed by Sergio Villar Senin.

        Based on Blink r173212 by <robhogan@gmail.com>.
        https://chromium.googlesource.com/chromium/src/+/1592e8a1e8e56dfa6e5d709c50b129ae659c2fad

        Since at least r798 we use a replaced element's intrinsic width
        if its containing block has a width of zero. As a result our rendering
        of width100percent-image.html has disagreed with all other browsers
        and we display replaced elements when they should be invisible.

        Test: fast/replaced/container-width-zero.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing const):
        If our container has zero width then let our width be zero too.

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

        On ToT, event.dataTransfer.getData("text/uri-list") returns an empty string when dragging an image
        https://bugs.webkit.org/show_bug.cgi?id=178301
        <rdar://problem/34990050>

        Reviewed by Darin Adler.

        After r222656, we consider images on the pasteboard to be files. This causes DataTransfer.getData to return the
        empty string for all types, which brings back https://bugs.webkit.org/show_bug.cgi?id=170637. To allow pages to
        access the URL part of a dragged image, we exempt "text/uri-list" from our heurstics to hide pasteboard data
        which may contain files, and return the URL as long as its protocol is either HTTP or HTTPS.

        Tweaked an existing layout test to cover this scenario, as well as the scenario in which the dragged image links
        to a file URL (in which case we should avoid exposing the data).

        Test: editing/pasteboard/drag-drop-href-as-url.html
              DataInteractionTests.DataTransferGetDataWhenDroppingImageWithHTTPURL

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::getDataForItem const):

        When the pasteboard contains files, allow data for "text/uri-list" to be returned, as long as the URL string has
        a white-listed protocol (currently, this is just http and https).

        (WebCore::DataTransfer::shouldSuppressGetAndSetDataToAvoidExposingFilePaths const):
        (WebCore::DataTransfer::setData):
        (WebCore::DataTransfer::types const):

        When the pasteboard contains files, allow "text/uri-list" to be added, alongside the "Files" type, if it would
        have been exposed in the list of safe DOM types.

        * dom/DataTransfer.h:
        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::canExposeURLToDOMWhenPasteboardContainsFiles):

        Add a new helper method to determine whether it is safe to expose an URL string as "text/uri-list" to bindings,
        if the pasteboard contains files. While this currently checks whether or not the URL is in the HTTP family, we
        may want to consider tweaking this to blacklist the "file" protocol instead, and allow all other valid URLs by
        default.

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

        Mark stringForType as const, and also teach stringForType to return the null string for the platform URL type if
        the pasteboard might contain file paths.

        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):

        Before coercing a platform type to "text/uri-list" when building the list of DOM-safe types, check that the
        stringForType is not the empty string, in which case we don't expose the type to the DOM at all. This ensures
        that in cases where the URL might reveal a file path, we don't advertise "text/uri-list" as a type. We adopt a
        similar strategy on iOS.

        (WebCore::PlatformPasteboard::stringForType): Deleted.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::pasteboardMayContainFilePaths):
        (WebCore::PlatformPasteboard::stringForType const):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::stringForType): Deleted.

2017-10-16  Frederic Wang  <fwang@igalia.com>

        Use auto/nullptr in scrolling code
        https://bugs.webkit.org/show_bug.cgi?id=178306

        Reviewed by Carlos Garcia Campos.

        This patch modifies the scrolling code to use the auto keyword when
        possible. It also replaces '0' with 'nullptr' for the return value of
        ScrollingStateTree::stateNodeForID.

        No new tests, behavior unchanged.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::frameViewForScrollingNode const):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::updateFrameScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateNodeLayer):
        (WebCore::AsyncScrollingCoordinator::updateNodeViewportConstraints):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        (WebCore::AsyncScrollingCoordinator::updateScrollLayerPosition):
        (WebCore::AsyncScrollingCoordinator::setActiveScrollSnapIndices):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView const):
        (WebCore::ScrollingCoordinator::absoluteEventTrackingRegionsForFrame const):
        (WebCore::ScrollingCoordinator::scrollLayerForFrameView):
        (WebCore::ScrollingCoordinator::headerLayerForFrameView):
        (WebCore::ScrollingCoordinator::footerLayerForFrameView):
        (WebCore::ScrollingCoordinator::counterScrollingLayerForFrameView):
        (WebCore::ScrollingCoordinator::insetClipLayerForFrameView):
        (WebCore::ScrollingCoordinator::contentShadowLayerForFrameView):
        (WebCore::ScrollingCoordinator::rootContentLayerForFrameView):
        (WebCore::ScrollingCoordinator::handleWheelEventPhase):
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects const):
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasonsForAllFrames):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText const):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::reconcileLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::reconcileLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::nodeTypeAndParentMatch const):
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::detachNode):
        (WebCore::ScrollingStateTree::removeNodeAndAllDescendants):
        (WebCore::ScrollingStateTree::stateNodeForID const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::viewportChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::enclosingFrameNode const):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::detachFromStateTree):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateNodeLayer):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateNodeViewportConstraints):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::willDestroyScrollableArea):

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

        A lot of "Can't stat WebCore/animation: No such file or directory" since r223328
        https://bugs.webkit.org/show_bug.cgi?id=178326

        Unreviewed build fix

        The directory WebCore/animation was removed in r223328.

        No new tests because there is no behavior change.

        * CMakeLists.txt: Removed animation from
        WebCore_INCLUDE_DIRECTORIES and WebCore_IDL_INCLUDES.
        * DerivedSources.make: Removed animation from VPATH and IDL_INCLUDES

2017-10-16  Frederic Wang  <fwang@igalia.com>

        Replace some ScrollingTreeNode::nodeType() calls with is*Node()
        https://bugs.webkit.org/show_bug.cgi?id=178259

        Reviewed by Darin Adler.

        No new tests, behavior unchanged.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewForScrollingNode const):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isScrollingNode const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::enclosingFrameNode const):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::isScrollingNode const):

2017-10-16  Tomas Popela  <tpopela@redhat.com>

        DataTransfer.cpp triggers -Wunused-but-set-variable
        https://bugs.webkit.org/show_bug.cgi?id=178209

        Reviewed by Wenson Hsieh.

        Use the ASSERT_UNUSED to silence it.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::filesFromPasteboardAndItemList const):

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

        [Settings] Split non-macro generated parts of Settings into SettingsBase base class
        https://bugs.webkit.org/show_bug.cgi?id=178321

        Reviewed by Darin Adler.

        Working towards getting generated Settings working again, but in smaller patches, split
        non-generated part off into SettingsBase as a first step.
        
        One function, effectiveFrameFlattening(), needs to remain in Settings for now, as it directly
        references a macro generated function, frameFlattening().

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.h:
        * page/Settings.cpp:
        * page/Settings.h:
        * page/SettingsBase.h: Copied from Source/WebCore/page/Settings.h.
        * page/cocoa/SettingsBaseCocoa.mm: Copied from Source/WebCore/page/cocoa/SettingsCocoa.mm.
        * page/cocoa/SettingsCocoa.mm: Removed.

2017-10-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Perform module specifier validation at parsing time
        https://bugs.webkit.org/show_bug.cgi?id=178256

        Reviewed by Darin Adler.

        No behavior change in the current implementation.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderResolve):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::resolve):
        * bindings/js/ScriptModuleLoader.h:

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

        DOMTokenList shouldn't add empty attributes
        https://bugs.webkit.org/show_bug.cgi?id=178280
        <rdar://problem/34987431>

        Reviewed by Ryosuke Niwa.

        Follow-up to r223306, reverse the check conditions to avoid attribute
        lookup when possible. Also use m_tokens instead of tokens() to avoid
        unnecessary branch.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::updateAssociatedAttributeFromTokens):

2017-10-15  Darin Adler  <darin@apple.com>

        UTF-8 decoding produces one replacement character per byte; Encoding standard requires one replacement character per illegal sequence instead
        https://bugs.webkit.org/show_bug.cgi?id=178207

        Reviewed by Sam Weinig.

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::create): Deleted. Use a lambda instead.
        (WebCore::TextCodecUTF8::registerCodecs): Use a lambda.
        (WebCore::nonASCIISequenceLength): Changed to return 0 instead of 2 for the range 80-C1 since
        none of those are valid sequence leading characters.
        (WebCore::decodeNonASCIISequence): Changed the length argument to be in/out so the caller
        knows how much of the sequence we decoded for failure cases. Simplified the length 2 section.
        (WebCore::TextCodecUTF8::handleError): Deleted.
        (WebCore::TextCodecUTF8::handlePartialSequence): Changed this into a pair of plain functions
        rather than two template function specializations since the two functions are rather different.
        For the one-byte version, got rid of the unused arguments. For the two-byte version, got rid
        of the ignored return value, stopped using the handleError function since each error case
        needs to be handled differently. In each error case consume the entire incorrect sequence
        instead of just one byte.
        (WebCore::TextCodecUTF8::decode): Updated for the above change, and changed the non-partial
        incorrect sequence to consume the entire incorrect sequence instead of just one byte. Also
        use WTF prefixes explicitly so we don't  have to do "using namespace".
        (WebCore::TextCodecUTF8::encode): Got rid of unneeded type punning, and added some inline
        capacity to save one memory allocation when encoding shorter strings.

        * platform/text/TextCodecUTF8.h: Use pragma once. Intialize m_partialSequenceSize where it
        is defined and let the compiler generate the constructor. Updated for the changes above.

        * platform/text/TextEncoding.h: Export a constructor now used by a unit test.
        * platform/text/TextEncodingRegistry.h: Export newTextCodec, now used by a unit test.

2017-10-14  Antoine Quint  <graouts@apple.com>

        Remove all Web Animations code
        https://bugs.webkit.org/show_bug.cgi?id=178273

        Reviewed by Sam Weinig.

        We remove all existing code related to Web Animations which does not include any functionality,
        only stubs. This leaves the build and runtime flags, we'll start a complete implementation from
        scratch.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/Animatable.idl: Removed.
        * animation/AnimationEffect.cpp: Removed.
        * animation/AnimationEffect.h: Removed.
        * animation/AnimationEffect.idl: Removed.
        * animation/AnimationTimeline.cpp: Removed.
        * animation/AnimationTimeline.h: Removed.
        * animation/AnimationTimeline.idl: Removed.
        * animation/DocumentAnimation.cpp: Removed.
        * animation/DocumentAnimation.h: Removed.
        * animation/DocumentAnimation.idl: Removed.
        * animation/DocumentTimeline.cpp: Removed.
        * animation/DocumentTimeline.h: Removed.
        * animation/DocumentTimeline.idl: Removed.
        * animation/KeyframeEffect.cpp: Removed.
        * animation/KeyframeEffect.h: Removed.
        * animation/KeyframeEffect.idl: Removed.
        * animation/WebAnimation.cpp: Removed.
        * animation/WebAnimation.h: Removed.
        * animation/WebAnimation.idl: Removed.
        * bindings/js/JSAnimationTimelineCustom.cpp: Removed.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Element.cpp:
        (WebCore::Element::getAnimations): Deleted.
        * dom/Element.h:
        * dom/Element.idl:

2017-10-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: provide a way to enable/disable event listeners
        https://bugs.webkit.org/show_bug.cgi?id=177451

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/setEventListenerDisabled.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        Add InspectorInstrumentation call to isEventListenerDisabled. If true, the event listener's
        callback will not be called.

        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::setEventListenerDisabled):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::willRemoveEventListener):
        (WebCore::InspectorDOMAgent::isEventListenerDisabled):
        Introduce a mapping of `EventListener*` to `InspectorEventListener`, a struct for uniquely
        identifying event listeners so they can be referenced from the frontend. We only add items
        to this mapping when `getEventListenersForNode` is called, as that is when EventListener
        data is sent to the frontend. This allows us to defer creating an Inspector "mirror" object
        for each EventListener until it is needed. Items are removed whenever an event listener is
        removed or when the document changes.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::isEventListenerDisabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willRemoveEventListenerImpl):
        (WebCore::InspectorInstrumentation::isEventListenerDisabledImpl):
        Pass additional parameters to InspectorDOMAgent so it can determine if the event listener
        actually exists. If not, don't dispatch an event to the frontend as nothing will change.

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

        Remove HashCountedSet's copyToVector functions
        https://bugs.webkit.org/show_bug.cgi?id=178215

        Reviewed by Daniel Bates.

        * page/DeviceController.cpp:
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        
            Replace use of HashCountedSet's copyToVector functions with copyToVector(hashCountedSet.values()).

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

        Performance: Skip texture upload if source image and destination texture haven't changed
        https://bugs.webkit.org/show_bug.cgi?id=178254
        <rdar://problem/34968181>

        Reviewed by Dean Jackson.

        Update GraphicsContext3D to track which texture is bound to which texture unit, and also to
        track when those bound textures have their backing stores modified. This new "seed" value
        will be used to determine whether a given texture which has previously had image data
        uploaded to it needs to be re-updated.

        In VideoTextureCopierCV, track whether the texture's seed changed, whether the IOSurface is
        the same,  whether the IOSurface's seed has changed, and whether the "flipY" parameter
        changed since the last time the copier was asked to upload to the texture.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::textureSeed):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::currentBoundTexture):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::boundTexture):
        (WebCore::GraphicsContext3D::GraphicsContext3DState::setBoundTexture):
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):
        * platform/graphics/cv/VideoTextureCopierCV.h:
        (WebCore::VideoTextureCopierCV::lastTextureSeed):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::texStorage2D):
        (WebCore::GraphicsContext3D::texStorage3D):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::compressedTexImage2D):
        (WebCore::GraphicsContext3D::compressedTexSubImage2D):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::texImage2DDirect):

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

        [Win] When built with VS2017, MiniBrowser crashes on startup.
        https://bugs.webkit.org/show_bug.cgi?id=175209

        Reviewed by Daniel Bates.

        Generated StaticStringImpl objects are not initialized compile-time with VS2017.
        When compiling with VS2017, the global, static, StaticStringImpl objects needs to
        be defined with the constexpr specifier, in order for the objects to be initialized
        at compile time. Since the StaticStringImpl objects will be const then, we need to
        be able to create an AtomicString object from a const StaticStringImpl object. 
        This constructor has been added to the AtomicString class.

        No new tests, covered by existing tests. 

        * bindings/scripts/StaticString.pm:
        (GenerateStrings):
        (GenerateStringAsserts):
        * dom/QualifiedName.cpp:
        (WebCore::createQualifiedName):
        * dom/QualifiedName.h:
        * dom/make_names.pl:
        (printDefinitions):

2017-10-13  Brent Fulgham  <bfulgham@apple.com>

        Protect FrameView during style calculations
        https://bugs.webkit.org/show_bug.cgi?id=178300
        <rdar://problem/34869329>

        Reviewed by Ryosuke Niwa.

        Protect the FrameView during layout and style updates in case arbitrary script
        is run that might clear it.

        Test: fast/html/marquee-reparent-check.html

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

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

        Crash under ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData
        https://bugs.webkit.org/show_bug.cgi?id=178279

        Reviewed by Alex Christensen.

        Check if the connection is valid before calling ResourceHandleClient::didSendData.

        No new tests, covered by existing tests.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):

2017-10-13  Brent Fulgham  <bfulgham@apple.com>

        CMD+R / CMD+Q keyboard shortcuts are treated as user interaction with page
        https://bugs.webkit.org/show_bug.cgi?id=178183
        <rdar://problem/33327730>

        Reviewed by Ryosuke Niwa.

        Key events are granted user interaction credit (in terms of updating the last time of user
        interaction), even if the key event was not handled. Instead, we should defer granting
        access until the key event has been handled.
        
        Add a new default constructor argument to UserGestureIndicator to be used when handling key
        events, so we can delay a decision about whether to grant ResourceLoadStatistics
        'hasHadUserInteraction' until we confirm that the event was handled by the page.

        This change does not affect other aspects of user interaction.

        Tests: fast/events
               http/tests/resourceLoadStatistics/prevalent-resource-handled-keydown.html
               http/tests/resourceLoadStatistics/prevalent-resource-unhandled-keydown.html

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator): Add check based on constructor argument.
        Also: Drive by fix to avoid calling 'currentToken' when not on the main thread.
        * dom/UserGestureIndicator.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): If the key event was handled, grant user interaction credit
        for ResourceLoadStatistics processing.
        (WebCore::EventHandler::internalKeyEvent): Use the new UserGestureIndicator constructor argument.

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

        DOMTokenList shouldn't add empty attributes
        https://bugs.webkit.org/show_bug.cgi?id=178280

        Reviewed by Ryosuke Niwa.

        DOMTokenList shouldn't add empty attributes after:
        - https://github.com/whatwg/dom/pull/488

        Firefox and Chrome follow the latest spec.

        No new tests, updating existing test.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::updateAssociatedAttributeFromTokens):
        Implement the first step of https://dom.spec.whatwg.org/#concept-dtl-update

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

        Unreviewed build fix; wrap more functions in USE(IOSURFACE) so that
        they do not generate "unused function" errors.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:

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

        One last unreviewed build fix; since the IOSurface APIs don't exist at
        all on the simulator, just wrap the entirety of the implementation of
        copyImageToPlatformTexture() in a #if USE(IOSURFACE) check.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):

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

        Unreviewed build fix for the previous build fix; use the right PAL path for IOSurfaceSPI.h.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:

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

        Unreviewed build fix; add definitions for IOSurface methods missing on some platforms.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:

2017-10-13  Alex Christensen  <achristensen@webkit.org>

        Remove Editor::simplifyMarkup
        https://bugs.webkit.org/show_bug.cgi?id=178271

        Reviewed by Wenson Hsieh.

        An API test became flaky, and it turns out this isn't used anywhere, so let's remove it!
        It was used in Mountain Lion, Mavericks, and Yosemite, but not since then.
        See <rdar://problem/10726177>

        * editing/Editor.cpp:
        (WebCore::Editor::simplifyMarkup): Deleted.
        * editing/Editor.h:

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

        Unreviewed build fix; forward declare the type of IOSurfaceRef.

        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:

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

        Unreviewed build fix; add soft link macros for newly called CoreVideo methods.

        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:

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

        Unreviewed build fix; add UNUSED_PARAM macros.

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::texImageIOSurface2D):

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

        Performance: do pixel conformance and texturing in a single step.
        https://bugs.webkit.org/show_bug.cgi?id=178219
        <rdar://problem/34937237>

        Reviewed by Dean Jackson.

        No new tests; performance improvements should have no behavior change.

        Rather than asking the VTDecompressionSession to conform the output CVPixelBuffer into a
        pixel format compatible with OpenGL (& ES), don't constrain the output at all, and only do a
        conformance step if the output is not already compatible with OpenGL. This eliminates one
        copy (in hardware) operation.

        Move the TextureCacheCV object into VideoTextureCopierCV; it will be conditionally used to
        create the texture if the pixel buffer is compatible.

        Refactor copyVideoTextureToPlatformTexture(CVOpenGLTextureRef) in VideoTextureCopierCV. The
        new entry point, copyImageToPlatformTexture(), will attempt to use the texture cache first,
        and call a new common copyVideoTextureToPlatformTexture(Platform3DObject) with the result.

        The new copyImageToPlatformTexture() will pull planar YUV frames into two textures, and combine
        the two with a color transfer function when drawing to the output texture.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::copyVideoTextureToPlatformTexture):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::texImageIOSurface2D):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):
        * platform/graphics/cv/TextureCacheCV.h:
        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::textureFromImage):
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::pixelRangeFromPixelFormat):
        (WebCore::transferFunctionFromString):
        (WebCore::YCbCrToRGBMatrixForRangeAndTransferFunction):
        (WebCore::VideoTextureCopierCV::~VideoTextureCopierCV):
        (WebCore::VideoTextureCopierCV::initializeUVContextObjects):
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture):
        * platform/graphics/cv/VideoTextureCopierCV.h:

2017-10-13  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Align queue with spec for ReadableStreamDefaultController
        https://bugs.webkit.org/show_bug.cgi?id=178082

        Reviewed by Xabier Rodriguez-Calvar.

        Implemented new queue behavior for dequeueValue (used by ReadableStreamDefaultController),
        which fixes rounding errors (as described in https://github.com/whatwg/streams/pull/661).
        Also aligned ReadableByteStreamController queue so that both queues are implemented in
        the same way.

        No new tests (covered by existing tests, especially WPT tests that now pass).

        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController): Aligned queue with RSDC.
        (readableByteStreamControllerCancel): Aligned queue with RSDC.
        (readableByteStreamControllerError): Aligned queue with RSDC.
        (readableByteStreamControllerClose): Aligned queue with RSDC.
        (readableByteStreamControllerHandleQueueDrain): Aligned queue with RSDC.
        (readableByteStreamControllerPull): Aligned queue with RSDC.
        (readableByteStreamControllerEnqueue): Aligned queue with RSDC.
        (readableByteStreamControllerEnqueueChunk): Aligned queue with RSDC.
        (readableByteStreamControllerProcessPullDescriptors): Aligned queue with RSDC.
        (readableByteStreamControllerFillDescriptorFromQueue): Aligned queue with RSDC.
        (readableByteStreamControllerPullInto): Aligned queue with RSDC.
        * Modules/streams/StreamInternals.js:
        (dequeueValue): Updated to match spec.
        * bindings/js/WebCoreBuiltinNames.h: Removed now useless "totalQueuedBytes".

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

        "text/html" data is not exposed when dragging and dropping across origins
        https://bugs.webkit.org/show_bug.cgi?id=178253
        <rdar://problem/34971203>

        Reviewed by Ryosuke Niwa.

        Minor tweak to DataTransfer::setDataFromItemList to allow "text/html" written from bindings to transfer across
        origins without requiring a sanitized representation. Currently, sanitizedData is null, which limits "text/html"
        to being treated as custom data, inaccessible across origins. We should instead treat markup supplied via
        bindings the same way as we do "text/plain" supplied via bindings.

        Modified Tests: editing/pasteboard/data-transfer-set-data-sanitize-url-when-copying-in-null-origin.html
                        editing/pasteboard/data-transfer-set-data-sanitize-url-when-dragging-in-null-origin.html

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

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

        SW "Hello world".
        https://bugs.webkit.org/show_bug.cgi?id=178187

        Reviewed by Andy Estes.

        No new tests (Covered by changes to existing tests).

        With this patch, SW scripts are actually compiled and run inside a ServiceWorkerGlobalScope environment
        in the SW context process.

        * WebCore.xcodeproj/project.pbxproj:

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):

        * dom/EventTargetFactory.in:

        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::isServiceWorkerGlobalScope const):

        * workers/service/ServiceWorkerContextData.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp.
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):

        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        (WebCore::ServiceWorkerGlobalScope::~ServiceWorkerGlobalScope):
        (WebCore::ServiceWorkerGlobalScope::registration):
        (WebCore::ServiceWorkerGlobalScope::eventTargetInterface const):
        * workers/service/ServiceWorkerGlobalScope.h:
        (WebCore::ServiceWorkerGlobalScope::create):
        (WebCore::ServiceWorkerGlobalScope::serverConnectionIdentifier const):

        * workers/service/context/SWContextManager.cpp: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp.
        (WebCore::SWContextManager::singleton):
        (WebCore::SWContextManager::SWContextManager):
        (WebCore::SWContextManager::startServiceWorkerContext):
        * workers/service/context/SWContextManager.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.h.

        * workers/service/context/ServiceWorkerThread.cpp: Added.
        (WebCore::ServiceWorkerThreadProxy::sharedDummyProxy):
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::m_workerObjectProxy):
        (WebCore::ServiceWorkerThread::~ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        (WebCore::ServiceWorkerThread::runEventLoop):
        * workers/service/context/ServiceWorkerThread.h: Copied from Source/WebCore/workers/service/ServiceWorkerGlobalScope.h.
        (WebCore::ServiceWorkerThread::create):
        (WebCore::ServiceWorkerThread::workerObjectProxy const):

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

2017-10-12  Alex Christensen  <achristensen@webkit.org>

        Use asynchronous ResourceHandleClient calls for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=160677

        Reviewed by Brady Eidson.

        Covered by existing tests.

        * PlatformAppleWin.cmake:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestAsync):
        (WebCore::ResourceLoader::didReceiveResponseAsync):
        (WebCore::ResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponseAsync):
        (WebCore::ApplicationCacheGroup::willSendRequestAsync):
        (WebCore::ApplicationCacheGroup::canAuthenticateAgainstProtectionSpaceAsync):
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Deleted.
        * loader/appcache/ApplicationCacheGroup.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::continueDidReceiveResponse):
        (WebCore::BlobResourceHandle::getSizeForNext):
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        (WebCore::BlobResourceHandle::notifyResponseOnError):
        * platform/network/PingHandle.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didReceiveResponse):
        (WebCore::ResourceHandle::usesAsyncCallbacks): Deleted.
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::~ResourceHandleClient):
        (WebCore::ResourceHandleClient::willSendRequest): Deleted.
        (WebCore::ResourceHandleClient::willSendRequestAsync): Deleted.
        (WebCore::ResourceHandleClient::didReceiveResponseAsync): Deleted.
        (WebCore::ResourceHandleClient::canAuthenticateAgainstProtectionSpaceAsync): Deleted.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandleClient::didReceiveResponse): Deleted.
        (WebCore::ResourceHandleClient::usesAsyncCallbacks): Deleted.
        (WebCore::ResourceHandleClient::canAuthenticateAgainstProtectionSpace): Deleted.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequestAsync):
        (WebCore::SynchronousLoaderClient::canAuthenticateAgainstProtectionSpaceAsync):
        (WebCore::SynchronousLoaderClient::didReceiveResponseAsync):
        (WebCore::SynchronousLoaderClient::didFinishLoading):
        (WebCore::SynchronousLoaderClient::didFail):
        (WebCore::SynchronousLoaderClient::willSendRequest): Deleted.
        (WebCore::SynchronousLoaderClient::canAuthenticateAgainstProtectionSpace): Deleted.
        (WebCore::SynchronousLoaderClient::didReceiveResponse): Deleted.
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::releaseHandle):
        (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::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp: Removed.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h: Removed.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::makeDelegate):
        (WebCore::ResourceHandle::delegate):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillCacheResponse):
        (WebCore::ResourceHandle::shouldUseCredentialStorage): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.h: Removed.
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm: Removed.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didFailWithError:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

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

        [Mac] Add support for MouseEvent.buttons
        https://bugs.webkit.org/show_bug.cgi?id=178214

        Reviewed by Ryosuke Niwa.

        Add support for MouseEvent.buttons on Mac as per:
        - https://www.w3.org/TR/uievents/#ref-for-dom-mouseevent-buttons-1

        This is supported by Firefox and Chrome already.

        No new tests, rebaselined existing test.

        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::buttons const):
        * dom/MouseEvent.idl:
        * dom/MouseEventInit.h:
        * dom/MouseEventInit.idl:
        * dom/SimulatedClick.cpp:
        * dom/WheelEvent.cpp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::buttons const):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::currentlyPressedMouseButtons):
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):

2017-10-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix -Wunused-lambda-capture warnings in WebCore/WebKit with new clang compiler
        <https://webkit.org/b/178226>

        Reviewed by Chris Fleizach.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityArticleAncestor]):
        - Remove unused lambda variable 'self'.

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

        Mark more InlineBox member functions as const
        https://bugs.webkit.org/show_bug.cgi?id=178217

        Reviewed by Andy Estes.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::locationIncludingFlipping const): Mark as const. Also fix some style
        nits while I am here.
        (WebCore::InlineBox::flipForWritingMode const): Mark as const.
        (WebCore::InlineBox::locationIncludingFlipping): Deleted.
        (WebCore::InlineBox::flipForWritingMode): Deleted.
        * rendering/InlineBox.h:

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

        Teach InlineTextBox::clampOffset() about combined text and hyphenation
        https://bugs.webkit.org/show_bug.cgi?id=178032

        Reviewed by Zalan Bujtas.

        Treat combined text and the last character of a word halve plus hyphen as single units.

        With regards to combined text, ideally we would allow arbitrary selection inside combined
        text. Currently we do not support selection of combined text. To simplify the process of
        adding support for selecting combined text we treat combined text as a single unit. Once
        we are confident that we correctly implemented such support we can re-evaluate allowing
        arbitrary selection of combined text.

        With regards to treating the last character of a word halve plus hyphen as a single unit.
        This patch extends the targeted fix made for document markers in r223013 to all code that
        makes use of clamped offsets as a result the selection rect for inline boxes more accurately
        reflect the rectangle(s) that make up the painted selection. This is a step towards reconciling
        the difference between the computation of the rectangle that represents an arbitrary
        selection and the code that paints the active selection as part of <https://bugs.webkit.org/show_bug.cgi?id=138913>.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect const): Compute text run, including combined text
        or hyphens due to line wrapping now that specified start and end positions are clamped with
        respect to combined text and hyphens (computed earlier in this function). Only measure the
        text represented by the selection if the start position > 0 or the end position is not equal
        to the length of the run.
        (WebCore::InlineTextBox::paint): Remove unnecessary code to fix up the selection start and
        end positions based on the truncation offset as this is done by clampedOffset(), called by
        selectionStartEnd().
        (WebCore::InlineTextBox::clampedOffset const): Modified to adjust the clamped offset with
        respect to truncation as well as treat combined text or a trailing word halve plus hyphen
        as single units. Assert that we are not fully truncated because it does not make sense to
        be computing the clamped offset in such a situation since nothing should be painted.
        (WebCore::InlineTextBox::selectionStartEnd const): Modified to compute the end of an inside
        selection using clampedOffset() to account for truncation, combined text or a hyphen. We
        already are using clampedOffset() when computing the start and end position for all other
        selection states.
        (WebCore::InlineTextBox::paintSelection): Compute text run, including combined text
        or hyphens due to line wrapping now that specified start and end positions are clamped with
        respect to combined text and hyphens (computed earlier in this function). Remove unnecessary
        code to adjust selection end point with respect to truncation, combined text, or an added
        hyphen now that selectionStartEnd() takes care of this (via clampedOffset()).
        (WebCore::InlineTextBox::paintTextSubrangeBackground): Compute text run, including combined
        text or hyphens due to line wrapping now that specified start and end positions are clamped
        with respect to combined text and hyphens (computed earlier in this function).
        (WebCore::InlineTextBox::paintDocumentMarker): Compute text run, including combined text now
        that specified start and end positions are clamped with respect to combined text (computed earlier in this function).
        Also remove unnecessary code to adjust end offset of the marker with respect to truncation
        and length of the text run as clampedOffset() now does this for us.

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

        Don't assert if mix-blend-mode is set to a non-separable blend mode on a composited layer
        https://bugs.webkit.org/show_bug.cgi?id=178196
        rdar://problem/34942337

        Reviewed by Dan Bates.

        Core Animation doesn't support non-separable blend modes (hue, saturation, color, luminosity)
        on layers, but don't assert if we try to use them.

        Test: compositing/filters/blend-mode-saturation.html

        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (PlatformCAFilters::setBlendingFiltersOnLayer):

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

        ResourceLoadObserver::logFrameNavigation() should use redirectResponse.url()
        https://bugs.webkit.org/show_bug.cgi?id=175257
        <rdar://problem/33359866>

        Reviewed by Brent Fulgham.

        This patch was joint work between Michael Specter and John Wilander.

        Tests: http/tests/resourceLoadStatistics/non-sandboxed-iframe-redirect-ip-to-localhost-to-ip.html
               http/tests/resourceLoadStatistics/non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-ip-to-localhost-to-ip.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-ip-to-localhost-to-ip.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-localhost-to-ip-to-localhost.html
               http/tests/resourceLoadStatistics/sandboxed-iframe-redirect-ip-to-localhost-to-ip.html
               http/tests/resourceLoadStatistics/sandboxed-iframe-redirect-localhost-to-ip-to-localhost.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-ip-to-localhost-to-ip.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-ip-to-localhost-to-ip.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-localhost-to-ip-to-localhost.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
            Now sends redirectResponse.url() to WebCore::ResourceLoadObserver::logFrameNavigation().
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
            Now receives the redirect response URL from WebCore::DocumentLoader().
        (WebCore::ResourceLoadObserver::nonNullOwnerURL const):
            New function to traverse the frame chain upward and find the first non-null URL.
        * loader/ResourceLoadObserver.h:

2017-10-12  Frederic Wang  <fwang@igalia.com>

        Use less specific cast in ScrollingTree::scrollPositionChangedViaDelegatedScrolling
        https://bugs.webkit.org/show_bug.cgi?id=178211

        Reviewed by Simon Fraser.

        No new tests, behavior is not changed.

        ScrollingTree::scrollPositionChangedViaDelegatedScrolling is a generic function that applies
        to scrolling nodes. Casting to more specific ScrollingTreeOverflowScrollingNodes is however
        not necessary to implement it. This patch moves to the least specific cast necessary so that
        this function will be usable for async scrolling of non-main frames in the future. Note that
        the function is currently only called from ScrollingTreeScrollingNodeDelegateIOS which in
        turn is only used by the ScrollingTreeScrollingOverflowNodeIOS class and so code behavior is
        not changed.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling): Only cast the node to
        ScrollingTreeScrollingNode.

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

        Remove out-parameter variants of copyToVector
        https://bugs.webkit.org/show_bug.cgi?id=178155

        Reviewed by Tim Horton.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::stopTimersForOneShots):
        (WebCore::Geolocation::cancelAllRequests):
        (WebCore::Geolocation::handleError):
        (WebCore::Geolocation::makeSuccessCallbacks):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * Modules/indexeddb/IDBGetAllResult.cpp:
        (WebCore::IDBGetAllResult::allBlobFilePaths const):
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::notifyCursorsOfValueChange):
        (WebCore::IDBServer::MemoryIndex::notifyCursorsOfAllRecordsChanged):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks):
        * dom/Document.cpp:
        (WebCore::Document::moveNodeIteratorsToNewDocument):
        (WebCore::Document::resume):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/IdTargetObserverRegistry.cpp:
        (WebCore::IdTargetObserverRegistry::notifyObserversInternal):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::notifyMutationObservers):
        * dom/Node.cpp:
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        * dom/RadioButtonGroups.cpp:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::dispatchMessagePortEvents):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::deliverDelayedMainResources):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::forEachResource):
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::willDestroyCachedFrame):
        (WebCore::DOMWindow::willDestroyDocumentInFrame):
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        (WebCore::DOMWindow::disconnectDOMWindowProperties):
        (WebCore::DOMWindow::reconnectDOMWindowProperties):
        * page/FrameView.cpp:
        (WebCore::collectAndProtectWidgets):
        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):
        * page/Performance.cpp:
        (WebCore::Performance::queueEntry):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFontFamilies):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        * platform/ios/WebCoreMotionManager.mm:
        (-[WebCoreMotionManager sendAccelerometerData:]):
        (-[WebCoreMotionManager sendMotionData:withHeading:]):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession invalidateAndCancel]):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::endAndCommitUpdateScrollInfoAfterLayoutTransaction):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintObject):

            Replace out-parameter based copyToVector, with one that returns a Vector.

2017-10-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        Support integrity="" on module scripts
        https://bugs.webkit.org/show_bug.cgi?id=177959

        Reviewed by Sam Weinig.

        This patch extends module hooks to accept fetching parameters.
        When starting fetching modules, WebCore creates ModuleFetchParameters.
        And this parameters is propagated to the fetch hook. Then, fetch
        hook can use this parameters to fetch modules.

        This parameters only contains `integrity` field. This "integrity" is
        used to perform subresource integrity check in module loader pipeline.
        And this error is just proparaged as errors in module pipeline, which
        is the same to the other types of errors in module pipeline.

        Test: http/tests/subresource-integrity/sri-module.html

        * ForwardingHeaders/runtime/JSScriptFetchParameters.h: Added.
        * ForwardingHeaders/runtime/ScriptFetchParameters.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedModuleScriptLoader.cpp:
        (WebCore::CachedModuleScriptLoader::create):
        (WebCore::CachedModuleScriptLoader::CachedModuleScriptLoader):
        Take parameters, which includes "integrity".

        * bindings/js/CachedModuleScriptLoader.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderFetch):
        (WebCore::JSDOMWindowBase::moduleLoaderImportModule):
        import and fetch hooks take parameters.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::loadModule):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::loadModuleScript):
        Pass parameters to the entry point of the module pipeline.

        * bindings/js/ScriptController.h:
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::fetch):
        If parameters are passed, we set them to CachedModuleScriptLoader.

        (WebCore::ScriptModuleLoader::importModule):
        Pass parameters to the entry point of dynamic import.

        (WebCore::ScriptModuleLoader::notifyFinished):
        If script loader has parameters, we perform subresource integrity check here.

        * bindings/js/ScriptModuleLoader.h:
        * dom/LoadableModuleScript.cpp:
        (WebCore::LoadableModuleScript::create):
        (WebCore::LoadableModuleScript::LoadableModuleScript):
        (WebCore::LoadableModuleScript::load):
        Create ModuleFetchParameters with "integrity" value.

        * dom/LoadableModuleScript.h:
        * dom/ModuleFetchParameters.h: Copied from Source/WebCore/bindings/js/CachedModuleScriptLoader.h.
        (WebCore::ModuleFetchParameters::create):
        (WebCore::ModuleFetchParameters::integrity const):
        (WebCore::ModuleFetchParameters::ModuleFetchParameters):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript):
        Pass "integrity" value to the module script.

2017-10-12  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, fix compilation warning

        warning: extra tokens at end of #endif directive [-Wendif-labels]

        * rendering/RenderMediaControls.h:

2017-10-11  Brent Fulgham  <bfulgham@apple.com>

        Correct nullptr deref in selection handling.
        https://bugs.webkit.org/show_bug.cgi?id=178189
        <rdar://problem/33833012>

        Reviewed by Ryosuke Niwa.

        The VisibleSelection::toNormalizedRange returns nullptr for certain conditions (e.g., 'isNone'
        and 'isOrphaned' cases). It's possible to crash the WebProcess by executing a code path with
        an orphaned selection range.

        The return value of 'toNormalizedRange' is checked for nullptr in many places, but not everywhere.
        This patch adds those missing nullptr checks.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper textMarkerRangeForSelection]):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleAtSelectionStart):
        * editing/Editor.cpp:
        (WebCore::Editor::misspelledWordAtCaretOrRange const):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::containsNode const):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):

2017-10-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223215.

        This change broke the Sierra build.

        Reverted changeset:

        "[Apple Pay] Add subLocality and subAdministrativeArea to
        ApplePayPaymentContact"
        https://bugs.webkit.org/show_bug.cgi?id=178191
        https://trac.webkit.org/changeset/223215

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

        XMLHttpRequest: do not sniff text/html, and do not sniff XML when responseType is set to "text"
        https://bugs.webkit.org/show_bug.cgi?id=168724

        Reviewed by Ryosuke Niwa.

        WebKit enabled HTML / XML charset detection for HTML-ish / XML-ish
        responses even when response type is text, which does not match the
        specification.

        This patch is based on the following Blink patch by Yutaka Hirano <yhirano@chromium.org>:
        - https://chromium.googlesource.com/chromium/src.git/+/47e4fc53e6d68c0a788fcc26de598b9e3848033f

        Tests:
        imported/w3c/web-platform-tests/XMLHttpRequest/responsetext-decoding.htm
        imported/w3c/web-platform-tests/XMLHttpRequest/responsedocument-decoding.htm

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createDecoder const):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2017-10-11  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add subLocality and subAdministrativeArea to ApplePayPaymentContact
        https://bugs.webkit.org/show_bug.cgi?id=178191
        <rdar://problem/34906367>

        Reviewed by Tim Horton.

        Added test cases to http/tests/ssl/applepay/ApplePaySession.html.

        * Modules/applepay/ApplePayPaymentContact.h:
        * Modules/applepay/ApplePayPaymentContact.idl:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::convert):

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

        Add API to clean CacheStorage data
        https://bugs.webkit.org/show_bug.cgi?id=178034

        Reviewed by Chris Dumez.

        Test: http/tests/cache-storage/cache-clearing.https.html

        * platform/FileSystem.h:

2017-10-11  David Kilzer  <ddkilzer@apple.com>

        Part 2: Fix -Wcast-qual and -Wunused-lambda-capture warnings in WebCore with new clang compiler
        <https://webkit.org/b/178036>
        <rdar://problem/33667497>

        Reviewed by Chris Dumez.

        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::doRemove):
        - Change ASSERT() to ASSERT_UNUSED() to suppress warnings about
          unused lambda capture for 'cacheIdentifier' in Release builds.
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::classForIsA): Change C-style cast
        into reinterpret_cast and const_cast to go from CFTypeRef to
        ObjcClass*.
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::castDataArgumentToCCRSACryptorCreateFromDataIfNeeded):
        Add.  Introduce method to add a required const_cast for older
        OSes since the signature of CCRSACryptorCreateFromData() changed
        in iOS 11 & High Sierra.
        (WebCore::CryptoKeyRSA::create): Use
        castDataArgumentToCCRSACryptorCreateFromDataIfNeeded().
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        Remove unused lambda capture for 'status'.

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

        [Geolocation] Expose Coordinates.floorLevel
        https://bugs.webkit.org/show_bug.cgi?id=178173
        <rdar://problem/34918936>

        Reviewed by Ryosuke Niwa.

        Expose Coordinates.floorLevel via the Geolocation API. This is currently
        a WebKit-specific extension and it is only populated on iOS / WKTR / DRT.
        It is null on other platforms.

        Test: fast/dom/Geolocation/floorLevel.html

        * Modules/geolocation/Coordinates.h:
        (WebCore::Coordinates::floorLevel const):
        * Modules/geolocation/Coordinates.idl:
        * Modules/geolocation/GeolocationPosition.h:
        (WebCore::GeolocationPosition::encode const):
        (WebCore::GeolocationPosition::decode):
        * Modules/geolocation/ios/GeolocationPositionIOS.mm:
        (WebCore::GeolocationPosition::GeolocationPosition):
        * page/Settings.in:

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

        Avoid triggering layout from style change
        https://bugs.webkit.org/show_bug.cgi?id=178184
        rdar://problem/34699113

        Reviewed by Zalan Bujtas.

        It's bad for RenderBox::styleDidChange() to scroll RenderLayers, because that
        can trigger layout via FrameView::updateWidgetPositions() and ScrollingCoordinator::absoluteEventTrackingRegions().
        So postpone the scrolling until after layout.

        Test: fast/scrolling/adjust-scroll-offset-on-zoom.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::setPostLayoutScrollPosition):
        (WebCore::RenderLayer::applyPostLayoutScrollPositionIfNeeded):
        * rendering/RenderLayer.h:

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

        Bump default cache storage quota to 20MB
        https://bugs.webkit.org/show_bug.cgi?id=178132

        Reviewed by Alex Christensen.

        Covered by http/wpt/cache-storage/cache-quota.any.html.

        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::cacheStoragePerOriginQuota const):
        (WebCore::NetworkStorageSession::setCacheStoragePerOriginQuota):

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

        Allow PAL to log messages
        https://bugs.webkit.org/show_bug.cgi?id=171523

        Reviewed by Alex Christensen.

        Make the model of WebCore/PAL match the model of WebKit/WebCore. This is because PAL will
        need to log things (because existing files in WebCore/platform need to log things).

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):
        * platform/Logging.cpp:
        (WebCore::registerNotifyCallback): Deleted.
        * platform/Logging.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):

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

        Unreviewed, fix build with some SDKs.

        Stop capturing |this| unnecessarily in lambda.

        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::getEntry):

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

        Unreviewed, fix build with some SDKs.

        Stop capturing |this| unnecessarily in lambda.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::getFile):

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

        Extract logic to paint composition underlines to its own function
        https://bugs.webkit.org/show_bug.cgi?id=178038

        Reviewed by Zalan Bujtas.

        No functionality changed. So, no new tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Modified to call paintCompositionUnderlines().
        (WebCore::InlineTextBox::paintCompositionUnderlines const): Added; extract code
        from InlineTextBox::paint() and modernized it.
        (WebCore::InlineTextBox::paintCompositionUnderline const): Added.
        (WebCore::InlineTextBox::paintCompositionUnderline): Deleted; made const.
        * rendering/InlineTextBox.h:

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

        InlineTextBox::isSelected() should only return true for a non-empty selection
        and remove incorrect FIXME from InlineTextBox::localSelectionRect()
        https://bugs.webkit.org/show_bug.cgi?id=160786

        Reviewed by Zalan Bujtas.

        Partial revert of r204400 in InlineTextBox::{isSelected, localSelectionRect}().

        The function InlineTextBox::isSelected() should only return true for a non-empty selection.
        Also remove an incorrect FIXME added to InlineTextBox::localSelectionRect() that questioned
        whether it was correct for it to return an empty rectangle. It is correct for it to return
        such a rectangle because this function is used to implement Element.getClientRects(). And
        Element.getClientRects() can return a rectangle with zero width or zero height by step 3
        of algorithm getClientRects() of section Extensions to the Element interface of the
        CSSOM View Module spec., <https://drafts.csswg.org/cssom-view/> (Editor's Draft, 15 September 2017).

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected const): Only return true for a non-empty selection
        and remove unnecessary FIXME. Also rename variables to improve readability.
        (WebCore::InlineTextBox::localSelectionRect const): Remove inaccurate FIXME comment.
        * rendering/InlineTextBox.h:

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

        Sanitize URL in pasteboard for other applications and cross origin content
        https://bugs.webkit.org/show_bug.cgi?id=178060
        <rdar://problem/34874518>

        Reviewed by Wenson Hsieh.

        This patch introduces the sanitization of URL when written from a web content to prevent web content from
        exploiting the URL parser of other applications in the system particularly of those that actively monitor
        system pasteboard (a.k.a. clipboard on non-Cocoa platforms) and decode or otherwise process URLs.

        Because the Web compatibility requires that DataTransfer exposes the original URL to any document in the
        same origin as the one which wrote the URL into the pasteboard, we store a string which uniquely identifies
        the origin of an originating document into our custom pasteboard data. Note that we expose any URL which
        didn't come from WebKit since we don't expect URLs to reveal privacy sensitive information. We use UUID for
        the origin identifier of a null origin document.

        An alternative approach is to store the pasteboard data from the same origin into the document and invalidate
        it when the system pasteboard changes. However, Pasteboard object cannot know about Document (as Pasteboard
        is a platform object and Document is a WebCore object), this turns out be quite tricky as there are multiple
        places where we create Pasteboard objects, and they all need to be aware of this special same origin
        Pasteboard object that hangs off of Document. Also, this approach would result in the same origin code paths
        to diverge between null origin and non-null origin documents.

        Tests: editing/pasteboard/data-transfer-get-data-on-copying-pasting-malformed-url-in-same-document.html
               editing/pasteboard/data-transfer-set-data-ignore-copied-walformed-url-in-null-origin.html
               editing/pasteboard/data-transfer-set-data-sanitlize-url-when-copying-in-null-origin.html
               editing/pasteboard/data-transfer-set-data-sanitlize-url-when-dragging-in-null-origin.html
               http/tests/security/clipboard/copy-paste-url-across-origin-sanitizes-url.html
               CopyURL.ValidURL
               CopyURL.UnescapedURL
               CopyURL.MalformedURL
               DataInteractionTests.DataTransferSetDataValidURL
               DataInteractionTests.DataTransferSetDataUnescapedURL
               DataInteractionTests.DataTransferSetDataInvalidURL

        * dom/DataTransfer.cpp:
        (WebCore::originForDocument): Extracted from createForCopyAndPaste.
        (WebCore::DataTransfer::createForCopyAndPaste):
        (WebCore::DataTransfer::getDataForItem const): Read the URL from the custom data when the originating content
        is of the same origin. When the originating content is cross origin, or there is no custom data (e.g. written
        by another native application; or sanitization didn't result in any difference), then callback to native value.
        (WebCore::DataTransfer::setDataFromItemList): Sanitize the URL before writing it to the native pasteboard.
        Store the original value if the sanitization resulted in any difference.
        (WebCore::DataTransfer::types const):
        (WebCore::DataTransfer::commitToPasteboard): Moved the code to write custom data to Pasteboard since we need
        to write the origin string with it.
        (WebCore::DataTransfer::createForDragStartEvent): Added Document as an argument to compute the origin string.
        (WebCore::DataTransfer::createForDrop): Ditto.
        (WebCore::DataTransfer::createForUpdatingDropTarget):
        (WebCore::DataTransfer::moveDragState):
        * dom/DataTransfer.h:
        * dom/Document.cpp:
        (WebCore::Document::uniqueIdentifier): Added. See above.
        * dom/Document.h:
        * editing/Editor.cpp:
        (WebCore::createDataTransferForClipboardEvent):
        (WebCore::dispatchClipboardEvent):
        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::handleDrag):
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/StaticPasteboard.cpp:
        (WebCore::StaticPasteboard::takeCustomData): Moved the logic to write to native pasteboard to DataTransfer.
        * platform/StaticPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::typesSafeForBindings):
        (WebCore::Pasteboard::readStringInCustomData): Rewritten using readCustomData. See below.
        (WebCore::Pasteboard::readOrigin): Added.
        (WebCore::Pasteboard::readCustomData): Added. Populates the cache. Because a single Pasteboard object is never
        allowed to read values once its content is updated by other applications, we can permanently cache the result.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::typesSafeForBindings): Now takes the unused origin string.
        (WebCore::Pasteboard::readOrigin): Added.
        * platform/gtk/PlatformPasteboardGtk.cpp:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Now takes the unused origin string.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::originKeyKeyForTeamData): Added.
        (WebCore::customTypesKeyForTeamData): Added. Replaces the use of PasteboardCustomData::cocoaType() in the team
        data for clarity since the team data key isn't same as the pasteboard type. We don't have to worry about the
        backwards compatibility since drag & drop session doesn't persist across iOS upgrades, and there is no publicly
        released iOS with this team data support.
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Read the origin string and the custom data
        off the team data. Don't expose custom types that are written by cross origin documents.
        (WebCore::PlatformPasteboard::write): Add the orign string with custom pasteboard types in the team data.
        (WebCore::PlatformPasteboard::readURL): Fixed a bug that this function was not reading NSURL when UIPasteboard
        serializes NSURL as a plist. This code is exercised by CopyURL.ValidURL.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Don't add custom pasteboard types that are
        added by cross origin documents.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::typesSafeForBindings): Now takes the unused origin string.
        (WebCore::Pasteboard::readOrigin): Added.
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::typesSafeForBindings): Now takes the unused origin string.
        (WebCore::Pasteboard::readOrigin): Added.
        * platform/wpe/PlatformPasteboardWPE.cpp:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const): Now takes the unused origin string.

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

        Remove some obsolete layout assertions
        https://bugs.webkit.org/show_bug.cgi?id=178170

        Reviewed by Zalan Bujtas.

        We have strong assertions against render tree mutation functions being called in layout. These are unnecessary.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::takeChildInternal):
        * rendering/RenderElement.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::layout):
        * rendering/RenderListItem.h:

2017-10-11  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement Apple Pay merchant validation
        https://bugs.webkit.org/show_bug.cgi?id=178159

        Reviewed by Brady Eidson.

        When ApplePayPaymentHandler::validateMerchant() is called, dispatch the
        applepayvalidatemerchant event to the PaymentRequest object.

        The event object is an ApplePayMerchantValidationEvent, on which the client calls complete()
        with a merchant session.

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

        * DerivedSources.make:
        * Modules/applepay/ApplePayValidateMerchantEvent.h:
        * Modules/applepay/paymentrequest/ApplePayMerchantValidationEvent.cpp: Added.
        (WebCore::ApplePayMerchantValidationEvent::create):
        (WebCore::ApplePayMerchantValidationEvent::ApplePayMerchantValidationEvent):
        (WebCore::ApplePayMerchantValidationEvent::complete):
        (WebCore::ApplePayMerchantValidationEvent::eventInterface const):
        * Modules/applepay/paymentrequest/ApplePayMerchantValidationEvent.h: Added.
        * Modules/applepay/paymentrequest/ApplePayMerchantValidationEvent.idl: Added.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::validateMerchant):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::MockPaymentCoordinator):
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        * testing/MockPaymentCoordinator.h:

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

        Modernize Geolocation code
        https://bugs.webkit.org/show_bug.cgi?id=178148

        Reviewed by Ryosuke Niwa.

        Modernize Geolocation code:
        - Use std::optional<> instead of separate boolean members
        - Make GeolocationPosition a simple struct that can be passed via IPC
        - Replace WebGeolocationPosition::Data with GeolocationPosition
        - Move logic to construct a GeolocationPosition from a CLLocation on iOS
          in one place to avoid code duplication.

        * Modules/geolocation/Coordinates.cpp:
        (WebCore::Coordinates::Coordinates):
        * Modules/geolocation/Coordinates.h:
        (WebCore::Coordinates::create):
        (WebCore::Coordinates::isolatedCopy const):
        (WebCore::Coordinates::latitude const):
        (WebCore::Coordinates::longitude const):
        (WebCore::Coordinates::altitude const):
        (WebCore::Coordinates::accuracy const):
        (WebCore::Coordinates::altitudeAccuracy const):
        (WebCore::Coordinates::heading const):
        (WebCore::Coordinates::speed const):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::createGeoposition):
        (WebCore::Geolocation::lastPosition):
        * Modules/geolocation/GeolocationClient.h:
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::lastPosition):
        * Modules/geolocation/GeolocationController.h:
        * Modules/geolocation/GeolocationPosition.h:
        (WebCore::GeolocationPosition::GeolocationPosition):
        The default constructor is only needed by our IPC decoding code.

        (WebCore::GeolocationPosition::encode const):
        (WebCore::GeolocationPosition::decode):
        * Modules/geolocation/ios/GeolocationPositionIOS.mm: Copied from Source/WebCore/Modules/geolocation/Coordinates.cpp.
        (WebCore::GeolocationPosition::GeolocationPosition):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::lastPosition):
        (WebCore::GeolocationClientMock::controllerTimerFired):
        * platform/mock/GeolocationClientMock.h:

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

        Add a SW context process (where SW scripts will actually execute).
        https://bugs.webkit.org/show_bug.cgi?id=178156
        
        Reviewed by Andy Estes.

        No new tests (Covered by changes to existing tests).

        This patch adds an auxiliary "ServiceWorker context" WebProcess to a WebProcessPool.

        This process is where ServiceWorker scripts will execute, separate from the client WebProcess
        hosting the page(s) they are serving.

        This patch also adds all of the plumbing to pass along a fetched service worker script to this
        context WebProcess, as well as message back failure to actually start the script so we can test.

        Touches lots of code sites but is basically just a lot of plumbing.

        * WebCore.xcodeproj/project.pbxproj:

        * workers/service/ServiceWorkerContextData.h: Copied from Source/WebCore/workers/service/server/SWServerWorker.h.
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::finishFetchingScriptInServer):
        (WebCore::SWServer::Connection::scriptContextFailedToStart):
        (WebCore::SWServer::scriptFetchFinished):
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::createWorker):
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptFetchFinished):
        (WebCore::SWServerRegistration::scriptContextFailedToStart):
        * workers/service/server/SWServerRegistration.h:

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::SWServerWorker::~SWServerWorker):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::create):
        (WebCore::SWServerWorker::scriptURL const):
        (WebCore::SWServerWorker::script const):
        (WebCore::SWServerWorker::type const):
        (WebCore::SWServerWorker::workerID const):

2017-10-11  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Expose value of aria-keyshortcuts as object attribute
        https://bugs.webkit.org/show_bug.cgi?id=171175

        Reviewed by Chris Fleizach.

        Expose the author-provided string through the "keyshortcuts" object attribute.

        Test: accessibility/gtk/aria-keyshortcuts.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaKeyShortcutsValue const):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        * html/HTMLAttributeNames.in:

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

        [JSC] Drop Instantiate hook in ES6 module loader
        https://bugs.webkit.org/show_bug.cgi?id=178162

        Reviewed by Sam Weinig.

        Drop instantiate hooks.
        No behavior change.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:

2017-10-11  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Add dump of append pipeline
        https://bugs.webkit.org/show_bug.cgi?id=178074

        Reviewed by Xabier Rodriguez-Calvar.

        Enable dump of AppendPipeline.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::appendPipelineStateChangeMessageCallback):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::handleStateChangeMessage):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

2017-09-27  Frederic Wang  <fwang@igalia.com>

        [iOS] Do not flatten frames when async frame scrolling is enabled
        https://bugs.webkit.org/show_bug.cgi?id=173704

        Reviewed by Simon Fraser.

        This patch disables frame flattening when async frame scrolling is enabled on iOS, as
        otherwise you can not scroll them. Once iframe scrolling is implemented in iOS (bug 149264),
        developers and beta testers will be able to check it by enabling "Async Frame Scrolling"
        in the "Experimental WebKit Features" menu of Safari iOS.

        Test: platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling.html

        * page/FrameView.cpp:
        (WebCore::FrameView::frameFlatteningEnabled): Use effectiveFrameFlattening()
        * page/Settings.cpp:
        (WebCore::Settings::effectiveFrameFlattening): New function to return frameFlattening() or do
        some exceptions on iOS.
        * page/Settings.h: Declare effectiveFrameFlattening.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::flattenFrameSet): Use effectiveFrameFlattening()
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::flattenFrame): Ditto.
        * rendering/RenderView.cpp:
        (WebCore::FrameFlatteningLayoutDisallower::FrameFlatteningLayoutDisallower): Ditto.

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

        [GStreamer] Fix double seek requested by downloadbuffer GStreamer element in webkibwebsrc
        https://bugs.webkit.org/show_bug.cgi?id=178079

        Reviewed by Žan Doberšek.

        When the downloadbuffer GStreamer element requests two seeks too
        close to each other there's some rare race condition where our
        source answers that it is not seekable and ends up with
        downloadbuffer element to seek beyond the file size, which causes
        the server to issue a 416 HTTP error code eventually, causing our
        MediaPlayer to stop.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop): We only unset he seekable attribute if we are
        not seeking.

2017-10-10  Ryosuke Niwa  <rniwa@webkit.org>

        Enable custom pasteboard data in DumpRenderTree and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=178154

        Reviewed by Wenson Hsieh.

        Extracted the logic to compute the default enabled-ness of custom pasteboard data as
        Settings::defaultCustomPasteboardDataEnabled() to be called by WebKit1 and WebKit2 layers.

        * page/Settings.cpp:
        (WebCore::Settings::defaultCustomPasteboardDataEnabled): Extracted from customPasteboardDataEnabled.
        (WebCore::Settings::customPasteboardDataEnabled): Deleted. Now inlined in the header file.
        * page/Settings.h:
        (WebCore::Settings::customPasteboardDataEnabled):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::read): Fixed a bug that we were adding MIME type to the map before checking that
        we could actually read the buffer. We shouldn't skip a type (NSTIFFPboardType and kUTTypeTIFF for now)
        if an equivalent type had failed to read.

2017-10-10  Andy Estes  <aestes@apple.com>

        [Payment Request] Validate that all PaymentCurrencyAmounts use the same currency code when using Apple Pay
        https://bugs.webkit.org/show_bug.cgi?id=178150

        Reviewed by Tim Horton.

        Apple Pay requires a single currency code, but the Payment Request API allows the client to
        specify a currency code for each PaymentCurrencyAmount.

        Instead of having a required currencyCode property on ApplePayRequest and ignoring the
        currency property on PaymentCurrencyAmount, validate that all PaymentCurrencyAmounts use the
        same currency code and use that as ApplePaySessionPaymentRequest's currencyCode.

        Added test cases to http/tests/ssl/applepay/PaymentRequest.https.html.

        * Modules/applepay/ApplePayPaymentRequest.h:
        * Modules/applepay/ApplePayPaymentRequest.idl:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::validate):
        (WebCore::convertAndValidate):
        (WebCore::ApplePayPaymentHandler::show):
        * Modules/applepay/paymentrequest/ApplePayRequest.idl:

2017-10-10  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement PaymentRequest.canMakePayment()
        https://bugs.webkit.org/show_bug.cgi?id=178048

        Reviewed by Youenn Fablet.

        Test: http/tests/paymentrequest/payment-request-canmakepayment-method.https.html

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::convertData): Moved
        ApplePayRequest-to-ApplePaySessionPaymentRequest conversion from here to show().
        (WebCore::ApplePayPaymentHandler::show): Returned an exception if
        ApplePaySessionPaymentRequest conversion fails.
        (WebCore::shouldDiscloseApplePayCapability): Checked if we are in an ephimeral session or if
        Settings::applePayCapabilityDisclosureAllowed() is false.
        (WebCore::ApplePayPaymentHandler::canMakePayment): Called
        PaymentCoordinator::canMakePayments() or PaymentCoordinator::canMakePaymentsWithActiveCard()
        depending on shouldDiscloseApplePayCapability().
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/applepay/paymentrequest/ApplePayRequest.h:
        * Modules/applepay/paymentrequest/ApplePayRequest.idl: Defined merchantIdentifier.
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::parse): Moved JSON-parsing to here from show().
        (WebCore::PaymentRequest::show): Returned the exception from PaymentHandler::show().
        (WebCore::PaymentRequest::canMakePayment): For each payment method, try to create a
        PaymentHandler.
        For the first valid PaymentHandler, call canMakePayment() and pass a lambda that resolves
        the promise.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl: Added CallWith=Document annotations to show()
        and canMakePayment().

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

        Unreviewed, really fix the build with certain SDKs.

        Follow-up to r223154, which fixed the wrong lambda.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::getEntry):
        (WebCore::DOMFileSystem::getFile):

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

        Unreviewed, fix build with certain SDKs.

        Stop capturing |this| unnecessarily in lambda.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::getEntry):

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

        Unreviewed, rolling out r223148.

        This caused build failures.

        Reverted changeset:

        "Fix MSVC build with ENCRYPTED_MEDIA enabled"
        https://bugs.webkit.org/show_bug.cgi?id=177803
        http://trac.webkit.org/changeset/223148

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

        AccessibilityRenderObject should not hold a raw pointer to RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=178144
        <rdar://problem/34919287>

        Reviewed by Chris Fleizach.

        m_renderer's lifetime is not directly tied to the AX wrapper object's lifetime.

        Covered by existing tests.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::elementAccessibilityHitTest const):
        * accessibility/AccessibilityMathMLElement.cpp:
        (WebCore::AccessibilityMathMLElement::isMathFenceOperator const):
        (WebCore::AccessibilityMathMLElement::isMathSeparatorOperator const):
        (WebCore::AccessibilityMathMLElement::mathLineThickness const):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::press):
        (WebCore::AccessibilityMenuList::isCollapsed const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::renderBoxModelObject const):
        (WebCore::AccessibilityRenderObject::setRenderer):
        (WebCore::AccessibilityRenderObject::previousSibling const):
        (WebCore::AccessibilityRenderObject::anchorElement const):
        (WebCore::AccessibilityRenderObject::helpText const):
        (WebCore::AccessibilityRenderObject::boundingBoxRect const):
        (WebCore::AccessibilityRenderObject::supportsPath const):
        (WebCore::AccessibilityRenderObject::elementPath const):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityRenderObject::index const):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::observableObject const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::textChanged):
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement const):
        (WebCore::AccessibilityRenderObject::roleValueForMSAA const):
        (WebCore::AccessibilityRenderObject::getScrollableAreaIfScrollable const):
        (WebCore::AccessibilityRenderObject::scrollTo const):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::setRenderObject):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::elementAccessibilityHitTest const):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityTableCell::parentTable const):
        (WebCore::AccessibilityTableCell::rowIndexRange const):
        (WebCore::AccessibilityTableCell::columnIndexRange const):
        (WebCore::AccessibilityTableCell::titleUIElement const):

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

        Replace copyKeysToVector/copyValuesToVector with copyToVector(map.keys())/copyToVector(map.values())
        https://bugs.webkit.org/show_bug.cgi?id=178102

        Reviewed by Tim Horton.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Watchers::getNotifiersVector const):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::connectionClosedFromServer):
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::connectionToServerLost):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::getTracks const):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::windowProxies):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::item const):
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::removeMarkers):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::disconnectFromAllWorkerInspectorProxies):
        * inspector/NetworkResourcesData.cpp:
        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll):
        (WebCore::setAllDefersLoading):
        (WebCore::areAllLoadersPageCacheAcceptable):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::forEachSessionResource):
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::scheduleAll):
        (WebCore::unscheduleAll):
        * page/ResourceUsageThread.cpp:
        (WebCore::ResourceUsageThread::notifyObservers):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::tracks const):

            Replace copyKeysToVector / copyValuesToVector with copyToVector(map.keys()) / copyToVector(map.values())

2017-10-10  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Fix MSVC build with ENCRYPTED_MEDIA enabled
        https://bugs.webkit.org/show_bug.cgi?id=177803

        Reviewed by Alex Christensen.

        As a workaround for MSVC, a weak pointer of "this" is captured
        at the outermost lambda expression.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::load):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::remove):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::updateLicense):
        (WebCore::CDMInstanceClearKey::loadSession):
        (WebCore::CDMInstanceClearKey::removeSessionData):

2017-10-10  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] ARIA form role should be mapped to ATK_ROLE_LANDMARK; not ATK_ROLE_FORM
        https://bugs.webkit.org/show_bug.cgi?id=178137

        Reviewed by Chris Fleizach.

        Expose the ARIA form role as ATK_ROLE_LANDMARK; continue to expose the HTML form
        element as ATK_ROLE_FORM.

        No new tests needed due to existing coverage. Update expectations for roles-exposed.html.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2017-10-10  Matt Rajca  <mrajca@apple.com>

        Respect audio rate change restrictions in HTMLMediaElement::setVolume.
        https://bugs.webkit.org/show_bug.cgi?id=178140

        Reviewed by Eric Carlson.

        Tests: media/audio-playback-volume-changes-with-restrictions-and-user-gestures.html
               media/audio-playback-volume-changes-with-restrictions.html

        It's currently possible for a website to start auto-playing media with a zero volume and then
        programmatically set the volume to a non-zero value without a user gesture. This code path didn't
        have to be considered previously because volume changes are not supported on iOS.

        We currently pause media when an audio track comes in after an element has already started playing silently
        in mediaPlayerDidAddAudioTrack. This patch does the same when a non-zero volume is set after a media
        element already began playing silently and there is an audio rate change restriction.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setVolume):

2017-10-10  Ryosuke Niwa  <rniwa@webkit.org>

        Loading should be disabled while constructing the fragment in WebContentReader::readWebArchive
        https://bugs.webkit.org/show_bug.cgi?id=178118

        Reviewed by Antti Koivisto.

        Disable image loading while constructing the document fragment in WebContentReader::readWebArchive
        as we do in createFragmentAndAddResources for RTF/RTFD. This refactoring is needed to start using
        blob URL in the pasted document fragment for webkit.org/b/124391.

        Also modified WebContentReader::readWebArchive to take a reference to SharedBuffer instead of a pointer.

        No new tests since existing tests have been updated to cover this behavior change.

        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readWebArchive): Use DeferredLoadingScope to disable the loader and images
        while constructing the document fragment.
        * platform/Pasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::readPasteboardWebContentDataForType):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read):

2017-10-10  Antti Koivisto  <antti@apple.com>

        Layers should be destroyed by RenderLayerModelObject
        https://bugs.webkit.org/show_bug.cgi?id=178139

        Reviewed by Simon Fraser.

        Clean up some FIXMEs.

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::willBeDestroyed):
        (WebCore::RenderLayerModelObject::destroyLayer):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):

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

        Entries API should recognize path starting with 2 slashes as valid absolute path
        https://bugs.webkit.org/show_bug.cgi?id=178135

        Reviewed by Ryosuke Niwa.

        Entries API should recognize paths starting with 2 slashes as valid absolute paths to match Chrome's behavior.
        See https://github.com/WICG/entries-api/commit/990454758005a6039655835503d551015e346d9d

        This was causing us to fail some manual web-platform-tests.

        No new tests, updated existing tests.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::isValidPathSegment):
        (WebCore::isZeroOrMorePathSegmentsSeparatedBySlashes):
        (WebCore::isValidRelativeVirtualPath):
        (WebCore::isValidVirtualPath):

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

        Unreviewed, rolling out r223110.

        This caused consistent failures and timeouts on multiple
        platforms.

        Reverted changeset:

        "Delete button doesn't fully delete certain emoji"
        https://bugs.webkit.org/show_bug.cgi?id=178096
        http://trac.webkit.org/changeset/223110

2017-10-10  Antti Koivisto  <antti@apple.com>

        RenderObject::destroy() should only be invoked after renderer has been removed from the tree
        https://bugs.webkit.org/show_bug.cgi?id=178075

        Reviewed by Zalan Bujtas.

        This patch fixes the remaining cases where the renderer is still in the tree while destroy()
        is called and adds the assert.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        (WebCore::RenderBlock::takeChild):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):

            Null the parent pointers for m_scrollCorner/m_resizer.

        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        (WebCore::RenderObject::destroy):

            Use RELEASE_ASSERT as these are cheap and important checks.
            Also turn isBeingDestroyed test into RELEASE_ASSERT.
            Remove AX call that no longer does anything.

        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveBlockChildren):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::collapseAndDestroyAnonymousSiblingRows):
        (WebCore::RenderTableRow::destroyAndCollapseAnonymousSiblingRows): Deleted.

            Renamed and made this no longer destroy itself. The caller now takes care of that.
            Removed an unnecessary lambda.

        * rendering/RenderTableRow.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        (WebCore::RenderTreeUpdater::tearDownRenderer):
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):

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

        Add isContinuation bit
        https://bugs.webkit.org/show_bug.cgi?id=178084

        Reviewed by Zalan Bujtas.

        Currently continuations are identified indirectly by comparing renderer pointer with the element renderer pointer.
        This is bug prone and fails to cover anonymous continuations.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::firstChildConsideringContinuation):
        (WebCore::startOfContinuations):
        (WebCore::firstChildIsInlineContinuation):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):

            Ignore first-letter fragment. This worked before because first-letter renderers
            were mistakenly considered inline element continuations (see below).

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::setContinuation):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasContinuation const):
        (WebCore::RenderElement::isContinuation const):
        (WebCore::RenderElement::setIsContinuation):

            The new bit.

        (WebCore::RenderElement::isElementContinuation const):
        (WebCore::RenderElement::isInlineElementContinuation const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::cloneAsContinuation const):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::childBecameNonInline):
        (WebCore::RenderInline::clone const): Deleted.
        * rendering/RenderInline.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock const):
        (WebCore::RenderObject::isElementContinuation const): Deleted.

            The old continuation test was 'node() && node()->renderer() != this'
            This was fragile as nulling the renderer will make it fail.
            It was also wrong for first-letter renderers (isElementContinuation was true for them).

        (WebCore::RenderObject::isInlineElementContinuation const): Deleted.

            Move to RenderElement.

        (WebCore::RenderObject::isBlockElementContinuation const): Deleted.

2017-10-10  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] STATE_CHECKABLE should be removed from radio buttons in radiogroups with aria-readonly="true"
        https://bugs.webkit.org/show_bug.cgi?id=177931

        Reviewed by Chris Fleizach.

        Add a check in canSetValueAttribute() for readonly radiogroup ancestors of
        radio buttons.

        Test: accessibility/gtk/aria-readonly-radiogroup.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canSetValueAttribute const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::radioGroupAncestor const):
        * accessibility/AccessibilityObject.h:

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

        Calling fileSystemDirectoryEntry.getDirectory() with empty path should not fail
        https://bugs.webkit.org/show_bug.cgi?id=178114

        Reviewed by Ryosuke Niwa.

        Calling fileSystemDirectoryEntry.getDirectory() with empty/null/undefined path should not fail as per:
        - https://wicg.github.io/entries-api/#dom-filesystemdirectoryentry-getdirectory

        The empty string is a valid path as per:
        - https://wicg.github.io/entries-api/#valid-path

        This aligns out behavior with Chrome.

        No new tests, updated existing test.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::isValidVirtualPath):
        (WebCore::resolveRelativeVirtualPath):

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

        It should not be possible to submit a form that is disconnected
        https://bugs.webkit.org/show_bug.cgi?id=178099

        Reviewed by Sam Weinig.

        It should not be possible to submit a form that is disconnected. Both Firefox and Chrome agree with the specification.

        This is as per:
        https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#form-submission-algorithm (step 1)
        which refers to:
        https://html.spec.whatwg.org/multipage/links.html#cannot-navigate

        Form cannot navigate when it is disconnected.

        No new tests, rebaselined existing tests.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareForSubmission):

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

        Delete button doesn't fully delete certain emoji
        https://bugs.webkit.org/show_bug.cgi?id=178096
        <rdar://problem/34785106>

        Reviewed by Simon Fraser.

        System infrastructure for handling emoji changes every year. Instead of having
        custom code to specifically walk over codepoints, we should delegate to the
        system handling.

        Test: editing/deleting/delete-emoji.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffset const):
        (WebCore::RenderText::previousOffsetForBackwardDeletion const):
        (WebCore::RenderText::nextOffset const):
        (WebCore::isHangulLVT): Deleted.
        (WebCore::isMark): Deleted.
        (WebCore::isRegionalIndicator): Deleted.
        (WebCore::isInArmenianToLimbuRange): Deleted.

2017-10-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Image data should be coalesced if it comes in small chunks before updating the ImageSource
        https://bugs.webkit.org/show_bug.cgi?id=175890

        Reviewed by Simon Fraser.

        Coalesce the updates, which an Image makes when receiving encoded data in
        small chunks, for all platforms. Ensure the clients of the CachedImage
        won't be notified unless an update in the ImageSource happens.

        I need to change some functions' names to better implement this patch. 
        The names of these functions have been confusing:
            CachedImage::addData(SharedBuffer&)
            CachedImage::addDataBuffer(const char* data, unsigned)
            CachedImage::addIncrementalDataBuffer(SharedBuffer&)

        The image data is not buffered incrementally into the CachedImage. When
        new data is received, SubresourceLoader calls CachedImage to "update" its
        m_data with either a SharedBuffer or a data pointer. In either case the
        SharedBuffer or the pointer contains all the loaded data. SubresourceLoader
        calls CachedImage to update its m_data, to ensure its m_image is created 
        and to notify its clients with the new data.

        The verb "add" in the functions' name is misleading. I am suggesting the
        following names instead:
            CachedImage::updateBuffer(SharedBuffer&)
            CachedImage::updateData(const char*, unsigned)
            CachedImage::doUpdateBuffer(SharedBuffer&)

        The first two are the virtual ones. They are called form SubresourceLoader.
        The third one is the internal implementation to update the m_data member.
        The same names will be used in the following classes:
            CachedResource which is the base class of CachedImage
            CachedRawResource which is derived from CachedResource
            CachedTextTrack which is derived from CachedResource

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::updateDuringParsing):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveDataOrBuffer):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::clearImage): Reset the update back off members.
        (WebCore::CachedImage::doUpdateBuffer): Don't update CachedImage with
        the new data if it comes in small chunks with fast rate.
        (WebCore::CachedImage::shouldDeferUpdateImageData const): This code is moved 
        from ImageSource::dataChanged().
        (WebCore::CachedImage::didUpdateImageData): Ditto.
        (WebCore::CachedImage::updateImageData):
        (WebCore::CachedImage::updateBuffer):
        (WebCore::CachedImage::updateData):
        (WebCore::CachedImage::finishLoading):
        (WebCore::CachedImage::addIncrementalDataBuffer): Deleted.
        (WebCore::CachedImage::setImageDataBuffer): Deleted.
        (WebCore::CachedImage::addDataBuffer): Deleted.
        (WebCore::CachedImage::addData): Deleted.
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):
        (WebCore::CachedRawResource::updateData):
        (WebCore::CachedRawResource::addDataBuffer): Deleted.
        (WebCore::CachedRawResource::addData): Deleted.
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::updateBuffer):
        (WebCore::CachedResource::updateData):
        (WebCore::CachedResource::addDataBuffer): Deleted.
        (WebCore::CachedResource::addData): Deleted.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::doUpdateBuffer): Rename updateData() to doUpdateBuffer().
        (WebCore::CachedTextTrack::updateBuffer): Rename addDataBuffer() to updateBuffer().
        (WebCore::CachedTextTrack::finishLoading): Call the internal function doUpdateBuffer().
        (WebCore::CachedTextTrack::updateData): Deleted.
        (WebCore::CachedTextTrack::addDataBuffer): Deleted.
        * loader/cache/CachedTextTrack.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::dataChanged): Move the update back off code to CachedImage::updateData().
        * platform/graphics/ImageSource.h:

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

        Implement RegExp Unicode property escapes
        https://bugs.webkit.org/show_bug.cgi?id=172069

        Reviewed by JF Bastien.

        Refactoring change - Added BuiltInCharacterClassID:: prefix to uses of the enum.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::PatternParser::atomBuiltInCharacterClass):

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

        [Payment Request] Implement PaymentRequest.show() and PaymentRequest.hide()
        https://bugs.webkit.org/show_bug.cgi?id=178043
        <rdar://problem/34076639>

        Reviewed by Tim Horton.

        Tests: http/tests/paymentrequest/payment-request-abort-method.https.html
               http/tests/paymentrequest/payment-request-show-method.https.html

        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentSession.h: Virtually inherited from PaymentSessionBase to
        accommodate ApplePayPaymentHandler inheriting from both this and PaymentHandler.
        (WebCore::PaymentSession::~PaymentSession): Deleted.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::paymentCoordinator): Virtually inherited from PaymentSessionBase to accommodate
        ApplePayPaymentHandler inheriting from both this and PaymentSession.
        (WebCore::ApplePayPaymentHandler::hasActiveSession): Added. Calls PaymentCoordinator::hasActiveSession().
        (WebCore::ApplePayPaymentHandler::show): Added. Calls PaymentCoordinator::beginPaymentSession().
        (WebCore::ApplePayPaymentHandler::hide): Added. Calls PaymentCoordinator::abortPaymentSession().
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h: Inherited from PaymentSession in
        addition to PaymentHandler so that this can be PaymentCoordinator active session.
        * Modules/paymentrequest/PaymentHandler.cpp:
        (WebCore::PaymentHandler::create):
        (WebCore::PaymentHandler::hasActiveSession):
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::~PaymentRequest):
        (WebCore::PaymentRequest::show): Rejected the promise if PaymentCoordinator has an active session.
        (WebCore::PaymentRequest::abort): Called stop().
        (WebCore::PaymentRequest::canSuspendForDocumentSuspension const): Returned true if state is
        Interactive and there is an active handler showing.
        (WebCore::PaymentRequest::stop): Hid the active session if it's showing, then set state to
        Closed and rejected the show promise.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentSessionBase.h: Added. Inherits from
        RefCounted<PaymentSessionBase> and defines a virtual destructor. This allows subclasses to
        virtually inherit a single ref-count to support multiple inheritance.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetGnuVTableOffsetForType): Added ApplePaySession to the list of classes that need a vtable
        offset of 3.
        * page/MainFrame.cpp:
        (WebCore::MainFrame::setPaymentCoordinator): Added a setter for m_paymentCoordinator.
        * page/MainFrame.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals): Set the main frame's payment coordinator to a new
        PaymentCoordinator with MockPaymentCoordinator as its client.
        * testing/MockPaymentCoordinator.cpp: Added a mock PaymentCoordinatorClient for testing.
        (WebCore::MockPaymentCoordinator::supportsVersion):
        (WebCore::MockPaymentCoordinator::canMakePayments):
        (WebCore::MockPaymentCoordinator::canMakePaymentsWithActiveCard):
        (WebCore::MockPaymentCoordinator::openPaymentSetup):
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::paymentCoordinatorDestroyed):
        * testing/MockPaymentCoordinator.h: Added.

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

        Add quota to cache API
        https://bugs.webkit.org/show_bug.cgi?id=177552

        Reviewed by Alex Christensen.

        Tests: http/wpt/cache-storage/cache-quota.any.html

        Storing padded opaque response body sizes within FetchResponse and CacheStorageConnection.
        See https://github.com/whatwg/storage/issues/31 for the rationale about this padding.
        Storing in CacheStorageConnection is needed for handling cloned network fetched created responses.
        Storing in FetchResponse is needed for handling cloned cache-storage created opaque responses.

        Adding internals to query and set the fuzzed size of a response.

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::computeRealBodySize):
        (WebCore::CacheStorageConnection::computeRecordBodySize):
        (WebCore::CacheStorageConnection::setResponseBodySizeWithPadding):
        (WebCore::CacheStorageConnection::responseBodySizeWithPadding const):
        * Modules/cache/CacheStorageConnection.h:
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::toConnectionRecord):
        (WebCore::DOMCache::updateRecords):
        * Modules/cache/DOMCache.h:
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::errorToException):
        (WebCore::DOMCacheEngine::Record::copy const):
        * Modules/cache/DOMCacheEngine.h:
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::toCrossThreadRecordData):
        (WebCore::fromCrossThreadRecordData):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone):
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse):
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::setResponseSizeWithPadding):
        (WebCore::Internals::responseSizeWithPadding const):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Remove redundant RenderObject::virtualContinuation
        https://bugs.webkit.org/show_bug.cgi?id=178091
        <rdar://problem/34892906>

        Reviewed by Antti Koivisto.
 
        virtualContinuation sounds like a feature of continuation, while it's just a (not super useful)helper override.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderBlock::takeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderInline.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isBlockElementContinuation const):
        (WebCore::RenderObject::virtualContinuation const): Deleted.

2017-10-09  Dean Jackson  <dino@apple.com>

        [WebGL] Third IOSurface buffer might be allocated with the wrong size
        https://bugs.webkit.org/show_bug.cgi?id=178092
        <rdar://problem/34893173>

        Reviewed by Jer Noble.

        If the WebGL canvas resizes after the third buffer was allocated, it
        was never getting told that its backing store should be thrown away.

        * platform/graphics/cocoa/WebGLLayer.mm: Allocate the third buffer at
        the same time as the first two.
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]):
        (-[WebGLLayer bindFramebufferToNextAvailableSurface]):

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

        Make HashMap::keys() and HashMap::values() work with WTF::map/WTF::copyToVector
        https://bugs.webkit.org/show_bug.cgi?id=178072

        Reviewed by Darin Adler.

        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        (WebCore::MediaSelectionGroupAVFObjC::options):
        
            Update for type change for HashMap::values().
            
2017-10-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, another build fix attempt after r223031

        The default constructor of DragTargetResponse is also invoked via initializer list in EventHandler.cpp, so we'll
        need to explicitly declare this constructor in the header.

        * page/EventHandler.h:

2017-10-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r223021.

        LayoutTests added with this change are failing.

        Reverted changeset:

        "[Payment Request] Implement PaymentRequest.show() and
        PaymentRequest.hide()"
        https://bugs.webkit.org/show_bug.cgi?id=178043
        http://trac.webkit.org/changeset/223021

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

        Blurry captions on retina screens.
        https://bugs.webkit.org/show_bug.cgi?id=177560
        rdar://problem/17913388

        Reviewed by Jer Noble.

        No new tests because the contents scale of the captions layer is not exposed to the DOM.

        The captions layer contents scale needs to take into account the device screen scale to get the correct resolution for captions.

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

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

        Unreviewed, fix the Windows build after r223031

        Speculative build fix; no change in behavior.

        * page/EventHandler.h:
        (WebCore::EventHandler::DragTargetResponse::DragTargetResponse):

2017-10-09  Alex Christensen  <achristensen@webkit.org>

        Reduce includes in Document.h
        https://bugs.webkit.org/show_bug.cgi?id=178035

        Reviewed by Darin Adler.

        * dom/Document.h:

2017-10-09  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Explicitly-set aria-sort value of "none" should be exposed as an object attribute
        https://bugs.webkit.org/show_bug.cgi?id=177955

        Reviewed by Chris Fleizach.

        Expose "none" as the value of aria-sort when the attribute is present and not
        one of the other valid sort types. Also add a new AccessibilitySortDirection,
        SortDirectionInvalid. This is currently only being used when the sort direction
        is sought for a role which does not support this ARIA attribute, but might come
        in handy if we want to add further sanity checks on the author-provided values.

        Test: accessibility/gtk/aria-sort-values.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::sortDirection const):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):

2017-10-09  Robin Morisset  <rmorisset@apple.com>

        Make the names of the options consistent 
        https://bugs.webkit.org/show_bug.cgi?id=177933

        Reviewed by Saam Barati.

        No functional change, just fixing comments.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::buffered const):
        (WebCore::MediaSource::monitorSourceBuffers):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        * bindings/scripts/generate-bindings.pl:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/VisibleUnits.cpp:
        (WebCore::closestWordBoundaryForPosition):
        * html/parser/AtomicHTMLToken.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::end):
        * inspector/InspectorOverlayPage.js:
        (reset):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::layoutWidth const):
        (WebCore::ViewportConfiguration::layoutHeight const):
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes):
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        * platform/mac/WidgetMac.mm:
        (WebCore::safeRemoveFromSuperview):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::collapseMarginsWithChildInfo):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::propagateRepaintToParentWithOutlineAutoIfNeeded const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor const):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::computeClassChange):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::didChangeStyleSheetEnvironment):
        * svg/SVGAltGlyphDefElement.cpp:
        (WebCore::SVGAltGlyphDefElement::hasValidGlyphElements const):

2017-10-09  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Propagate libepoxy compiler flags obtained from pkg-config
        https://bugs.webkit.org/show_bug.cgi?id=178081

        Reviewed by Carlos Alberto Lopez Perez.

        No new tests needed.

        * CMakeLists.txt: Use ${LIBEPOXY_DEFINITIONS} for building WebCore.

2017-10-09  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        [Readable Streams API] Implement canCloseOrEnqueue
        https://bugs.webkit.org/show_bug.cgi?id=178005

        Reviewed by Youenn Fablet.

        Implemented readableStreamDefaultControllerCanCloseOrEnqueue [1]. This is
        just a refactoring (based on spec) aiming at factorizing a set of tests
        that are done at multiple places.

        [1] https://streams.spec.whatwg.org/#readable-stream-default-controller-can-close-or-enqueue

        No new tests (refactoring, no new behavior).

        * Modules/streams/ReadableStreamDefaultController.js:
        (enqueue): Updated.
        (close): Updated.
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamDefaultControllerClose): Updated.
        (readableStreamDefaultControllerCanCloseOrEnqueue): Added.

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

        Remove WOFF2 from Source/ThirdParty.
        https://bugs.webkit.org/show_bug.cgi?id=177862

        Reviewed by Michael Catanzaro.

        No new tests, already covered by existing tests.

        * CMakeLists.txt: Use the system brotli/woff2 headers/libraries.

2017-10-08  Darin Adler  <darin@apple.com>

        Update HTMLOListElement.start to behavior from latest HTML specification
        https://bugs.webkit.org/show_bug.cgi?id=178057

        Reviewed by Chris Dumez.

        * html/HTMLOListElement.cpp:
        (optionalValue): Added. Helper function that we can put into Expected.h later
        if we like; makes it easier to turn Expected into std::optional.
        (WebCore::HTMLOListElement::HTMLOListElement): Moved data member initialization
        into class definition so it doesn't have to be done here.
        (WebCore::HTMLOListElement::parseAttribute): Simplified using the new
        optionalValue function. Moved the call to update values in here since it's
        a trivial one-liner (albeit done twice).
        (WebCore::HTMLOListElement::updateItemValues): Deleted. Moved this into the
        parseAttribute function.
        (WebCore::HTMLOListElement::itemCount): Updated to use std::optional instead
        of a separate m_shouldRecalculateItemCount flag. Also inlined the
        recalculateItemCount function since it's a trivial one-liner.
        (WebCore::HTMLOListElement::itemCountAfterLayout): Deleted. The only use of
        this was to implement the now-obsolete behavior of the start attribute.
        (WebCore::HTMLOListElement::recalculateItemCount): Deleted. Moved this into
        the itemCount function.

        * html/HTMLOListElement.h: Changed startForBindings to return 1 when start
        is not specified; this what the HTML specification now calls for. Updated
        for the changes above. Merged m_itemCount and m_shouldRecalculateItemCount
        into a single optional m_itemCount, and made it mutable so it can be
        computed as a side effect of calling the const member function start.

2017-10-08  Darin Adler  <darin@apple.com>

        Fix bugs related to setting reflected floating point DOM attributes
        https://bugs.webkit.org/show_bug.cgi?id=178061

        Reviewed by Sam Weinig.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::setValue): Changed the semantics to match what
        the HTML specification calls for. When a caller passes a negative number or
        zero, the value does get set on the element. Negative numbers are not allowed
        when you get the current value, but are allowed to be set.
        (WebCore::HTMLProgressElement::setMax): Changed the semantics to match what
        the HTML specification calls for. When a caller passes a negative number or
        zero, this should leave the attribute unchanged.

        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlVolumeSliderElement::setVolume): Use
        String::numberToStringECMAScript instead of String::number since that is what
        we want any time we are setting an attribute value from a floating point value.
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::setPosition): Ditto.
        (WebCore::MediaControlTimelineElement::setDuration): Removed unneeded check
        of std::isfinite since the single caller already checks that.

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

        DataTransfer.items does not contain items for custom types supplied via add or setData
        https://bugs.webkit.org/show_bug.cgi?id=178016

        Reviewed by Darin Adler.

        Minor tweaks to expose pasteboard types and data through DataTransfer's item list. This patch fixes two primary
        issues: (1) custom pasteboard data is not exposed through the item list in any way, and (2) the "Files"
        compatibility type is exposed as a separate data transfer item of kind 'string' when dropping or pasting files.

        Tests: editing/pasteboard/data-transfer-items-add-custom-data.html
               editing/pasteboard/data-transfer-items-drop-file.html

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

        Use stripLeadingAndTrailingHTMLSpaces instead of stripWhitespace.

        (WebCore::shouldReadOrWriteTypeAsCustomData):
        (WebCore::DataTransfer::getDataForItem const):
        (WebCore::DataTransfer::getData const):

        Add getDataForItem, a version of getData that does not normalize types before reading from the pasteboard. This
        normalization step is only needed for backwards compatibility with legacy types (such as "text" and "url")
        written to and read from using getData and setData; when using DataTransferItemList.add to set data, adding data
        for these types should instead write as custom pasteboard data.

        (WebCore::DataTransfer::setDataFromItemList):
        (WebCore::DataTransfer::types const):
        (WebCore::DataTransfer::typesForItemList const):

        Add typesForItemList, which fetches the list of types to expose as items on the DataTransfer. Importantly, this
        does not include the "Files" type added for compatibility when accessing DataTransfer.types, instead returning
        an empty array. The actual files are added separately, by iterating over DataTransfer's files in ensureItems.

        Note that when starting a drag or copying, we will still expose the full list of file and string types to
        bindings and not just file-backed items. Since all of this information is supplied by the page in the first
        place, we don't have to worry about exposing information, such as file paths, that may exist on the pasteboard.

        * dom/DataTransfer.h:
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::getAsString const):
        * dom/DataTransferItemList.cpp:
        (WebCore::shouldExposeTypeInItemList):
        (WebCore::DataTransferItemList::add):
        (WebCore::DataTransferItemList::ensureItems const):
        (WebCore::isSupportedType): Deleted.

2017-10-08  Darin Adler  <darin@apple.com>

        CustomElementRegistry.define was throwing a JavaScript syntax error instead of a DOM syntax error
        https://bugs.webkit.org/show_bug.cgi?id=178055

        Reviewed by Sam Weinig.

        Both the JavaScript language and the DOM have "syntax error" exceptions, but
        they are not the same thing.

        Also, since the time a while back where we moved JavaScript error handling to
        use WebCore::Exception and WebCore::ExceptionOr, there are a number of functions
        that are no longer used and can be deleted.

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::validateCustomElementNameAndThrowIfNeeded): Call throwDOMSyntaxError
        instead of throwSyntaxError.

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::reportDeprecatedGetterError): Deleted. Unused.
        (WebCore::reportDeprecatedSetterError): Deleted. Unused.
        (WebCore::throwNotSupportedError): Deleted the overload without an error message,
        since it's unused. Changed the other overload to take an ASCIILiteral, since
        that is what all the callers need.
        (WebCore::throwInvalidStateError): Take ASCIILiteral as above.
        (WebCore::throwArrayElementTypeError): Deleted. Unused.
        (WebCore::throwDOMSyntaxError): Added an ASCIILiteral message argument. This
        function was unused; it's now being used above, always with a literal message.
        (WebCore::throwIndexSizeError): Deleted. Unused.
        (WebCore::throwTypeMismatchError): Deleted. Unused.
        * bindings/js/JSDOMExceptionHandling.h: Updated for the changes above.

        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement): Fixed a typo in the error message.

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

        dragenter and dragleave shouldn't use the same data transfer object
        https://bugs.webkit.org/show_bug.cgi?id=178056

        Reviewed by Darin Adler.

        This patch fixes the bug that we were using a single DataTransfer to fire dragleave and dragenter events
        when the drag target moves from one element to another.

        It alos refactors DragController and EventHandler code so that the construction of DataTransfer object
        happens in EventHandler instead of DragController, and extracts createForUpdatingDropTarget out of
        createForDrop to have a better encapsulation over the data store mode.

        drag related functions in EventHandler now takes std::unique_ptr<Pasteboard>&&, drag operation mask set
        by the drag source, and a boolean indicating whether this drag & drop is for files or not. updateDragAndDrop
        takes a closure which makes a pasteboard because it has to create two instances of DataTransfer one for
        dragleave event and another one for dragenter event in some cases.

        Test: editing/pasteboard/data-transfer-is-unique-for-dragenter-and-dragleave.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createForDrop): Now takes Pasteboard instead of DragData.
        (WebCore::DataTransfer::createForUpdatingDropTarget): Extracted out of createForDrop. Moved the code to
        use Readonly mode in dashboad here from createDataTransferToUpdateDrag in DragController.cpp.
        * dom/DataTransfer.h:
        * page/DragController.cpp:
        (WebCore::createDataTransferToUpdateDrag): Deleted.
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::tryDHTMLDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent): Made this fucntion take DataTransfer& instead of DataTransfer*.
        (WebCore::findDropZone): Ditto.
        (WebCore::EventHandler::dispatchDragEnterOrDragOverEvent): Added.
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::dispatchDragSrcEvent):
        (WebCore::EventHandler::dispatchDragStartEventOnSourceElement):
        * page/EventHandler.h:

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

        SourceBuffer remove throws out way more content than requested
        https://bugs.webkit.org/show_bug.cgi?id=177884
        <rdar://problem/34817104>

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-remove-too-much.html

        The end parameter is exclusive, not inclusive, of the range to be removed.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames):

2017-10-08  Brent Fulgham  <bfulgham@apple.com>

        Nullptr deref in WebCore::Node::computeEditability
        https://bugs.webkit.org/show_bug.cgi?id=177905
        <rdar://problem/34138402>

        Reviewed by Darin Adler.

        Script can run when setting focus, because a blur event and a focus event are generated.
        A handler for one of these events can cause the focused element to be cleared. We should
        handle this possibility gracefully.

        Test: fast/dom/focus-shift-crash.html

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

2017-10-07  Darin Adler  <darin@apple.com>

        Update Document.createEvent for recent DOM specification changes
        https://bugs.webkit.org/show_bug.cgi?id=178052

        Reviewed by Chris Dumez.

        * dom/BeforeUnloadEvent.cpp:
        (WebCore::BeforeUnloadEvent::BeforeUnloadEvent): Added a constructor for
        createForBindings.
        (WebCore::BeforeUnloadEvent::~BeforeUnloadEvent): Deleted. Just let the
        compiler generate this.
        * dom/BeforeUnloadEvent.h: Added createForBindings. Also made more things private.

        * dom/Document.cpp:
        (WebCore::Document::createEvent): Updated comments for clarity. Responding to
        changes to the DOM specification, added support for "beforeunloadevent", "focusevent",
        and "svgevents", moved "keyboardevents" and "popstateevent" into the list of strings
        we should remove, and moved "compositionevent", "devicemotionevent",
        "deviceorientationevent", "hashchangeevent", "storageevent", and "textevent" into
        the list of strings we should keep.

        * dom/Event.h: Added a virtual setRelatedTarget alongside the virtual relatedTarget
        to allow us to clean up the code that manipulates it.

        * dom/EventContext.cpp:
        (WebCore::MouseOrFocusEventContext::handleLocalEvents const): Call the virtual
        setRelatedTarget instead of doing a little type casting dance.

        * dom/FocusEvent.h: Added createForBindings. Made more functions private and
        changed setRelatedTarget into a private final override.

        * dom/MouseEvent.h: Changed setRelatedTarget into a private final override.

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

        [Payment Request] Implement PaymentRequest.show() and PaymentRequest.hide()
        https://bugs.webkit.org/show_bug.cgi?id=178043
        <rdar://problem/34076639>

        Reviewed by Tim Horton.

        Tests: http/tests/paymentrequest/payment-request-abort-method.https.html
               http/tests/paymentrequest/payment-request-show-method.https.html

        * Modules/applepay/PaymentSession.h: Virtually inherited from PaymentSessionBase to
        accommodate ApplePayPaymentHandler inheriting from both this and PaymentHandler.
        (WebCore::PaymentSession::~PaymentSession): Deleted.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::paymentCoordinator): Virtually inherited from PaymentSessionBase to accommodate
        ApplePayPaymentHandler inheriting from both this and PaymentSession.
        (WebCore::ApplePayPaymentHandler::hasActiveSession): Added. Calls PaymentCoordinator::hasActiveSession().
        (WebCore::ApplePayPaymentHandler::show): Added. Calls PaymentCoordinator::beginPaymentSession().
        (WebCore::ApplePayPaymentHandler::hide): Added. Calls PaymentCoordinator::abortPaymentSession().
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h: Inherited from PaymentSession in
        addition to PaymentHandler so that this can be PaymentCoordinator active session.
        * Modules/paymentrequest/PaymentHandler.cpp:
        (WebCore::PaymentHandler::create):
        (WebCore::PaymentHandler::hasActiveSession):
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::~PaymentRequest):
        (WebCore::PaymentRequest::show): Rejected the promise if PaymentCoordinator has an active session.
        (WebCore::PaymentRequest::abort): Called stop().
        (WebCore::PaymentRequest::canSuspendForDocumentSuspension const): Returned true if state is
        Interactive and there is an active handler showing.
        (WebCore::PaymentRequest::stop): Hid the active session if it's showing, then set state to
        Closed and rejected the show promise.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentSessionBase.h: Added. Inherits from
        RefCounted<PaymentSessionBase> and defines a virtual destructor. This allows subclasses to
        virtually inherit a single ref-count to support multiple inheritance.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetGnuVTableOffsetForType): Added ApplePaySession to the list of classes that need a vtable
        offset of 3.

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

        WebContentReader::readHTML should be shared between macOS and iOS
        https://bugs.webkit.org/show_bug.cgi?id=178044

        Reviewed by Wenson Hsieh.

        Merged the implementations for WebContentReader::readHTML between macOS and iOS.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readHTML):
        * editing/ios/WebContentReaderIOS.mm:
        (WebCore::WebContentReader::readHTML): Deleted.
        * editing/mac/WebContentReaderMac.mm:
        (WebCore::WebContentReader::readHTML): Deleted.

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

        RenderTable should not hold a collection of raw pointers to RenderTableCaption
        https://bugs.webkit.org/show_bug.cgi?id=178026
        <rdar://problem/34863090>

        Reviewed by Simon Fraser.

        Similar to sections, RenderTable should not store captions as raw pointers. Their lifetimes are
        not guaranteed to be sync with the RenderTable's.

        Covered by existing tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addCaption):
        (WebCore::RenderTable::removeCaption):
        (WebCore::RenderTable::addOverflowFromChildren):
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::insertedIntoTree):
        (WebCore::RenderTableCaption::willBeRemovedFromTree):

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

        Spelling error annotation should encompass hyphen in misspelled word that wraps across multiple lines
        https://bugs.webkit.org/show_bug.cgi?id=177980
        <rdar://problem/34847454>

        Reviewed by Simon Fraser.

        On macOS the spelling and grammar annotations for a word or word phrase encompass
        hyphenations added because the word or word phrase wraps across more than one line.
        The effect tends to be more aesthetically pleasing and consistent with how these
        annotations would be pointed out by a person in conversation: by identify the word
        or phrase that has a spelling or grammar issue regardless of whether that word or
        phrase is broken into halves due to line wrapping. The same argument applies to
        other annotations on macOS, including text matches. Therefore, we should always
        include any hyphens encompassed by a marker that were added due to line wrapping
        when painting the marker.

        Test: editing/spelling/spelling-marker-includes-hyphen.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarker): Compute the text run including any
        added hyphens. If a hyphen was added then the inline text box represents that text
        up to the hyphen. Adjust the end position of the marker to be the length of the text
        run if its greater than or equal to the length of the text box.

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

        RenderTable should not hold a collection of raw pointers to RenderTableCol
        https://bugs.webkit.org/show_bug.cgi?id=178030
        <rdar://problem/34865236>

        Reviewed by Simon Fraser.

        In addition to the m_columnRenderersValid flag, this patch ensures that
        we don't dereference stale column renderers even when the flag is out of sync.

        Covered by existing tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateColumnCache const):
        (WebCore::RenderTable::slowColElement const):
        * rendering/RenderTable.h:

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

        RootInlineBox should not hold a collection of raw pointers to RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=178025
        <rdar://problem/34862488>

        Reviewed by Simon Fraser.

        There are already some assertions in place to check if the renderers are valid.

        Covered by existing test cases.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::reattachCleanLineFloats):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::determineEndPosition):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::appendFloat):
        (WebCore::RootInlineBox::floatsPtr):

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

        Continuation map should not hold a raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=178021
        <rdar://problem/34861590>

        Reviewed by Simon Fraser.

        This patch ensures proper lifetime management for renderers stored in the Continuation map
        (currently they rely on the correctness of addChild/takeChild methods).

        Covered by existing tests.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::continuation const):
        (WebCore::RenderBoxModelObject::setContinuation):

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

        Unreviewed, rolling out r222791 and r222873.
        https://bugs.webkit.org/show_bug.cgi?id=178031

        Caused crashes with workers/wasm LayoutTests (Requested by
        ryanhaddad on #webkit).

        Reverted changesets:

        "WebAssembly: no VM / JS version of everything but Instance"
        https://bugs.webkit.org/show_bug.cgi?id=177473
        http://trac.webkit.org/changeset/222791

        "WebAssembly: address no VM / JS follow-ups"
        https://bugs.webkit.org/show_bug.cgi?id=177887
        http://trac.webkit.org/changeset/222873

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

        Add more infrastructure to apply custom header fields to same-origin requests
        https://bugs.webkit.org/show_bug.cgi?id=177629

        Reviewed by Ryosuke Niwa.

        Covered by new API tests.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::customHeaderFields):
        * loader/HTTPHeaderField.cpp:
        (WebCore::HTTPHeaderField::create):
        (WebCore::HTTPHeaderField::HTTPHeaderField): Deleted.
        * loader/HTTPHeaderField.h:
        (WebCore::HTTPHeaderField::encode const):
        (WebCore::HTTPHeaderField::decode):
        
        Change HTTPHeaderField from one String containing the name and value
        to a string for the name and another for value.  This matches HTTPHeaderMap
        and NSURLRequest more closely where names and values are treated as separate Strings.
        
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        
        If the DocumentLoader has custom header fields from the WebsitePolicies, apply them to any same-origin requests.
        
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::resourceRequest):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setCachePolicy):
        (WebCore::ResourceRequestBase::setTimeoutInterval):
        (WebCore::ResourceRequestBase::setHTTPMethod):
        (WebCore::ResourceRequestBase::setHTTPHeaderField):
        (WebCore::ResourceRequestBase::clearHTTPAuthorization):
        (WebCore::ResourceRequestBase::clearHTTPContentType):
        (WebCore::ResourceRequestBase::clearHTTPReferrer):
        (WebCore::ResourceRequestBase::clearHTTPOrigin):
        (WebCore::ResourceRequestBase::clearHTTPUserAgent):
        (WebCore::ResourceRequestBase::clearHTTPAccept):
        (WebCore::ResourceRequestBase::clearHTTPAcceptEncoding):
        (WebCore::ResourceRequestBase::setResponseContentDispositionEncodingFallbackArray):
        (WebCore::ResourceRequestBase::setHTTPBody):
        (WebCore::ResourceRequestBase::setAllowCookies):
        (WebCore::ResourceRequestBase::setPriority):
        (WebCore::ResourceRequestBase::addHTTPHeaderFieldIfNotPresent):
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        (WebCore::ResourceRequestBase::setHTTPHeaderFields):
        
        non-HTTP/HTTPS ResourceRequests need to be updated, too, if header fields are added.
        Skipping updating non-HTTP/HTTPS ResourceRequests is not a valid shortcut, and with the
        growing importance of custom schemes with our new public API, we should update ResourceRequests
        of custom schemes correctly.

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

        Add basic support for getting a ImageBitmapRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=177983

        Reviewed by Dean Jackson.

        Add initial support for ImageBitmapRenderingContext.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        
            Add new files.
        
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Document.idl:
        
            Add ImageBitmapRenderingContext to RenderingContext variant so it wil be able to
            be used with Document.getCSSCanvasContext.
        
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setHeight):
        (WebCore::HTMLCanvasElement::setWidth):
        
            Throw an exception if the context is in the placeholder mode (which we
            signify via a special PlaceholderRenderingContext) as speced. This can't
            currently be hit, as setting a placeholder requires offscreen canvas
            support, coming soon.
        
        (WebCore::HTMLCanvasElement::getContext):
        
            Re-work to match the spec's matrix of options, adding in support
            for 'bitmaprenderer'/ ImageBitmapRenderingContext type as well as 
            the placeholder mode.
        
        (WebCore::HTMLCanvasElement::createContext2d):
        (WebCore::HTMLCanvasElement::getContext2d):
        (WebCore::HTMLCanvasElement::isWebGLType):
        (WebCore::HTMLCanvasElement::createContextWebGL):
        (WebCore::HTMLCanvasElement::getContextWebGL):
        (WebCore::HTMLCanvasElement::createContextWebGPU):
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        (WebCore::HTMLCanvasElement::isBitmapRendererType):
        (WebCore::HTMLCanvasElement::createContextBitmapRenderer):
        (WebCore::HTMLCanvasElement::getContextBitmapRenderer):

            Split creation out of the get functions so it can be called
            by getContext, where we know if the canvas is null or not.

        * html/HTMLCanvasElement.idl:
        
            Add ImageBitmapRenderingContext to RenderingContext variant so it wil be able to
            be used with HTMLCanvasElement.getContext.

        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isBitmapRenderer const):
        (WebCore::CanvasRenderingContext::isPlaceholder const):
        
            Add predicates for ImageBitmapRenderingContext and 
            PlaceholderRenderingContext.
        
        * html/canvas/ImageBitmapRenderingContext.cpp: Added.
        (WebCore::ImageBitmapRenderingContext::ImageBitmapRenderingContext):
        * html/canvas/ImageBitmapRenderingContext.h: Added.
        * html/canvas/ImageBitmapRenderingContext.idl: Added.
        * html/canvas/PlaceholderRenderingContext.cpp: Added.
        (WebCore::PlaceholderRenderingContext::PlaceholderRenderingContext):
        * html/canvas/PlaceholderRenderingContext.h: Added.
        
            Add stubbed out implementations for the new contexts.

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

        Netflix playback fails with S7353 error
        https://bugs.webkit.org/show_bug.cgi?id=178023

        Reviewed by Dean Jackson.

        On certain platforms, WebCoreDecompressionSession will fail to produce CVImageBuffers when presented with
        encrypted content. On those platforms, the seek() command will fail, because frames at the destination time
        cannot be decoded. This occurs for Netflix because the <video> element is not in the DOM at decode time.

        Only create a WebCoreDecompressionSession in MediaPlayerPrivateMediaSourceAVFObjC when we have explicitly
        been asked to paint into a WebGL canvas.

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

2017-10-06  Jiewen Tan  <jiewen_tan@apple.com>

        Replace some stack raw pointers with RefPtrs within WebCore/dom
        https://bugs.webkit.org/show_bug.cgi?id=177852
        <rdar://problem/34804487>

        Reviewed by Ryosuke Niwa.

        This is an effort to reduce raw pointer usage in DOM code. In this patch,
        stack raw pointers that could be freed during their lifetime because of
        event dispatching, layout updating and etc are selected. All selections are
        basing on code speculation.

        No changes in behaviours.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::addChildNodesToDeletionQueue):
        Escalate the RefPtr to where node is first defined.
        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::updateLayout):
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        Possible layout updates during their lifetime.
        (WebCore::Document::implicitClose):
        Possible event dispatching during its lifetime.
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        Possible node removal during their lifetime.
        (WebCore::command):
        Possible layout updates during its lifetime.
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        Possible layout updates during its lifetime.
        * dom/Element.cpp:
        (WebCore::Element::removedFrom):
         Possible event dispatching during its lifetime.
        (WebCore::checkForSiblingStyleChanges):
        Possible layout updates during their lifetime.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        Possible layout updates during its lifetime.
        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroup::setCheckedButton):
        Possible layout updates during its lifetime.
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::didChangeSlot):
        Possible layout updates during its lifetime.

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

        RootInlineBox should not hold a raw pointer to RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=178018
        <rdar://problem/34859256>

        Reviewed by Simon Fraser.

        Not resetting the line break object could lead to dereferencing a stale renderer.  

        Covered by existing tests.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::setLineBreakInfo):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::lineBreakObj const):

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

        Removing some dead code in RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=178011

        Reviewed by Alejandro G. Castro.

        No change of behavior.
        Removing code used by non-libwebrtc WebRTC backends.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::removeTrack):
        (WebCore::RTCPeerConnection::completeAddTransceiver):

2017-10-05  Dean Jackson  <dino@apple.com>

        ImageBitmap API stubs
        https://bugs.webkit.org/show_bug.cgi?id=177984
        <rdar://problem/34848023>

        Patch by Sam and Dean.
        Reviewed by Dean and Sam.

        Add the IDL for ImageBitmap and ImageBitmapOptions, plus some
        stub implementations (complete with all the algorithms from
        the HTML specification as comments).

        * CMakeLists.txt: Add the new files.
        * DerivedSources.make: Create the JS bindings for ImageBitmap and ImageBitmapOptions.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CallTracerTypes.h:
        * html/ImageBitmap.cpp: Added.
        (WebCore::ImageBitmap::create):
        (WebCore::ImageBitmap::createPromise):
        (WebCore::ImageBitmap::ImageBitmap):
        (WebCore::ImageBitmap::~ImageBitmap):
        (WebCore::ImageBitmap::width const):
        (WebCore::ImageBitmap::height const):
        (WebCore::ImageBitmap::close):
        * html/ImageBitmap.h: Added.
        (WebCore::ImageBitmap::isDetached const):
        * html/ImageBitmap.idl: Copied from Source/WebCore/html/canvas/CanvasDrawImage.idl.
        * html/ImageBitmapOptions.h: Copied from Source/WebCore/html/canvas/CanvasDrawImage.idl.
        * html/ImageBitmapOptions.idl: Copied from Source/WebCore/html/canvas/CanvasDrawImage.idl.
        * html/canvas/CanvasDrawImage.idl:
        * html/canvas/CanvasFillStrokeStyles.idl:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createPattern):
        * html/canvas/CanvasRenderingContext2D.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildAction):
        (WebCore::InspectorCanvas::buildArrayForImageBitmap):
        * inspector/InspectorCanvas.h:
        * inspector/RecordingSwizzleTypes.h:

2017-10-06  Ms2ger  <Ms2ger@igalia.com>

        Create bindings for WebGL2's versions of texImage2D.
        https://bugs.webkit.org/show_bug.cgi?id=178006

        Reviewed by Dean Jackson.

        No new tests: not much point in adding tests now; this method doesn't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texImage2D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLRenderingContextBase.idl:

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

        Add (entirely incorrect) fetching of ServiceWorker scripts.
        https://bugs.webkit.org/show_bug.cgi?id=176179

        Reviewed by Andy Estes.

        No new tests (Covered by changes to existing tests).

        When the Storage process is running the "Update" algorithm and a ServiceWorker script file needs to be fetched, this patch:
          - Messages back to the WebContent process that started the register/update job
          - Executes a FetchLoad in that script context for the script
          - Sends the results back to the Storage process

        We don't do anything with the results yet.

        Soon.

        * WebCore.xcodeproj/project.pbxproj:

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didFail):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::error const):

        * workers/WorkerScriptLoaderClient.h:
        (WebCore::WorkerScriptLoaderClient::~WorkerScriptLoaderClient):
        (WebCore::WorkerScriptLoaderClient::didReceiveResponse): Deleted.
        (WebCore::WorkerScriptLoaderClient::notifyFinished): Deleted.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:

        * workers/service/ServiceWorkerFetchResult.h: Copied from Source/WebCore/workers/service/server/SWClientConnection.h.
        (WebCore::ServiceWorkerFetchResult::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::startScriptFetch):
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        (WebCore::ServiceWorkerJob::notifyFinished):
        * workers/service/ServiceWorkerJob.h:
        * workers/service/ServiceWorkerJobClient.h:

        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::finishedFetchingScript):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        * workers/service/server/SWClientConnection.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::finishFetchingScriptInServer):
        (WebCore::SWServer::startScriptFetch):
        (WebCore::SWServer::scriptFetchFinished):
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptFetchFinished):
        (WebCore::SWServerRegistration::runUpdateJob):
        (WebCore::SWServerRegistration::startScriptFetchFromMainThread):
        (WebCore::SWServerRegistration::startScriptFetchForCurrentJob):
        * workers/service/server/SWServerRegistration.h:

2017-10-06  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Create Cairo patterns from Gradient objects on-the-fly
        https://bugs.webkit.org/show_bug.cgi?id=177947

        Reviewed by Carlos Garcia Campos.

        Stop caching cairo_pattern_t objects for a specific global alpha value
        in the Gradient class. Instead, create these as required, for whatever
        alpha value. This drops some efficiency benefits in exchange for better
        Cairo operation isolation, while also matching the same approach that
        is used in the Pattern implementation for Cairo.

        Introduce the createPlatformGradient() method for Cairo, resuing the
        implementation of platformGradient() that's now removed. The
        Cairo-specific setPlatformGradientSpaceTransform() method is also
        removed since there's no cached cairo_pattern_t object that we can
        update. The Cairo-specific m_platformGradientAlpha member float is also
        deleted.

        Gradient::fill() and prepareCairoContextSource() are the only two places
        that need to create a cairo_pattern_t object off of Gradient, so they
        are updated accordingly.

        No new tests -- no changes in behavior.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::setGradientSpaceTransform):
        (WebCore::Gradient::setPlatformGradientSpaceTransform): Deleted.
        * platform/graphics/Gradient.h:
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::createPlatformGradient):
        (WebCore::Gradient::fill):
        (WebCore::Gradient::platformGradient): Deleted.
        (WebCore::Gradient::setPlatformGradientSpaceTransform): Deleted.
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::prepareCairoContextSource):

2017-10-06  Ms2ger  <Ms2ger@igalia.com>

        Create bindings for WebGL2's versions of compressedTexImage2D.
        https://bugs.webkit.org/show_bug.cgi?id=177481

        Reviewed by Žan Doberšek.

        No new tests: not much point in adding tests now; this method doesn't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::compressedTexImage2D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLRenderingContextBase.idl:

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

        [GStreamer][MSE] Likely race condition causes WTF::Deque to crash on debug
        https://bugs.webkit.org/show_bug.cgi?id=177410

        Reviewed by Xabier Rodriguez-Calvar.

        Deque keeps a chain of iterators which is updated as iterators are
        created/destroyed. This can cause problems when iterators are created
        from multiple threads as they are now, sometimes without proper
        locking because it's not actually needed.

        For instance, the lock in PlaybackPipeline::enqueueSample() is not
        needed because none of the accesses are actually risky. Locking there
        just to make Deque happy would only cause a performance penalty on the
        readers working in other threads.

        No new tests.

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::addSourceBuffer): Use Vector instead of
        Deque.
        (WebCore::PlaybackPipeline::removeSourceBuffer): Ditto.
        (WebCore::PlaybackPipeline::enqueueSample): Remove lock and explain
        why it's not needed.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcFinalize): Use Vector.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h:
        Use Vector.

2017-10-06  Zan Dobersek  <zdobersek@igalia.com>

        Remove dead code from Pattern
        https://bugs.webkit.org/show_bug.cgi?id=177945

        Reviewed by Carlos Garcia Campos.

        Drop the platormDestroy() and setPlatformPatternSpaceTransform() methods
        from the Pattern class -- these were empty implementations, with no port
        providing their own. The destructor is defaulted in the implementation
        file. The m_pattern member variable is also dropped as it was unused.

        No new tests -- no change in behavior.

        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::setPatternSpaceTransform):
        (WebCore::Pattern::~Pattern): Deleted.
        (WebCore::Pattern::platformDestroy): Deleted.
        (WebCore::Pattern::setPlatformPatternSpaceTransform): Deleted.
        * platform/graphics/Pattern.h:

2017-10-06  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK][Clang] Build fix after r222926
        https://bugs.webkit.org/show_bug.cgi?id=175384

        Unreviewed build fix.

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

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

        [MSE][GStreamer] Seek on youtube.com/tv fails after r217185
        https://bugs.webkit.org/show_bug.cgi?id=177976

        Reviewed by Jer Noble.

        Covered by existing tests.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::seekToTime): Only call waitForSeekCompleted()
        when the time is not buffered when using GStreamer.

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

        [MSE] Dead code in SourceBuffer::appendBufferTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=177951

        Reviewed by Jer Noble.

        Covered by LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-append-buffer.html.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired): Remove redundant code.

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

        Split StaticPasteboard::writeString into writeString and writeStringInCustomData
        https://bugs.webkit.org/show_bug.cgi?id=177991

        Reviewed by Wenson Hsieh.

        Split writeString into the one that writes into the plaform pasteboard natively and the custom pasteboard data like we did
        in r222680 for readString and readStringInCustomData.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setData):
        (WebCore::DataTransfer::setDataFromItemList): Extracted out of setData.
        * dom/DataTransfer.h:
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::add):
        * platform/StaticPasteboard.cpp:
        (WebCore::updateTypes): Extacted out of writeString.
        (WebCore::StaticPasteboard::writeString):
        (WebCore::StaticPasteboard::writeStringInCustomData):
        * platform/StaticPasteboard.h:

2017-10-05  Dean Jackson  <dino@apple.com>

        [WebGL] Safari performance is slow due to high MSAA usage
        https://bugs.webkit.org/show_bug.cgi?id=177949
        <rdar://problem/34835619>

        Reviewed by Sam Weinig.

        On some hardware, typically integrated GPUs, using MSAA with a sample
        count above 4 produces bad performance. Limit the number of samples to
        4 universally.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):

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

        [GTK][WPE] All resource load statistics tests added in r212183 crash in GTK bots, timeout in GTK and WPE bots since r219049
        https://bugs.webkit.org/show_bug.cgi?id=168171

        Reviewed by Chris Dumez.

        Add an implementation of FileMonitor for GLib based ports.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * platform/FileMonitor.cpp:
        * platform/FileMonitor.h:
        * platform/glib/FileMonitorGLib.cpp: Added.
        (WebCore::FileMonitor::FileMonitor):
        (WebCore::FileMonitor::~FileMonitor):
        (WebCore::FileMonitor::fileChangedCallback):
        (WebCore::FileMonitor::didChange):

2017-10-05  Dean Jackson  <dino@apple.com>

        Lots of missing frames in YouTube360 when fullscreen on MacBook
        https://bugs.webkit.org/show_bug.cgi?id=177903
        <rdar://problem/33273300>

        Reviewed by Sam Weinig.

        Our compositing path for WebGL on macOS was too slow, requiring a copy
        of the framebuffer into another GL context. Replace this by having
        WebGL render into a texture that is backed by an IOSurface, and then
        set the WebGLLayer to use the IOSurface as contents.

        Covered by the existing WebGL tests.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformTexture const): We no longer use the
        framebuffer object outside the class, so change this to return the GL texture
        that the framebuffer is rendering in to. It was kind-of strange that it was
        named this way originally.
        Also make endPaint available on macOS, and add the definitions for
        createIOSurfaceBackingStore and updateFramebufferTextureBackingStoreFromLayer.

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): Now that we're using an IOSurface,
        we're binding to a new attachment point, GL_TEXTURE_RECTANGLE.
        (WebCore::GraphicsContext3D::endPaint): This is now being called on macOS and iOS,
        so add a comment that explains the extra work that iOS needs to do. At some future
        point it would be nice to make this slightly cleaner, so that iOS and macOS are
        more similar.
        (WebCore::GraphicsContext3D::allocateIOSurfaceBackingStore): New function that calls
        into the corresponding WebGLLayer function.
        (WebCore::GraphicsContext3D::updateFramebufferTextureBackingStoreFromLayer): Ditto.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::wipeAlphaChannelFromPixels): Both readPixels and drawing a WebGL context
        into another buffer need to fill out the alpha channel if this context was
        created without one, otherwise the IOSurface backing store will happily provide
        what might be non-zero values.
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary): Call the helper above.
        (WebCore::GraphicsContext3D::reshapeFBOs): Add more code to call into the macOS-specific
        function to use an IOSurface as the framebuffer texture.
        (WebCore::GraphicsContext3D::readPixels): Call the helper above.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::copyContentsFromLayer): Replace the use of the
        deprecated setContentsChanged with reloadValueForKeyPath.

        * platform/graphics/cocoa/WebGLLayer.h: The macOS implementation now
        inherits from CALayer directly rather than CAOpenGLLayer. It also adds
        a few member variables to handle the IOSurfaces used for triple buffering.

        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]): If we were created without an
        alpha channel, tell CA that we're an opaque layer. Also set the layer's transform
        to identity, so that it calls into the code below to flip the contents.
        (-[WebGLLayer setTransform:]): Because an IOSurface is used for the layer contents,
        we don't get a chance to flip the drawing the way we do via the drawInContext delegate.
        Instead we have to apply a scale(1, -1) transform on top of the layer transform to
        make sure the layer is rendered right-way up.
        (-[WebGLLayer setAnchorPoint:]): Ditto, except we have to assume the anchor point is
        at the bottom of the layer, so flip the Y value.
        (-[WebGLLayer display]): Swap between the drawing buffer and the contents buffer, and
        then get a new buffer ready for display.
        (createAppropriateIOSurface): Helper.
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]): Initializes the
        IOSurfaces used for drawing buffers.
        (-[WebGLLayer bindFramebufferToNextAvailableSurface]): Take the next available IOSurface and
        make it the drawing buffer (binding in to WebGL at the same time).
        (-[WebGLLayer copyCGLPixelFormatForDisplayMask:]): Deleted.
        (-[WebGLLayer copyCGLContextForPixelFormat:]): Deleted.
        (-[WebGLLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]): Deleted.

        * platform/graphics/mac/WebLayer.mm: Remove the definition of reloadValueForKeyPath.

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

        Update Source/ThirdParty/woff2 to 22c256bc457777744ba14b7325a6e8e0e7dec91c
        https://bugs.webkit.org/show_bug.cgi?id=177994

        Reviewed by Michael Catanzaro.

        No new tests, already covered by existing tests.

        * CMakeLists.txt: Include the directory for public headers instead.
        * platform/graphics/WOFFFileFormat.cpp: Use the public header
        woff2/decode.h and do not use the "wOF2" constant from private headers.
        (WebCore::isWOFF):
        (WebCore::convertWOFFToSfnt):

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

        Unreviewed, rolling out r222951 and r222952.
        https://bugs.webkit.org/show_bug.cgi?id=177992

        "Broke the iOS build and introduced a webgl LayoutTest
        failure." (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Lots of missing frames in YouTube360 when fullscreen on
        MacBook"
        https://bugs.webkit.org/show_bug.cgi?id=177903
        http://trac.webkit.org/changeset/222951

        "Lots of missing frames in YouTube360 when fullscreen on
        MacBook"
        https://bugs.webkit.org/show_bug.cgi?id=177903
        http://trac.webkit.org/changeset/222952

2017-10-05  Ryosuke Niwa  <rniwa@webkit.org>

        DataTransfer shouldn't contain text/html when performing Paste and Match Style
        https://bugs.webkit.org/show_bug.cgi?id=174165
        <rdar://problem/33138027>

        Reviewed by Wenson Hsieh.

        When performing Paste and Match Style, only expose the plain text by creating a StaticPasteboard with plain text content.

        This patch introduces ClipboardEventKind enum class to differentiate regular paste and paste and match style (internally
        called as pasteAsPlainText) since both operations use "paste" event.

        Tests: editing/pasteboard/data-transfer-get-data-on-paste-as-plain-text-when-custom-pasteboard-data-disabled.html
               editing/pasteboard/data-transfer-get-data-on-paste-as-plain-text.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createForCopyAndPaste): Made this function take Pasteboard as an argument.
        * dom/DataTransfer.h:
        * editing/Editor.cpp:
        (WebCore::ClipboardEventKind): Added.
        (WebCore::eventNameForClipboardEvent): Added.
        (WebCore::createDataTransferForClipboardEvent): Added.
        (WebCore::dispatchClipboardEvent):
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canDHTMLPaste):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::tryDHTMLPaste): Deleted.
        (WebCore::Editor::paste):
        (WebCore::Editor::pasteAsPlainText):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType): Add "text/html" when public.html UTI is in the pasteboard
        even when the custom pasteboard data is disabled. We continue to add public.html in the case some app dependent on
        seeing "public.html" in dataTransfer.types.

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

        RenderTable should not hold section raw pointers
        https://bugs.webkit.org/show_bug.cgi?id=177977
        <rdar://problem/34846034>

        Reviewed by Simon Fraser.

        This enables us to remove forced recalcSections calls.

        Covered by existing tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::resetSectionPointerIfNotBefore):
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::recalcSections const):
        (WebCore::RenderTable::sectionAbove const):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::header const):
        (WebCore::RenderTable::footer const):
        (WebCore::RenderTable::firstBody const):
        (WebCore::RenderTable::topSection const):

2017-10-05  Dean Jackson  <dino@apple.com>

        Lots of missing frames in YouTube360 when fullscreen on MacBook
        https://bugs.webkit.org/show_bug.cgi?id=177903
        <rdar://problem/33273300>

        iOS build fix.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:

2017-10-05  Dean Jackson  <dino@apple.com>

        Lots of missing frames in YouTube360 when fullscreen on MacBook
        https://bugs.webkit.org/show_bug.cgi?id=177903
        <rdar://problem/33273300>

        Reviewed by Sam Weinig.

        Our compositing path for WebGL on macOS was too slow, requiring a copy
        of the framebuffer into another GL context. Replace this by having
        WebGL render into a texture that is backed by an IOSurface, and then
        set the WebGLLayer to use the IOSurface as contents.

        Covered by the existing WebGL tests.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformTexture const): We no longer use the
        framebuffer object outside the class, so change this to return the GL texture
        that the framebuffer is rendering in to. It was kind-of strange that it was
        named this way originally.
        Also make endPaint available on macOS, and add the definitions for
        createIOSurfaceBackingStore and updateFramebufferTextureBackingStoreFromLayer.

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): Now that we're using an IOSurface,
        we're binding to a new attachment point, GL_TEXTURE_RECTANGLE.
        (WebCore::GraphicsContext3D::endPaint): This is now being called on macOS and iOS,
        so add a comment that explains the extra work that iOS needs to do. At some future
        point it would be nice to make this slightly cleaner, so that iOS and macOS are
        more similar.
        (WebCore::GraphicsContext3D::allocateIOSurfaceBackingStore): New function that calls
        into the corresponding WebGLLayer function.
        (WebCore::GraphicsContext3D::updateFramebufferTextureBackingStoreFromLayer): Ditto.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::wipeAlphaChannelFromPixels): Both readPixels and drawing a WebGL context
        into another buffer need to fill out the alpha channel if this context was
        created without one, otherwise the IOSurface backing store will happily provide
        what might be non-zero values.
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary): Call the helper above.
        (WebCore::GraphicsContext3D::reshapeFBOs): Add more code to call into the macOS-specific
        function to use an IOSurface as the framebuffer texture.
        (WebCore::GraphicsContext3D::readPixels): Call the helper above.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::copyContentsFromLayer): Replace the use of the
        deprecated setContentsChanged with reloadValueForKeyPath.

        * platform/graphics/cocoa/WebGLLayer.h: The macOS implementation now
        inherits from CALayer directly rather than CAOpenGLLayer. It also adds
        a few member variables to handle the IOSurfaces used for triple buffering.

        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]): If we were created without an
        alpha channel, tell CA that we're an opaque layer. Also set the layer's transform
        to identity, so that it calls into the code below to flip the contents.
        (-[WebGLLayer setTransform:]): Because an IOSurface is used for the layer contents,
        we don't get a chance to flip the drawing the way we do via the drawInContext delegate.
        Instead we have to apply a scale(1, -1) transform on top of the layer transform to
        make sure the layer is rendered right-way up.
        (-[WebGLLayer setAnchorPoint:]): Ditto, except we have to assume the anchor point is
        at the bottom of the layer, so flip the Y value.
        (-[WebGLLayer display]): Swap between the drawing buffer and the contents buffer, and
        then get a new buffer ready for display.
        (createAppropriateIOSurface): Helper.
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]): Initializes the
        IOSurfaces used for drawing buffers.
        (-[WebGLLayer bindFramebufferToNextAvailableSurface]): Take the next available IOSurface and
        make it the drawing buffer (binding in to WebGL at the same time).
        (-[WebGLLayer copyCGLPixelFormatForDisplayMask:]): Deleted.
        (-[WebGLLayer copyCGLContextForPixelFormat:]): Deleted.
        (-[WebGLLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]): Deleted.

        * platform/graphics/mac/WebLayer.mm: Remove the definition of reloadValueForKeyPath.

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

        Add "display" to FontFace Javascript object
        https://bugs.webkit.org/show_bug.cgi?id=175383
        <rdar://problem/33813239>

        Reviewed by Simon Fraser.

        We already have all the necessary infrastructure. Just hook it up to the .idl file!

        Test: fast/text/font-loading-font-display.html

        * css/CSSFontFace.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        (WebCore::FontFace::setDisplay):
        (WebCore::FontFace::display const):
        * css/FontFace.h:
        * css/FontFace.idl:

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

        [Cocoa] Enable ENABLE_ENCRYPTED_MEDIA build-time setting
        https://bugs.webkit.org/show_bug.cgi?id=177261

        Reviewed by Eric Carlson.

        Enable ENCRYPTED_MEDIA, and make the changes required for ENABLED_MEDIA and LEGACY_ENABLED_MEDIA
        to co-exist while both enabled simultaneously.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        (WebCore::LegacyCDM::registerCDMFactory):
        (WebCore::LegacyCDM::supportsKeySystem):
        (WebCore::LegacyCDM::keySystemSupportsMimeType):
        (WebCore::LegacyCDM::create):
        (WebCore::LegacyCDM::LegacyCDM):
        (WebCore::LegacyCDM::~LegacyCDM):
        (WebCore::LegacyCDM::supportsMIMEType const):
        (WebCore::LegacyCDM::createSession):
        (WebCore::LegacyCDM::mediaPlayer const):
        (WebCore::CDM::registerCDMFactory): Deleted.
        (WebCore::CDM::supportsKeySystem): Deleted.
        (WebCore::CDM::keySystemSupportsMimeType): Deleted.
        (WebCore::CDM::create): Deleted.
        (WebCore::CDM::CDM): Deleted.
        (WebCore::CDM::~CDM): Deleted.
        (WebCore::CDM::supportsMIMEType const): Deleted.
        (WebCore::CDM::createSession): Deleted.
        (WebCore::CDM::mediaPlayer const): Deleted.
        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        (WebCore::LegacyCDMClient::~LegacyCDMClient):
        (WebCore::LegacyCDM::client const):
        (WebCore::LegacyCDM::setClient):
        (WebCore::CDMClient::~CDMClient): Deleted.
        (WebCore::CDM::keySystem const): Deleted.
        (WebCore::CDM::client const): Deleted.
        (WebCore::CDM::setClient): Deleted.
        * Modules/encryptedmedia/legacy/LegacyCDMPrivate.h:
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.cpp:
        (WebCore::LegacyCDMPrivateClearKey::supportsKeySystem):
        (WebCore::LegacyCDMPrivateClearKey::supportsKeySystemAndMimeType):
        (WebCore::LegacyCDMPrivateClearKey::supportsMIMEType):
        (WebCore::LegacyCDMPrivateClearKey::createSession):
        (WebCore::CDMPrivateClearKey::supportsKeySystem): Deleted.
        (WebCore::CDMPrivateClearKey::supportsKeySystemAndMimeType): Deleted.
        (WebCore::CDMPrivateClearKey::supportsMIMEType): Deleted.
        (WebCore::CDMPrivateClearKey::createSession): Deleted.
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.h:
        (WebCore::LegacyCDMPrivateClearKey::LegacyCDMPrivateClearKey):
        (WebCore::LegacyCDMPrivateClearKey::~LegacyCDMPrivateClearKey):
        (WebCore::CDMPrivateClearKey::CDMPrivateClearKey): Deleted.
        (WebCore::CDMPrivateClearKey::~CDMPrivateClearKey): Deleted.
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.cpp:
        (WebCore::CDMPrivateMediaPlayer::createSession):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.h:
        (WebCore::CDMPrivateMediaPlayer::CDMPrivateMediaPlayer):
        (WebCore::CDMPrivateMediaPlayer::cdm const):
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::CDMSessionClearKey):
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
        (WebCore::WebKitMediaKeys::create):
        (WebCore::WebKitMediaKeys::WebKitMediaKeys):
        (WebCore::WebKitMediaKeys::isTypeSupported):
        (WebCore::WebKitMediaKeys::cdmMediaPlayer const):
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/encryptedmedia/CDMFactory.cpp:
        (WebCore::CDMFactory::platformRegisterFactories):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::ClearKeyState::singleton):
        (WebCore::parseJSONObject):
        (WebCore::parseLicenseFormat):
        (WebCore::parseLicenseReleaseAcknowledgementFormat):
        (WebCore::CDMFactoryClearKey::singleton):
        (WebCore::containsPersistentLicenseType):
        (WebCore::CDMInstanceClearKey::keySystem const):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/LegacyCDMSession.h:
        (WebCore::LegacyCDMSessionClient::~LegacyCDMSessionClient):
        (WebCore::CDMSession::type):
        (WebCore::CDMSessionClient::~CDMSessionClient): Deleted.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::createSession):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::createSession):
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h:
        (WebCore::CDMPrivateMediaSourceAVFObjC::CDMPrivateMediaSourceAVFObjC):
        (WebCore::CDMPrivateMediaSourceAVFObjC::cdm const):
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::createSession):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::createSession):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::CDMSessionAVContentKeySession):
        (WebCore::CDMSessionAVContentKeySession::update):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::CDMSessionAVFoundationObjC):
        (WebCore::CDMSessionAVFoundationObjC::generateKeyRequest):
        (WebCore::CDMSessionAVFoundationObjC::playerDidReceiveError):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::CDMSessionAVStreamSession):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::CDMSessionMediaSourceAVFObjC):
        (WebCore::CDMSessionMediaSourceAVFObjC::layerDidReceiveError):
        (WebCore::CDMSessionMediaSourceAVFObjC::rendererDidReceiveError):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createSession):
        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockCDM):
        * testing/LegacyMockCDM.cpp:
        (WebCore::LegacyMockCDM::supportsKeySystem):
        (WebCore::LegacyMockCDM::supportsKeySystemAndMimeType):
        (WebCore::LegacyMockCDM::supportsMIMEType):
        (WebCore::LegacyMockCDM::createSession):
        (WebCore::MockCDMSession::MockCDMSession):
        (WebCore::MockCDM::supportsKeySystem): Deleted.
        (WebCore::MockCDM::supportsKeySystemAndMimeType): Deleted.
        (WebCore::MockCDM::supportsMIMEType): Deleted.
        (WebCore::MockCDM::createSession): Deleted.
        * testing/LegacyMockCDM.h:
        (WebCore::LegacyMockCDM::LegacyMockCDM):
        (WebCore::LegacyMockCDM::~LegacyMockCDM):
        (WebCore::MockCDM::MockCDM): Deleted.
        (WebCore::MockCDM::~MockCDM): Deleted.
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::keySystem const):

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

        Storage Access API: Web process should ask UI process for grant/deny
        https://bugs.webkit.org/show_bug.cgi?id=176941
        <rdar://problem/34440036>

        Reviewed by Chris Dumez and Sam Weinig.

        Tests: http/tests/storageAccess/request-and-grant-storage-access-cross-origin-non-sandboxed-iframe.html
               http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-user-interaction.html
               http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-without-user-interaction.html

        This patch changes Document::requestStorageAccess() so that it
        calls the ChromeClient instead of the ResourceLoadObserver to
        request storage access on behalf of the iframe.
        The patch also changes how the promise is used, from returning
        a boolean to either resolving or rejecting to signal grant/deny
        access respectively.

        * dom/Document.cpp:
        (WebCore::Document::requestStorageAccess):
        * dom/Document.idl:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::registerStorageAccess): Deleted.
        * loader/ResourceLoadObserver.h:
        * page/ChromeClient.h:

2017-10-05  Brian Burg  <bburg@apple.com>

        Web Inspector: EventLoop::cycle() should not send nil NSEvents
        https://bugs.webkit.org/show_bug.cgi?id=177971
        <rdar://problem/20387399>

        Reviewed by Joseph Pecoraro.

        It is possible for the next matching event to be nil.
        WebKit clients don't expect to be sent a nil NSEvent, so add a null check here.

        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle):

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

        Drop unused parameters for CookiesStrategy::cookiesEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=177957

        Reviewed by Alex Christensen.

        * loader/CookieJar.cpp:
        (WebCore::cookiesEnabled):
        * platform/CookiesStrategy.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::cookiesEnabled):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::CookieJarCurlFileSystem::cookiesEnabled):
        (WebCore::cookiesEnabled):
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesEnabled):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookiesEnabled):

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

        RenderListItem should not hold raw pointers to RenderListMarker.
        https://bugs.webkit.org/show_bug.cgi?id=177968
        <rdar://problem/34842943>

        Reviewed by Antti Koivisto.

        Now we don't need to unregister the marker from the list item explicitly.

        Covered by existing tests.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem):
        (WebCore::RenderListItem::willBeDestroyed):
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::willBeDestroyed):
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):

2017-10-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        RenderSVGRoot should check the renderers inside its visualOverflowRect for hit testing if the overflow is visible
        https://bugs.webkit.org/show_bug.cgi?id=177953
        <rdar://problem/34788389>

        Reviewed by Simon Fraser.

        Test: svg/hittest/svg-visual-overflow-rect.html

        If an SVGElement is positioned outside the rectangle of the root element,
        it can still be drawn if the root element has "overflow: visible" applied.
        But since SVGElement can be drawn in this case, it should be accessible
        through nodeAtPoint() which is used for hit testing.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):

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

        RenderButton should not hold raw pointers to its direct children.
        https://bugs.webkit.org/show_bug.cgi?id=177960
        <rdar://problem/34840807>

        Reviewed by Antti Koivisto.

        The correct way of destroying a renderer is to call ::removeFromParentAndDestroy().

        Covered by existing tests.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton):
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::takeChild):
        (WebCore::RenderButton::updateAnonymousChildStyle const):
        (WebCore::RenderButton::setText):
        (WebCore::RenderButton::text const):
        * rendering/RenderButton.h:

2017-10-05  David Kilzer  <ddkilzer@apple.com>

        Bug 177893: Disable -Wcast-qual for new clang compiler in Apple ports
        <https://webkit.org/b/177893>
        <rdar://problem/33667497>

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        (WARNING_CFLAGS): Remvoe -Wcast-qual until we can provide a safe
        cast function that lets us re-enable the warning.

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

        Implement font-display loading behaviors
        https://bugs.webkit.org/show_bug.cgi?id=175384
        <rdar://problem/33813243>

        Reviewed by Darin Adler.

        The font-display descriptors works off of the following model of font loading:

        1. When a font loads, the @font-face enters the first phase, called the "block period." Here,
        text using this @font-face is rendered as invisible using a fallback font for metrics. If the
        file finishes loading during this period, it is swapped in (visibly).
        2. When the first phase is over, the @font-face enters the second phase, called the "swap
        period." Here, text using this @font-face is rendered visibly using a fallback font. If the
        file finishes loading during this period, it is swapped in.
        3. When the second phase is over, the @font-face enters the third phase, called the "failure
        period." Here, text using this @font-face is rendered visibly using a fallback font. If the
        file finishes loading during this period, it is not swapped in (but it does live in the
        network cache for subsequent page loads). This phase lasts forever.

        The font-display descriptor changes the duration of these phases. For example, our default
        font loading behavior can be achieved by making the first phase 3 seconds long and making the
        second phase infinitely long (so the third phase is never reached).

        Luckily, our CSSFontFace class already has states which correspond to each phase listed above:
        Loading, TimedOut, and Failure. This patch migrates our existing 3-second timer to have logic
        to correctly set the timeout duration based on the value of the font-display descriptor and
        the current status(). This occurs inside CSSFontFace::setStatus().

        This has implications for testing. Previously, our tests for the font loading behavior had a
        single boolean that describes whether or not font loads should immediately jump to the "swap
        period". Clearly, this is insufficient for testing all aspects of the font-display descriptor.
        Instead, this patch deletes this existing infrastructure and instead creates three more fake
        values of font-display (achieved in tests by using window.internals). These fake values make
        fonts immediately jump into a particular state and stay there forever (so the timeout values
        are, for example, [0, infinity, infinity] to test the swap period). This works because
        CSSFontFace is smart enough to synchronously move between states that have a 0 timeout, so
        there is no race between these timers and font loads.

        We also need to test the behavior when a file downloads and when a file hasn't been loaded
        yet (and the @font-face is in a particular state). Therefore, this patch adds another bool
        which indicates whether the font subsystem should totally ignore font load events. This means
        that a font will successfully download (and DOMContentLoaded will be fired, because that
        uses the loading subsystem), but the font subsystem will plug its ears and ignore the load.
        This means we can test the invisibility of text during the "block period" because DRT will
        see that the page load has completed, but the font subsystem will pretend like the font is
        still loading and draw invisibly.

        Therefore, there are 6 tests: a test to test each of the 3 states an @font-face block may be
        in, times 2 for whether or not we are ignoring font loads. These are more comprehensive than
        the existing font loading tests which used internals.settings.setWebFontsAlwaysFallBack(),
        so I deleted those tests in favor of these new ones.

        Tests: fast/text/loading-block-finish.html
               fast/text/loading-block-nofinish.html
               fast/text/loading-failure-finish.html
               fast/text/loading-failure-nofinish.html
               fast/text/loading-swap-finish.html
               fast/text/loading-swap-nofinish.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::setLoadingBehavior):
        (WebCore::CSSFontFace::fontLoadEventOccurred): Remove old testing infrastructure.
        (WebCore::CSSFontFace::timeoutFired): Previously, the timer was only used for going
        from Loading -> TimedOut. Now, we have to ask the status() to figure out which
        state transition we should be performing.
        (WebCore::CSSFontFace::allSourcesFailed const): A Failed state needs to return true
        here, even if some of the sources successfully downloaded.
        (WebCore::CSSFontFace::setStatus): The logic to figure out how long to set the timer
        for. Also, if the timer value is 0, synchronously recurse to change the status instead
        of setting a 0-delay timer.
        (WebCore::CSSFontFace::fontLoaded): Remove old testing infrastructure.
        (WebCore::CSSFontFace::fontTimeoutIndex const): Implement new testing infrastructure.
        (WebCore::CSSFontFace::shouldIgnoreFontLoadCompletions const): Ditto.
        (WebCore::CSSFontFace::pump): See comment. Also, we're allowed to be in the Failure
        state in more scenarios now, so relax some of our ASSERT()s.
        (WebCore::CSSFontFace::font): Ditto.
        (WebCore::CSSFontFace::webFontsShouldAlwaysFallBack const): Deleted.
        * css/CSSFontFace.h: Migrate to new testing infrastructure.
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource): Implement new testing infrastructure.
        (WebCore::CSSFontFaceSource::shouldIgnoreFontLoadCompletions const): Ditto.
        (WebCore::CSSFontFaceSource::fontLoaded): Ditto.
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadingFontSoon): Remove old testing infrastructure.
        * css/CSSSegmentedFontFace.cpp: It's possible to get different values out of
        CSSFontFace::font() in successive calls during the same runloop. FontRanges will 
        include a raw pointer to one of the values, so all the values need to be kept alive.
        * page/Settings.cpp: Migrate to new testing infrastructure.
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFontTimeoutIndex):
        (WebCore::Settings::setShouldIgnoreFontLoadCompletions):
        (WebCore::Settings::setWebFontsAlwaysFallBack): Deleted.
        * page/Settings.h: Ditto.
        (WebCore::Settings::fontTimeoutIndex const):
        (WebCore::Settings::shouldIgnoreFontLoadCompletions const):
        (WebCore::Settings::webFontsAlwaysFallBack const): Deleted.
        * testing/InternalSettings.cpp: Ditto.
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setFontTimeoutIndex):
        (WebCore::InternalSettings::setShouldIgnoreFontLoadCompletions):
        (WebCore::InternalSettings::setWebFontsAlwaysFallBack): Deleted.
        * testing/InternalSettings.h: Ditto.
        * testing/InternalSettings.idl: Ditto.

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

        RenderMathMLFenced should not hold a raw pointer to RenderMathMLFencedOperator
        https://bugs.webkit.org/show_bug.cgi?id=177950
        <rdar://problem/34837002>

        Reviewed by Antti Koivisto.

        Even though RenderMathMLFencedOperator is a child renderer, it's lifetime is not explicitly managed by
        RenderMathMLFenced.

        Covered by existing test cases.

        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::RenderMathMLFenced):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:

2017-10-05  Andy Estes  <aestes@apple.com>

        [Payment Request] Add a payment method that supports Apple Pay
        https://bugs.webkit.org/show_bug.cgi?id=177850

        Reviewed by Youenn Fablet.

        This patch implements a payment method dictionary and a payment handler for Apple Pay.

        It reuses existing Apple Pay code by:
        1. Moving shared properties from ApplePayPaymentRequest to ApplePayRequestBase and having
           ApplePayPaymentRequest inherit from ApplePayRequestBase.
        2. Creating an ApplePayRequest dictionary that inherits from ApplePayRequestBase and adds
           PaymentRequest-specific properties (right now that's just the version property).
        3. Moving validation logic from ApplePaySession into various places that can be reused by
           PaymentRequest and ApplePayPaymentHandler.
        4. Storing currency values for both ApplePaySession and PaymentRequest in Strings rather
           than integers representing whole cents, since PaymentRequest supports high-precision
           currency values.

        This patch does not implement any event handling for merchant validation, payment method
        changes, or shipping address/option changes. That will be handled in a follow-on.

        Test: http/tests/ssl/applepay/PaymentRequest.html

        * DerivedSources.make:
        * Modules/applepay/ApplePayContactField.cpp: Added.
        (WebCore::convertAndValidate): Moved from ApplePaySession.cpp.
        * Modules/applepay/ApplePayContactField.h: Added.
        * Modules/applepay/ApplePayContactField.idl: Added.
        * Modules/applepay/ApplePayMerchantCapability.cpp: Added.
        (WebCore::convertAndValidate): Moved from ApplePaySession.cpp.
        * Modules/applepay/ApplePayMerchantCapability.h: Added.
        * Modules/applepay/ApplePayMerchantCapability.idl: Added.
        * Modules/applepay/ApplePayPaymentRequest.h: Moved fields shared with ApplePayRequest into ApplePayRequestBase.
        * Modules/applepay/ApplePayPaymentRequest.idl: Ditto.
        * Modules/applepay/ApplePayRequestBase.cpp: Added.
        (WebCore::convertAndValidate): Moved from ApplePaySession.cpp.
        * Modules/applepay/ApplePayRequestBase.h: Added.
        * Modules/applepay/ApplePayRequestBase.idl: Added.
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::validateAmount): Renamed from parseAmount.
        (WebCore::convertAndValidateTotal):
        (WebCore::convertAndValidate):
        (WebCore::parseDigit): Deleted.
        (WebCore::parseAmount): Renamed to validateAmount.
        * Modules/applepay/ApplePaySessionPaymentRequest.h: Changed amount from an int64_t to a String.
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp:
        (WebCore::convert):
        * Modules/applepay/PaymentRequestValidator.mm: Renamed from Source/WebCore/Modules/applepay/PaymentRequestValidator.cpp.
        (WebCore::PaymentRequestValidator::validateTotal): Used NSDecimalNumber to validate amounts.
        (WebCore::validateShippingMethod): Ditto.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: Added.
        (WebCore::ApplePayPaymentHandler::handlesIdentifier): Added. Returns true if identifier is a URL with host "apple.com" and path "/apple-pay".
        (WebCore::ApplePayPaymentHandler::ApplePayPaymentHandler):
        (WebCore::convert): Added. Converts PaymentRequest types to ApplePaySessionPaymentRequest types.
        (WebCore::ApplePayPaymentHandler::convertData): Added. JSON-parses data into an ApplePayRequest,
        then uses that along with the PaymentRequest to construct and validate an ApplePaySessionPaymentRequest.
        (WebCore::ApplePayPaymentHandler::show): Added a FIXME.
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h: Added.
        * Modules/applepay/paymentrequest/ApplePayRequest.h: Added.
        * Modules/applepay/paymentrequest/ApplePayRequest.idl: Added. Inherits from ApplePayRequestBase and adds a required version property.
        * Modules/paymentrequest/PaymentHandler.cpp: Added.
        (WebCore::PaymentHandler::create): Returns a PaymentHandler subclass based on the payment method identifier.
        (WebCore::PaymentHandler::~PaymentHandler):
        * Modules/paymentrequest/PaymentHandler.h: Added.
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::convertAndValidatePaymentMethodIdentifier): Added.
        (WebCore::PaymentRequest::show): Removed an unnecessary call to RunLoop::dispatch().
        Created a PaymentHandler for each payment method and called show() on the first available PaymentHandler.
        (WebCore::PaymentRequest::abort): Removed an unnecessary call to RunLoop::dispatch().
        (WebCore::PaymentRequest::canMakePayment): Ditto.
        (WebCore::PaymentRequest::finishShowing): Deleted.
        * Modules/paymentrequest/PaymentRequest.h:
        * WebCore.xcodeproj/project.pbxproj:

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

        Move more multicolumn render tree mutation code to RenderTreeUpdater::MultiColumn
        https://bugs.webkit.org/show_bug.cgi?id=177942

        Reviewed by Zalan Bujtas.

        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::RenderMultiColumnFlow):

            Use std::unique_ptr for the spanner map for safe owenership transfer.

        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        (WebCore::RenderMultiColumnFlow::handleSpannerRemoval):
        (WebCore::RenderMultiColumnFlow::fragmentedFlowRelativeWillBeRemoved):
        (WebCore::RenderMultiColumnFlow::populate): Deleted.
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy): Deleted.

            This code moves to RenderTreeUpdater::MultiColumn.

        * rendering/RenderMultiColumnFlow.h:
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::update):
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeUpdater::MultiColumn::destroyFragmentedFlow):

            Use Hyatt's preferred 'fragmented flow' terminology.

        * style/RenderTreeUpdaterMultiColumn.h:

2017-10-05  Darin Adler  <darin@apple.com>

        Remove additional WebKitSystemInterface remnants
        https://bugs.webkit.org/show_bug.cgi?id=177948

        Reviewed by Andy Estes.

        * PlatformMac.cmake: Remove logic to select and link an appropriate
        WebKitSystemInterface library.

        * html/shadow/MediaControlElementTypes.h: Remove comment about matching
        WebKitSystemInterface.h, now obsolete.

        * rendering/RenderMediaControls.cpp: Wrap whole file in a single conditional
        to make it clear that it's only used at all in this one particular case.
        (wkHitTestMediaUIPart): Deleted.
        (wkMeasureMediaUIPart): Deleted.
        (wkDrawMediaUIPart): Deleted.
        (wkDrawMediaSliderTrack): Deleted.
        (WebCore::determineState): Deleted.
        (WebCore::getUnzoomedRectAndAdjustCurrentContext): Deleted.
        (WebCore::RenderMediaControls::adjustMediaSliderThumbSize): Call the
        WKMeasureMediaUIPart instead of through an inline function to rename it.
        (WebCore::RenderMediaControls::paintMediaControlsPart): Deleted.

        * rendering/RenderMediaControls.h: Wrap whole file in a single conditional
        to make it clear that it's only used at all in this one particular case.
        Removed unneeded includes, forward declarations, and function declaration.

        * rendering/RenderThemeMac.mm: Removed include of RenderMediaControls.h.

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

        Remove redundant LayoutStateDisabler from RenderTreeUpdaterFirstLetter
        https://bugs.webkit.org/show_bug.cgi?id=177946

        Reviewed by Simon Fraser.

        First letter is updated prior to layout.

        Covered by existing tests.

        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::updateFirstLetterStyle):

2017-10-05  Andy Estes  <aestes@apple.com>

        [Payment Request] Factor out ApplePaySession's interface to PaymentCoordinator into a base class
        https://bugs.webkit.org/show_bug.cgi?id=177904

        Reviewed by Daniel Bates.

        In a follow-on patch, something other than ApplePaySession will need to be the
        PaymentCoordinator's active session during PaymentRequest sessions.

        To support this, this patch factors out the ApplePaySession functions called by
        PaymentCoordinator into a new base class called PaymentSession.

        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::beginPaymentSession):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentSession.h: Added.
        (WebCore::PaymentSession::~PaymentSession):
        * WebCore.xcodeproj/project.pbxproj:

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

        Move multicolumn flow clear to RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=177898
        <rdar://problem/34820157>

        Reviewed by Antti Koivisto.

        There are 2 cases when we need to clear the the multicolumn flow from its container.

        1. When the column renderer is not need anymore due to style change (evacuateAndDestroy).
        During the subtree reparenting (moving back the descendants to the original position),
        if we still had the multicolumn set on the RenderBlockFlow, RenderBlockFlow::addChild() would
        put the children back under the column. -> Move the clear call to the RenderTreeUpdater.
         
        2. When the column is detached from the tree/destroyed (willBeRemoveFromTree).
        Since it does not trigger reparenting, we don't need to clear the column immediately. 
        We call clear to avoid accessing state column renderer. -> Use WeakPtr to
        manage lifetime instead.

        Covered by existing tests.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setMultiColumnFlow):
        (WebCore::RenderBlockFlow::clearMultiColumnFlow):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy):
        (WebCore::RenderMultiColumnFlow::willBeRemovedFromTree):
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::update):
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow):

2017-10-05  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] GIFImageDecoder never clears decoded frames even when told to do so
        https://bugs.webkit.org/show_bug.cgi?id=177864

        Reviewed by Carlos Garcia Campos.

        Fix GIFImageDecoder::clearFrameBufferCache() so it really deletes decoded buffers, and modify
        GIFImageDecoder to be able to decode frames that are not requested in the expected order.

        Covered by existent tests.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::findFirstRequiredFrameToDecode):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::decode):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFImageReader::frameContext const):

2017-10-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Fix build after Bug 167956
        https://bugs.webkit.org/show_bug.cgi?id=177921

        Reviewed by Carlos Garcia Campos.

        FontCascade::fontForCombiningCharacterSequence wasn't defined for
        WinCairo port. It should be defined if !USE(HARFBUZZ).

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.cpp: Use !USE(HARFBUZZ) instead of !USE(CAIRO).

2017-10-05  Zan Dobersek  <zdobersek@igalia.com>

        Align BitmapImage::LargeAnimationCutoff to a megabyte value
        https://bugs.webkit.org/show_bug.cgi?id=177924

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/BitmapImage.h: Fix the 1014 multiplier used to calculate
        the LargeAnimationCutoff value. It was most likely a typo.

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

        Address post-review feedback following r222885
        https://bugs.webkit.org/show_bug.cgi?id=177853
        <rdar://problem/34807346>

        Reviewed by Ryosuke Niwa and Dan Bates.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::updateFileList):
        (WebCore::DataTransfer::types const):
        (WebCore::DataTransfer::filesFromPasteboardAndItemList const):
        * dom/DataTransferItem.h:
        (WebCore::DataTransferItem::file):
        (WebCore::DataTransferItem::file const): Deleted.
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::add):
        (WebCore::DataTransferItemList::remove):

        When removing a data transfer item, capture it in a Ref for the scope of remove(), so that it won't be destroyed
        immediately after removing from the item list.

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

        Make LibWebRTCProvider port agnostic
        https://bugs.webkit.org/show_bug.cgi?id=177747

        Reviewed by Alex Christensen & Alex Garcia.

        No change of behavior.

        LibWebRTCProvider had some Mac/iOS specific members that are now
        moved to LibWebRTCProviderCocoa.
        This consists in the codec factories that are VideoToolBox specific.
        Introducing LibWebRTCProvider::create to allow different port implementations of LibWebRTCProvider.

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::overlayPage):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::create):
        (WebCore::LibWebRTCProvider::factory):
        (WebCore::LibWebRTCProvider::createPeerConnectionFactory):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        (WebCore::LibWebRTCProviderCocoa::setActive):
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2017-10-04  Alex Christensen  <achristensen@webkit.org>

        Remove WebCoreSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=177916

        Reviewed by Antti Koivisto.

        * Configurations/WebCore.xcconfig:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AXObjectCacheMac.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * dom/Document.cpp:
        * editing/mac/DictionaryLookup.mm:
        * page/ios/FrameIOS.mm:
        * page/ios/UserAgentIOS.mm:
        * page/mac/EventHandlerMac.mm:
        * platform/cocoa/LocalizedStringsCocoa.mm:
        * platform/cocoa/ScrollController.mm:
        * platform/graphics/Font.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/graphics/cocoa/FontCocoa.mm:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/GlyphPageMac.cpp:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/ios/LegacyTileCache.mm:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        * platform/ios/WebCoreSystemInterfaceIOS.mm: Removed.
        * platform/ios/wak/WAKWindow.mm:
        * platform/mac/CursorMac.mm:
        * platform/mac/FileSystemMac.mm:
        * platform/mac/PlatformEventFactoryMac.mm:
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/ThemeMac.mm:
        * platform/mac/WebCoreNSURLExtras.mm:
        * platform/mac/WebCoreSystemInterface.h: Removed.
        * platform/mac/WebCoreSystemInterface.mm: Removed.
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        * platform/mac/WebWindowAnimation.mm:
        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        * platform/network/ios/WebCoreURLResponseIOS.mm:
        * platform/network/mac/CookieJarMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/mac/WebCoreURLResponse.mm:
        * platform/text/TextEncodingRegistry.cpp:
        * rendering/RenderThemeMac.mm:

2017-10-04  Alex Christensen  <achristensen@webkit.org>

        Remove unnecessary includes of WebKitSystemInterface on Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=177912

        Reviewed by Saam Barati.

        * WebCore.xcodeproj/project.pbxproj:
        Also stop compiling RenderMediaControls.cpp on Cocoa platforms.  It's not used.

2017-09-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Introduce import.meta
        https://bugs.webkit.org/show_bug.cgi?id=177703

        Reviewed by Filip Pizlo.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:

2017-10-04  Tim Horton  <timothy_horton@apple.com>

        Link WebCore against CFNetwork in the CMake build
        https://bugs.webkit.org/show_bug.cgi?id=177910

        Reviewed by Ryosuke Niwa.

        * PlatformMac.cmake:
        This is enough to get WebKit1 MiniBrowser running; otherwise, we
        crash trying to access the public suffix list.

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

        Have TextDecorationPainter hold an OptionSet of decorations
        https://bugs.webkit.org/show_bug.cgi?id=177889

        Reviewed by Simon Fraser.

        Currently TextDecorationPainter implicitly maintains the set of one or more TextDecoration
        flags in a instance variable bitmask of type TextDecoration. Instead we should represent
        this set explicitly as an OptionSet to improve readability of the code.

        For now we have the TextDecorationPainter constructor and TextDecorationPainter::stylesForRenderer()
        to take the set of decorations as an unsigned value to avoid the need to update callers.
        We will look to apply a similar change throughout the code in <https://bugs.webkit.org/show_bug.cgi?id=176844>.

        No functionality changed. So, no new tests.

        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::TextDecorationPainter): For now, changed data type for passed
        decorations from TextDecoration to unsigned to convey that it is a bitmask.
        (WebCore::TextDecorationPainter::paintTextDecoration): Renamed linesAreOpaque to areLinesOpaque
        while I am here. Fixed some minor style issues.
        (WebCore::collectStylesForRenderer): Modified to take the remaining decorations as an OptionSet,
        and removed an unnecessary copy of these decorations by taking advantage of the fact that they
        are passed by value.
        (WebCore::TextDecorationPainter::stylesForRenderer): Convert the passed decorations to an OptionSet as needed to
        pass to collectStylesForRenderer().
        * rendering/TextDecorationPainter.h: Change m_decoration from TextDecoration to OptionSet<TextDecoration>
        and rename it to m_decorations to reflect that it is used as a set of one or more TextDecoration flags.
        Also remove unnecessary initializer for m_isPrinting while I am here and group it with the other boolean,
        m_isHorizontal. There is exactly one constructor for this class and it initializes m_isPrinting.

2017-10-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Improve CanvasManager recording events
        https://bugs.webkit.org/show_bug.cgi?id=177762

        Reviewed by Devin Rousso.

        Dispatch Canvas.recordingFinished regardless of whether any actions were
        recorded. Without this extra guarantee, the frontend has to keep track
        of additional state to determine whether a recording is in progress.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::requestRecording): Deleted.
        (WebCore::InspectorCanvasAgent::cancelRecording): Deleted.
        * inspector/InspectorCanvasAgent.h:

2017-10-04  Nan Wang  <n_wang@apple.com>

        AX: Make video objects accessible on iOS
        https://bugs.webkit.org/show_bug.cgi?id=177788
        <rdar://problem/34778028>

        Reviewed by Chris Fleizach.

        Exposed certain <video> elements on iOS:
        1. If they have no controls attribute set and have playsinline attribute set, that means
           normally there are custom controls provided. 
        2. Without autoplay attribute set. From iOS 10, with the motivation to improve performace by 
           replacing GIF with <video>, elements will now honor the autoplay attribute if they
           have no audio. So normally those <video> elements are not interactive.

        Also provided functions to let iOS users interact with the video elements:
        - Play/Pause: accessibilityActivate
        - Fast forward: accessibilityIncrement
        - Rewind: accessibilityDecrement

        Test: accessibility/ios-simulator/video-elements-ios.html

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityMediaObject.cpp: Added.
        (WebCore::AccessibilityMediaObject::AccessibilityMediaObject):
        (WebCore::AccessibilityMediaObject::~AccessibilityMediaObject):
        (WebCore::AccessibilityMediaObject::create):
        (WebCore::AccessibilityMediaObject::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityMediaObject::mediaElement const):
        (WebCore::AccessibilityMediaObject::stringValue const):
        (WebCore::AccessibilityMediaObject::interactiveVideoDuration const):
        (WebCore::AccessibilityMediaObject::mediaSeek):
        (WebCore::AccessibilityMediaObject::toggleMute):
        (WebCore::AccessibilityMediaObject::increment):
        (WebCore::AccessibilityMediaObject::decrement):
        (WebCore::AccessibilityMediaObject::press):
        (WebCore::AccessibilityMediaObject::hasControlsAttributeSet const):
        (WebCore::AccessibilityMediaObject::isPlaying const):
        (WebCore::AccessibilityMediaObject::isMuted const):
        (WebCore::AccessibilityMediaObject::isAutoplayEnabled const):
        (WebCore::AccessibilityMediaObject::isPlayingInline const):
        (WebCore::AccessibilityMediaObject::enterFullscreen const):
        * accessibility/AccessibilityMediaObject.h: Added.
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isMediaObject const):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityIsWebInteractiveVideo]):
        (-[WebAccessibilityObjectWrapper interactiveVideoDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityIsMediaPlaying]):
        (-[WebAccessibilityObjectWrapper accessibilityIsMediaMuted]):
        (-[WebAccessibilityObjectWrapper accessibilityToggleMuteForMedia]):
        (-[WebAccessibilityObjectWrapper accessibilityVideoEnterFullscreen]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper stringValueShouldBeUsedInLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):

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

        Add basic support for the version of DataTransferItemList.add that takes a File
        https://bugs.webkit.org/show_bug.cgi?id=177853
        <rdar://problem/34807346>

        Reviewed by Ryosuke Niwa.

        Adds very basic support for DataTransferItemList.add(File). So far, a File added in this way can only be read
        back from the same DataTransfer, during dragstart or copy. This File isn't written to the platform pasteboard
        yet, so even dropping or pasting in the same page will not transfer the File, but this brings us closer to
        parity with other browsers. See per-method comments for details.

        Tests: editing/pasteboard/data-transfer-item-list-add-file-multiple-times.html
               editing/pasteboard/data-transfer-item-list-add-file-on-copy.html
               editing/pasteboard/data-transfer-item-list-add-file-on-drag.html

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

        Recompute the DataTransfer's FileList. This behaves the same way as destroying the FileList altogether and
        building it from scratch, but we avoid that approach because the FileList object needs to maintain the same DOM
        wrapper after a File-backed item is removed.

        (WebCore::DataTransfer::itemListDidAddFile):

        Add the newly appended DataTransferItem's File to the DataTransfer's FileList.

        (WebCore::DataTransfer::types const):

        Return only the "Files" type if there are file-backed items in the DataTransfer's item list.

        (WebCore::DataTransfer::updatedFilesForFileList const):
        (WebCore::DataTransfer::files const):
        * dom/DataTransfer.h:
        * dom/DataTransferItem.h:
        (WebCore::DataTransferItem::file const):
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::add):
        (WebCore::DataTransferItemList::remove):
        (WebCore::DataTransferItemList::clear):

        When removing a File, only clear from the DataTransfer's pasteboard if the removed item is not a File (otherwise,
        clearing a File that shares the same type as some other item in the pasteboard will erroneously clear that other
        item as well). Additionally, call out to the DataTransfer to update the FileList.

        * dom/DataTransferItemList.h:
        (WebCore::DataTransferItemList::hasItems const):
        (WebCore::DataTransferItemList::items const):

        Add helpers for directly accessing an item list's items. items() should be used in conjunction with hasItems().
        This route is taken to (1) avoid having to copy the vector of Files, and (2) to avoid generating m_items if it
        doesn't already exist.

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

        RenderMultiColumnFlow populate/evacuate should not disable layout state.
        https://bugs.webkit.org/show_bug.cgi?id=177894
        <rdar://problem/34818696>

        Reviewed by Antti Koivisto.

        Populate/evacuate methods are not called at layout time.

        Covered by existing tests.

        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::populate):
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy):

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

        RenderMultiColumnFlow::m_beingEvacuated is redundant.
        https://bugs.webkit.org/show_bug.cgi?id=177886
        <rdar://problem/34815997>

        Reviewed by Simon Fraser.

        m_beingEvacuated was introduced to protect RenderMultiColumnFlow from triggering
        remove/insert code while the column is being destroyed and the descendants are getting reparented.
        However, 
        1. the setMultiColumnFlow(nullptr) call already protects from triggering the remove callback
        2. When adding the children back to their original position, we should not be able to find
        this column as the enclosing block anymore (simply because we are moving the children as siblings
        to the multicol renderer) 

        Covered by existing tests.

        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::RenderMultiColumnFlow):
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy):
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        (WebCore::RenderMultiColumnFlow::fragmentedFlowRelativeWillBeRemoved):
        * rendering/RenderMultiColumnFlow.h:

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

        Fix typo.

        Unreviewed.

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

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

        Teach TextDecorationPainter about pseudo styles
        https://bugs.webkit.org/show_bug.cgi?id=177882

        Reviewed by Simon Fraser.

        As a step towards implementing support for CSS pseudo elements ::spelling-error and ::grammar-error
        (https://bugs.webkit.org/show_bug.cgi?id=175784) teach TextDecorationPainter about pseudo styles.

        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::TextDecorationPainter): Modified to take an optional
        pseudo style (defaults to NOPSEUDO - no pseudo style).
        (WebCore::collectStylesForRenderer): Modified to take a pseudo style. Note that getCachedPseudoStyle()
        is only defined on RenderText and RenderElement objects (i.e. it is not a virtual function on RenderObject).
        So, we must explicitly type check the renderer and cast appropriately before calling it. We may want
        to consider making it virtual in the future if we find there are more call sites that would benefit
        from polymorphism.
        (WebCore::TextDecorationPainter::stylesForRenderer): Modified to take an optional
        pseudo style (defaults to NOPSEUDO - no pseudo style).
        * rendering/TextDecorationPainter.h:

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

        Add assert verifying all renderers get destroyed
        https://bugs.webkit.org/show_bug.cgi?id=177870

        Reviewed by Zalan Bujtas.

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

            Add assert to verify all renderers for this tree have been destroyed before the RenderView is.

        * rendering/RenderView.h:

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

        TextDecorationPainter::m_wavyOffset should be a float
        https://bugs.webkit.org/show_bug.cgi?id=177883

        Reviewed by Simon Fraser.

        In r194447 we extracted the text decoration painting code from InlineTextBox into
        TextDecorationPainter and changed the data type of the wavy offset from float to int.
        We use floating point numbers throughout the painting code and should store the wavy
        offset as a float.

        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::TextDecorationPainter): Use C++ uniform initializer
        syntax to initialize member fields.
        (WebCore::TextDecorationPainter::paintTextDecoration): Change int to float.
        * rendering/TextDecorationPainter.h: Remove unnecessary equal initializer for m_wavyOffset
        as this class has exactly one constructor and it always initializes it.

2017-10-04  Youenn Fablet  <youenn@apple.com>

        Remove OpenWebRTC backend
        https://bugs.webkit.org/show_bug.cgi?id=177868

        Reviewed by Alejandro G. Castro.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp: Removed.
        * Modules/mediastream/MediaEndpointPeerConnection.h: Removed.
        * Modules/mediastream/MediaEndpointSessionDescription.cpp: Removed.
        * Modules/mediastream/MediaEndpointSessionDescription.h: Removed.
        * Modules/mediastream/SDPProcessor.cpp: Removed.
        * Modules/mediastream/SDPProcessor.h: Removed.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/GStreamer.cmake:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::supportsType):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.cpp: Removed.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerOwr.h: Removed.
        * platform/mediastream/MediaEndpoint.cpp: Removed.
        * platform/mediastream/MediaEndpoint.h: Removed.
        * platform/mediastream/MediaEndpointSessionConfiguration.h: Removed.
        * platform/mediastream/SDPProcessorScriptResource.cpp: Removed.
        * platform/mediastream/SDPProcessorScriptResource.h: Removed.
        * platform/mediastream/openwebrtc/MediaEndpointOwr.cpp: Removed.
        * platform/mediastream/openwebrtc/MediaEndpointOwr.h: Removed.
        * platform/mediastream/openwebrtc/OpenWebRTCUtilities.cpp: Removed.
        * platform/mediastream/openwebrtc/OpenWebRTCUtilities.h: Removed.
        * platform/mediastream/openwebrtc/RealtimeAudioSourceOwr.h: Removed.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: Removed.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: Removed.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.cpp: Removed.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: Removed.
        * platform/mediastream/openwebrtc/RealtimeVideoSourceOwr.h: Removed.
        * platform/mock/MockMediaEndpoint.cpp: Removed.
        * platform/mock/MockMediaEndpoint.h: Removed.
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::MockRealtimeMediaSource):
        * platform/mock/MockRealtimeMediaSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::enableMockMediaEndpoint): Deleted.
        * testing/Internals.h:

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

        Remove RenderTreeInternalMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=177875
        <rdar://problem/34813088>

        Reviewed by Antti Koivisto.

        RenderTree mutation is in the past now. -and we've got assertions in place.

        Not testable.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::populate):
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::updateTextRenderer):
        (WebCore::RenderQuote::updateRenderer):
        * rendering/RenderView.h:
        (WebCore::RenderTreeInternalMutationScope::RenderTreeInternalMutationScope): Deleted.
        (WebCore::RenderTreeInternalMutationScope::~RenderTreeInternalMutationScope): Deleted.

2017-10-04  Miguel Gomez  <magomez@igalia.com>

        Unreviewed: fix GTK debug build after r222841.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::initFrameBuffer):

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

        RenderFragmentContainerRange should not hold raw pointers.
        https://bugs.webkit.org/show_bug.cgi?id=177854
        <rdar://problem/34805954>

        Reviewed by Antti Koivisto.

        m_startFragment and m_endFragment object's lifetimes are not tied to the lifetime of
        RenderFragmentContainerRange.

        Covered by existing tests.

        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::setFragmentRangeForBox):
        * rendering/RenderFragmentedFlow.h:

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

        RenderMultiColumnSpannerPlaceholder should not hold raw pointers.
        https://bugs.webkit.org/show_bug.cgi?id=177840
        <rdar://problem/34800109>

        Reviewed by Sam Weinig.

        Though we should always have a spanner as long as there's a RenderMultiColumnSpannerPlaceholder,
        the spanner inject/removal logic is complicated enough to protect them with WeakPtr.  

        Covered by existing tests.

        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:

2017-10-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] GtkUtilities.h should not be included in libs not linked to GTK
        https://bugs.webkit.org/show_bug.cgi?id=177860

        Reviewed by Carlos Garcia Campos.

        * platform/FreeType.cmake:
        * platform/gtk/GtkUtilities.cpp:
        (WebCore::topLevelPath): Deleted.
        (WebCore::webkitBuildDirectory): Deleted.
        * platform/gtk/GtkUtilities.h:
        (WebCore::wallTimeForEvent):
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::topLevelPath):
        (WebCore::webkitBuildDirectory):

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

        [Harfbuzz] Implement ComplexTextController on top of HarfBuzz
        https://bugs.webkit.org/show_bug.cgi?id=167956

        Reviewed by Myles C. Maxfield.

        Implement ComplexTextController using HarfBuzz and remove HarfBuzzShaper.

        Covered by existing tests, a rebaseline will be neeed.

        * platform/FreeType.cmake:
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::TextLayoutDeleter::operator() const): Enable TextLayout when using HarfBuzz.
        (WebCore::FontCascade::createLayout const): Ditto.
        (WebCore::FontCascade::width): Ditto.
        * platform/graphics/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create): Add constructor that receives an hb_buffer_t.
        * platform/graphics/Font.cpp:
        (WebCore::Font::variantCapsSupportsCharacterForSynthesis const): Simple implementation for non-cocoa ports.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText const): Moved from FontCascadeCocoa.mm.
        (WebCore::FontCascade::floatWidthForComplexText const): Ditto.
        (WebCore::FontCascade::adjustSelectionRectForComplexText const): Ditto.
        (WebCore::FontCascade::offsetForPositionForComplexText const): Ditto.
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const): Normalize the sequence and get the font of the
        base character.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::harfBuzzPositionToFloat):
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::fontFeatures):
        (WebCore::characterScript):
        (WebCore::scriptsAreCompatibleForCharacters):
        (WebCore::findNextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::harfBuzzGetGlyph): Check here if the character is a white space and use the space or zeroWidthSpace
        to ensure we get a glyph.
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp: Removed.
        * platform/graphics/harfbuzz/HarfBuzzShaper.h: Removed.
        * platform/graphics/harfbuzz/HbUniquePtr.h: Added.
        (WebCore::HbPtrDeleter::operator() const):
        (WebCore::HbPtrDeleter<hb_font_t>::operator() const):
        (WebCore::HbPtrDeleter<hb_buffer_t>::operator() const):
        * platform/graphics/opentype/OpenTypeMathData.h: Use HbUniquePtr.

2017-10-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix typo in function name scanDirectoryForDicionaries
        https://bugs.webkit.org/show_bug.cgi?id=177866

        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        (WebCore::scanDirectoryForDictionaries):
        (WebCore::scanTestDictionariesDirectoryIfNecessary):
        (WebCore::availableLocales):
        (WebCore::scanDirectoryForDicionaries): Deleted.

2017-10-04  Miguel Gomez  <magomez@igalia.com>

        Add animation support for WebP images
        https://bugs.webkit.org/show_bug.cgi?id=113124

        Reviewed by Žan Doberšek.

        Implement decoding of WebP animations.

        Test: fast/images/animated-webp.html

        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::blendPixel):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::~WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::setData):
        (WebCore::WEBPImageDecoder::repetitionCount const):
        (WebCore::WEBPImageDecoder::frameBufferAtIndex):
        (WebCore::WEBPImageDecoder::findFirstRequiredFrameToDecode):
        (WebCore::WEBPImageDecoder::decode):
        (WebCore::WEBPImageDecoder::decodeFrame):
        (WebCore::WEBPImageDecoder::initFrameBuffer):
        (WebCore::WEBPImageDecoder::applyPostProcessing):
        (WebCore::WEBPImageDecoder::parseHeader):
        (WebCore::WEBPImageDecoder::clearFrameBufferCache):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2017-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Use blob URL when pasting RTFD instead of overriding DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=177801
        <rdar://problem/34542270>

        Reviewed by Wenson Hsieh.

        Before this patch, pasting RTFD resulted in images and other subresources in RTFD are being placed
        into the document using WebKit fake URL, and DocumentLoader was overridden to return the appropriate
        data upon resource requests. This is bad because there is no mechanism for websites to access its content.

        Like r222119 and r208451, this patch fixes thie problem by using a blob URL instead of a WebKit fake URL.
        This patch also adds a Blob::create variant which takes a SharedBuffer.

        API Tests: PasteRTFD

        * editing/WebCorePasteboardFileReader.cpp:
        (WebCore::WebCorePasteboardFileReader::readBuffer):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::DeferredLoadingScope): Extracted out of createFragmentAndAddResources for clarity.
        (WebCore::DeferredLoadingScope::DeferredLoadingScope):
        (WebCore::DeferredLoadingScope::~DeferredLoadingScope):
        (WebCore::createFragmentAndAddResources): Instead of adding resources to document loader, replace each
        URL in the document by a blob URL.
        (WebCore::WebContentReader::readImage):
        * editing/markup.cpp:
        (WebCore::replaceSubresourceURLs): Added. A helper to replace each URL in the document fragment by a blob
        URL created for each subresource. This won't work for iframes or srcset but that's okay for now since DOM
        constructed from RTFD doesn't use either.
        * editing/markup.h:
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob): Added a variant which takes a SharedBuffer.
        * fileapi/Blob.h:
        (WebCore::Blob::create): Ditto.

2017-10-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r222392): [WPE][GTK] Many forms tests are failing due to broken event timestamps
        https://bugs.webkit.org/show_bug.cgi?id=177449

        Reviewed by Chris Dumez.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::wallTimeForEvent):
        * platform/gtk/GtkUtilities.h:
        (WebCore::wallTimeForEvent):

2017-10-04  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Fix playback of GIFs
        https://bugs.webkit.org/show_bug.cgi?id=176089

        Reviewed by Carlos Garcia Campos.

        Allow GIFImageReader to decode again already decoded frames. Thanks to this, we don't
        need to delete the GIFImageReader when GIFImageDecoder::clearFrameBufferCache() is
        called, and the we don't need the lock to avoid crashes in that situation.

        Covered by existent tests.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::decode):

2017-10-04  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix.

        Use different enum value for the check. UP_DEVICE_LEVEL_NORMAL is only available on newer
        upower.

        * platform/glib/LowPowerModeNotifierGLib.cpp:
        (WebCore::LowPowerModeNotifier::updateState):

2017-10-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GLib] Let WebCore know of low power situations
        https://bugs.webkit.org/show_bug.cgi?id=177810

        Reviewed by Carlos Garcia Campos.

        WebCore can use knowledge of low power situations to throttle timers and avoid expensive
        checks, lowering power usage. We can use upower's warning level to let WebCore know we are
        in such a situation.

        No tests as there is no way to mock upower.

        * PlatformGTK.cmake: add new file.
        * PlatformWPE.cmake: add new file.
        * platform/LowPowerModeNotifier.cpp: use upower-glib to know about low power situations.
        * platform/LowPowerModeNotifier.h: includes upower header as UpClient and UpDevice are not forward
        declaration-friendly.
        * platform/glib/LowPowerModeNotifierGLib.cpp: Added.
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::updateState): update low power mode from warning-level.
        (WebCore::LowPowerModeNotifier::warningLevelCallback): track upower's warning-level to know when
        a low power situation occurs.
        (WebCore::LowPowerModeNotifier::~LowPowerModeNotifier): stop tracking the warning-level signal.
        (WebCore::LowPowerModeNotifier::isLowPowerModeEnabled const):

2017-10-04  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] aria-pressed="mixed" should be exposed via ATK_STATE_INDETERMINATE
        https://bugs.webkit.org/show_bug.cgi?id=177807

        Reviewed by Chris Fleizach.

        Include toggle buttons in the element types for which the mixed state is checked
        and exposed via ATK_STATE_INDETERMINATE if found. Also only do the role checks when
        AccessibilityObject::isIndeterminate() has returned false.

        Test: accessibility/gtk/aria-pressed-mixed-value.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2017-10-04  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] ARIA tabpanel role should be exposed as ATK_ROLE_SCROLL_PANE
        https://bugs.webkit.org/show_bug.cgi?id=177815

        Reviewed by Chris Fleizach.

        Change the mapping of TabPanelRole from ATK_ROLE_PANEL to ATK_ROLE_SCROLL_PANE.

        No new tests because this mapping is already covered by aria-tab-roles.html and
        roles-exposed.html. The platform expectations for each test have been updated.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2017-10-03  Antti Koivisto  <antti@apple.com>

        Use WeakPtr in RenderFullScreen
        https://bugs.webkit.org/show_bug.cgi?id=177827

        Reviewed by Zalan Bujtas.

        Make Document::m_fullScreenRenderer RenderFullScreen::m_placeholder WeakPtrs
        and get rid of the custom nulling code.

        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree):
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        (WebCore::Document::setFullScreenRenderer):
        (WebCore::Document::fullScreenRendererDestroyed): Deleted.
        * dom/Document.h:
        (WebCore::Document::fullScreenRenderer const):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::RenderFullScreen):
        (WebCore::RenderFullScreen::willBeDestroyed):
        (WebCore::RenderFullScreen::createPlaceholder):
        (WebCore::RenderFullScreenPlaceholder::willBeDestroyed): Deleted.
        (WebCore::RenderFullScreen::setPlaceholder): Deleted.
        * rendering/RenderFullScreen.h:

2017-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        Enable pasteboard custom data in macOS 10.12 and earlier
        https://bugs.webkit.org/show_bug.cgi?id=177855

        Reviewed by Wenson Hsieh.

        Make customPasteboardDataEnabled return true on macOS 10.12 and earlier as long as the app is Safari.

        * page/Settings.cpp:
        (WebCore::Settings::customPasteboardDataEnabled):

2017-10-03  Jon Davis  <jond@apple.com>

        Update several features to "Supported"
        https://bugs.webkit.org/show_bug.cgi?id=177831

        Reviewed by Alexey Proskuryakov.

        Update Media Capture and Streams, Performance Observer, Resource Timing, User Timing, 
        Web Cryptography, and WebRTC.

        * features.json:

2017-10-03  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Reimplement CurlDownload with CurlRequest
        https://bugs.webkit.org/show_bug.cgi?id=177779

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableAllowedProtocols):
        (WebCore::CurlHandle::enableFollowLocation): Deleted.
        (WebCore::CurlHandle::getEffectiveURL): Deleted.
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::cancel):
        (WebCore::CurlDownload::createCurlRequest):
        (WebCore::CurlDownload::curlDidReceiveResponse):
        (WebCore::CurlDownload::curlDidReceiveBuffer):
        (WebCore::CurlDownload::curlDidComplete):
        (WebCore::CurlDownload::curlDidFailWithError):
        (WebCore::CurlDownload::shouldRedirectAsGET):
        (WebCore::CurlDownload::willSendRequest):
        (WebCore::CurlDownload::getResponse const): Deleted.
        (WebCore::CurlDownload::retain): Deleted.
        (WebCore::CurlDownload::release): Deleted.
        (WebCore::CurlDownload::setupTransfer): Deleted.
        (WebCore::CurlDownload::didCompleteTransfer): Deleted.
        (WebCore::CurlDownload::didCancelTransfer): Deleted.
        (WebCore::CurlDownload::closeFile): Deleted.
        (WebCore::CurlDownload::moveFileToDestination): Deleted.
        (WebCore::CurlDownload::writeDataToFile): Deleted.
        (WebCore::CurlDownload::didReceiveHeader): Deleted.
        (WebCore::CurlDownload::didReceiveData): Deleted.
        (WebCore::CurlDownload::didReceiveResponse): Deleted.
        (WebCore::CurlDownload::didReceiveDataOfLength): Deleted.
        (WebCore::CurlDownload::didFinish): Deleted.
        (WebCore::CurlDownload::didFail): Deleted.
        (WebCore::CurlDownload::writeCallback): Deleted.
        (WebCore::CurlDownload::headerCallback): Deleted.
        * platform/network/curl/CurlDownload.h:
        (WebCore::CurlDownloadListener::didReceiveResponse):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::finalizeTransfer):
        (WebCore::CurlRequest::enableDownloadToFile):
        (WebCore::CurlRequest::getDownloadedFilePath):
        (WebCore::CurlRequest::writeDataToDownloadFileIfEnabled):
        (WebCore::CurlRequest::closeDownloadFile):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::createCurlRequest):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

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

        Move scroll snap point unregistration from willBeRemovedFromTree to willBeDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=177830
        <rdar://problem/34796065>

        Reviewed by Antti Koivisto.

        willBeRemovedFromTree is called conditionally, relying on unregistering objects in there is highly error prone.

        Covered by existing tests.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::willBeRemovedFromTree): Deleted.
        * rendering/RenderBox.h:

2017-10-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] ARIA menuitems should be exposed with ATK_ROLE_MENU_ITEM even when it's the child of group role
        https://bugs.webkit.org/show_bug.cgi?id=177811

        Reviewed by Chris Fleizach.

        AccessibilityNodeObject::remapAriaRoleDueToParent() remaps ARIA menuitems to the
        MenuButtonRole AccessibilityRole when the menuitem's parent is an ARIA group, but
        the ATK code was not handling that remapped role value. As a result, the element
        was being exposed as ATK_ROLE_UNKNOWN. Add MenuButtonRole to the AccessibilityRole
        types exposed as ATK_ROLE_MENU_ITEM.

        Test: accessibility/gtk/menu-with-group-child-tree.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2017-10-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] aria-rowindex set on row element is not being exposed
        https://bugs.webkit.org/show_bug.cgi?id=177821

        Reviewed by Chris Fleizach.

        Expose the value of aria-rowindex when set on a row as an object
        attribute, as we already do when it's set on a cell.

        Test: accessibility/gtk/aria-rowindex-on-row.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

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

        Share code to normalize an HTTP method
        https://bugs.webkit.org/show_bug.cgi?id=177837

        Reviewed by Andy Estes.

        Currently we duplicate code in XMLHttpRequest and FetchRequest to normalize an HTTP method.
        We should add a common helper function and update both classes to make use of it.

        No functionality changed. So, no new tests.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::setMethod): Modified to use WebCore::normalizeHTTPMethod().
        * platform/network/HTTPParsers.cpp:
        (WebCore::normalizeHTTPMethod): Moved from XMLHttpRequest.cpp.
        * platform/network/HTTPParsers.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open): Modified to use WebCore::normalizeHTTPMethod().
        (WebCore::XMLHttpRequest::uppercaseKnownHTTPMethod): Deleted; moved to HTTPParsers.cpp.
        * xml/XMLHttpRequest.h:

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

        Share code to determine a forbidden method
        https://bugs.webkit.org/show_bug.cgi?id=177833

        Reviewed by Andy Estes.

        Currently we duplicate code in XMLHttpRequest and FetchRequest to determine if a method is
        forbidden. We should add a common helper function and update both classes to make use of it.

        No functionality changed. So, no new tests.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::setMethod): Modified to use WebCore::isForbiddenMethod().
        * platform/network/HTTPParsers.cpp:
        (WebCore::isForbiddenMethod): Added.
        * platform/network/HTTPParsers.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open): Modified to use WebCore::isForbiddenMethod().
        (WebCore::XMLHttpRequest::isAllowedHTTPMethod): Deleted.
        * xml/XMLHttpRequest.h:

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

        RenderMenuList should not hold raw pointers
        https://bugs.webkit.org/show_bug.cgi?id=177836

        Reviewed by Antti Koivisto.

        While both m_buttonText and m_innerBlock are child renderers of
        the RenderMenuList, so the their lifecycles are supposed to tied
        to the parent object, this patch removes some manual raw pointer managing.

        Covered by existing tests.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        (WebCore::RenderMenuList::createInnerBlock):
        (RenderMenuList::takeChild):
        (RenderMenuList::setText):
        * rendering/RenderMenuList.h:

2017-10-03  Timothy Horton  <timothy_horton@apple.com>

        Include a few widespread WTF headers in WebCorePrefix.h
        https://bugs.webkit.org/show_bug.cgi?id=173481

        * WebCorePrefix.h:
        Turn this off on Windows because it doesn't work; needs further investigation.

2017-10-03  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.

        We can't do this on macOS 10.12 because of https://bugs.llvm.org/show_bug.cgi?id=33520.

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

        XMLHttpRequest.setRequestHeader() should allow Content-Transfer-Encoding header; remove
        duplicate logic to check for a forbidden XHR header field
        https://bugs.webkit.org/show_bug.cgi?id=177829

        Reviewed by Alexey Proskuryakov.

        Use isForbiddenHeaderName() (defined in HTTPParsers.h) to check if the header field specified
        to XMLHttpRequest.setRequestHeader() is allowed. Among other benefits this makes the behavior
        of XMLHttpRequest.setRequestHeader() more closely aligned with the behavior of this method in
        the XHR standard, <https://xhr.spec.whatwg.org> (8 September 2017). In particular, XMLHttpRequest.setRequestHeader()
        no longer forbids setting the header Content-Transfer-Encoding. This header has not been
        considered a forbidden header since <https://www.w3.org/TR/2012/WD-XMLHttpRequest-20121206/>.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::isForbiddenRequestHeader): Deleted.
        (WebCore::XMLHttpRequest::isAllowedHTTPHeader): Deleted.
        * xml/XMLHttpRequest.h:

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

        Unreviewed, rolling out r222686, r222695, and r222698.
        https://bugs.webkit.org/show_bug.cgi?id=177835

        Caused LayoutTests to crash in
        WebCore::TimerBase::setNextFireTime (Requested by ryanhaddad
        on #webkit).

        Reverted changesets:

        "[Settings] Replace SettingsMacros.h with a generated base
        class for Settings"
        https://bugs.webkit.org/show_bug.cgi?id=177681
        http://trac.webkit.org/changeset/222686

        "[Settings] Enums should not be passed by const reference"
        https://bugs.webkit.org/show_bug.cgi?id=177727
        http://trac.webkit.org/changeset/222695

        "[Settings] Move remaining simple settings to Settings.in"
        https://bugs.webkit.org/show_bug.cgi?id=177730
        http://trac.webkit.org/changeset/222698

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

        Implement quality-of-service tiers in WebCoreDecompressionSession
        https://bugs.webkit.org/show_bug.cgi?id=177769

        Reviewed by Dean Jackson.

        VTDecompressionSession will suggest quality-of-service tiers to be used when decompression
        can't keep up with playback speed. Use a simple exponential-moving-average heuristic to
        determine when to move up and down the tiers.

        Drive-by fix: When frames are so late that they miss the display deadline, mark them as
        dropped rather than just delayed.

        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):
        (WebCore::WebCoreDecompressionSession::decodeSample):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::automaticDequeue):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):
        (WebCore::WebCoreDecompressionSession::resetQosTier):
        (WebCore::WebCoreDecompressionSession::increaseQosTier):
        (WebCore::WebCoreDecompressionSession::decreaseQosTier):
        (WebCore::WebCoreDecompressionSession::updateQosWithDecodeTimeStatistics):
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:

2017-10-03  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Support the "system" CSS font family
        https://bugs.webkit.org/show_bug.cgi?id=177755

        Reviewed by Carlos Garcia Campos.

        Obtain the system UI font from the GtkSettings::gtk-font-name property

        Test: platform/gtk/fonts/systemFont.html

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::getFamilyNameStringFromFamily): Use defaultGtkSystemFont()
        to handle -webkit-system-font and -webkit-system-ui.
        (WebCore::isCommonlyUsedGenericFamily): Handle -webkit-system-font and
        -webkit-system-ui as generic family names.
        * platform/graphics/gtk/GtkUtilities.cpp:
        (WebCore::defaultGtkSystemFont): Added.
        * platform/graphics/gtk/GtkUtilities.h: Add prototype for defaultGtkSystemFont().

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

        [XHR] Only exempt Dashboard widgets from XHR header restrictions
        https://bugs.webkit.org/show_bug.cgi?id=177824
        <rdar://problem/34384301>

        Reviewed by Alexey Proskuryakov.

        Currently we allow file URLs to set arbitrary XHR headers. In contrast, non-file URLs are
        restricted from setting some XHR headers (e.g. COOKIE). Historically the relaxation for file
        URL was for backwards compatibility to allow Dashboard widgets to work. Instead we should
        apply the non-file URL policy to all URLs and only relax the policy for Dashboard widgets.

        Tests: fast/xmlhttprequest/set-dangerous-headers-in-dashboard.html
               fast/xmlhttprequest/set-dangerous-headers.html

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

2017-10-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r221909): Failing fast/text/international/iso-8859-8.html
        https://bugs.webkit.org/show_bug.cgi?id=177364

        Reviewed by Carlos Garcia Campos.

        Range.getClientRects returned an incorrect rect for a last
        collapsed space of RenderText in HarfBuzz port.

        HarfBuzzShaper::selectionRect needs to return a valid value even
        if the arguments 'from' and 'to' point to the just after the end
        of the text run.

        Tests: fast/text/international/iso-8859-8.html

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shape): Do not check the return value of
        fillGlyphBuffer.
        (WebCore::HarfBuzzShaper::fillGlyphBuffer): Change the return
        value type from bool to void.
        (WebCore::HarfBuzzShaper::selectionRect): Set the rightmost
        position to fromX if foundFromX is false.
        * platform/graphics/harfbuzz/HarfBuzzShaper.h: Change the return
        value type of fillGlyphBuffer from bool to void.

2017-10-03  JF Bastien  <jfbastien@apple.com>

        WebAssembly: no VM / JS version of everything but Instance
        https://bugs.webkit.org/show_bug.cgi?id=177473

        Reviewed by Filip Pizlo.

        * ForwardingHeaders/wasm/WasmModule.h: Added. This used to be
        included in JSWebAssemblyModule.h.
        * bindings/js/SerializedScriptValue.cpp: Update postMessage code
        according to C++ API changes.

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

        [AX] Do not trigger redundant layout on tables.
        https://bugs.webkit.org/show_bug.cgi?id=177781
        <rdar://problem/34777030>

        Reviewed by Antti Koivisto.

        RenderTable::forceSectionsRecalc() marks the RenderTable dirty and schedules a layout.
        Every time AccessibilityTable asks for the table element (including during construction),
        we end up triggering a layout. This call was added (r191357) to ensure RenderTable's m_firstBody is always
        up-to-date (in case of anonymous wrapper table renderer). Instead of relying on the m_firstBody,
        let's just use the first child to find the table element. The first child always points to a valid
        renderer (or nullptr), while m_firstBody is the result of section computation.

        Covered by existing tests.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::tableElement const):

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

        [CSP] Check policy before opening a new window to a JavaScript URL
        https://bugs.webkit.org/show_bug.cgi?id=176815
        <rdar://problem/34400057>

        Reviewed by Brent Fulgham.

        Ensure that the Content Security Policy of the page allows navigation to a JavaScript URL
        before opening a new window to it.

        Test: http/tests/security/contentSecurityPolicy/window-open-javascript-url-blocked.html

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

2017-10-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] ARIA drag-and-drop attribute values should be exposed via AtkObject attributes
        https://bugs.webkit.org/show_bug.cgi?id=177763

        Reviewed by Chris Fleizach.

        Expose the values of aria-grabbed and aria-dropeffect via the "grabbed" and "dropeffect"
        AtkObject attributes.

        Test: accessibility/gtk/aria-drag-and-drop.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2017-10-03  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r222779.

        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData): Setting NSSecureCoding in this test code should be
        done based on build system, just like it is in the actual WebArchive handling code.

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

        Clean-up RealtimeIncomingVideoSource
        https://bugs.webkit.org/show_bug.cgi?id=177782

        Reviewed by Alejandro G. Castro.

        No change of behavior.
        Removing code that is no longer needed.

        * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::create):
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        * platform/mediastream/mac/RealtimeIncomingVideoSource.h:

2017-10-03  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Use safer decoding practices for NSKeyedUnarchiver
        https://bugs.webkit.org/show_bug.cgi?id=175887
        <rdar://problem/33435281>

        Reviewed by Daniel Bates.

        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Use NSSecureCoding to unarchive.
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Ditto for archiving.
        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData): Update to use NSSecureCoding if possible.

2017-10-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222760.

        This change caused LayoutTest crashes.

        Reverted changeset:

        "[Mac] Use safer decoding practices for NSKeyedUnarchiver"
        https://bugs.webkit.org/show_bug.cgi?id=175887
        http://trac.webkit.org/changeset/222760

2017-10-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r222392): [WPE][GTK] Many forms tests are failing due to broken event timestamps
        https://bugs.webkit.org/show_bug.cgi?id=177449

        Reviewed by Chris Dumez.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::wallTimeForEvent):
        * platform/gtk/GtkUtilities.h:
        (WebCore::wallTimeForEvent):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/gtk/PlatformMouseEventGtk.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

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

        Use vector map routine in WebCore CacheStorage implementation
        https://bugs.webkit.org/show_bug.cgi?id=177002

        Reviewed by Darin Adler.

        No change of behavior.
        Replacing use of reserveInitialCapacity/uncheckedAppend by use of map.

        * Modules/cache/CacheStorage.cpp:
        (WebCore::copyCache):
        (WebCore::CacheStorage::match):
        (WebCore::CacheStorage::retrieveCaches):
        (WebCore::CacheStorage::keys):
        (WebCore::copyCaches): Deleted.
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::matchAll):
        (WebCore::copyRequestRef):
        (WebCore::DOMCache::keys):
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::isolateCacheInfo):
        (WebCore::DOMCacheEngine::CacheInfos::isolatedCopy):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::recordsDataFromRecords):
        (WebCore::recordsFromRecordsData):

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

        Move LineEnding.{h,cpp} from WebCore/platform/text to wtf/text
        https://bugs.webkit.org/show_bug.cgi?id=176575

        Reviewed by Alex Christensen.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/BlobBuilder.cpp:
        * html/FormDataList.cpp:

2017-10-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename methods ending in *Json() as *JSON()
        https://bugs.webkit.org/show_bug.cgi?id=177793

        Reviewed by Matt Baker.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForCachedResource):
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJSON):
        (WebCore::InspectorPageAgent::cachedResourceTypeJSON):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        (WebCore::InspectorPageAgent::resourceTypeJson): Deleted.
        (WebCore::InspectorPageAgent::cachedResourceTypeJson): Deleted.
        * inspector/InspectorPageAgent.h:

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

        REGRESSION(r222595): Intermittent crash while accessing DataTransferItemList
        https://bugs.webkit.org/show_bug.cgi?id=177791
        <rdar://problem/34781456>

        Reviewed by Ryosuke Niwa.

        DataTransfer::moveDragState() currently attempts to move the other DataTransfer's DataTransferItemList and
        DragImageLoader as members of its own. This is incorrect, since both of these entities hold raw references of
        some form to the other DataTransfer, yet they are held as unique_ptrs in the new DataTransfer. To fix this, we
        (1) remove the line of code that moves the item list, since item lists will be lazily generated on the new
        DataTransfer anyways, and (2) update the DataTransfer pointer on the old DataTransfer's DragImageLoader after
        moving it to the new DataTransfer.

        Test: editing/pasteboard/drag-end-crash-accessing-item-list.html

        * dom/DataTransfer.cpp:
        (WebCore::DragImageLoader::moveToDataTransfer):
        (WebCore::DataTransfer::moveDragState):

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

        Rename computeSharedStringHash() overload taking a URL to computedVisitedLinkHash()
        https://bugs.webkit.org/show_bug.cgi?id=177776

        Reviewed by Alex Christensen.

        * dom/VisitedLinkState.cpp:
        (WebCore::linkHashForElement):
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::visitedLinkHash const):
        * platform/SharedStringHash.cpp:
        (WebCore::computeVisitedLinkHash):
        * platform/SharedStringHash.h:

2017-10-02  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] The value of aria-level is not exposed on non-heading roles
        https://bugs.webkit.org/show_bug.cgi?id=177775

        Reviewed by Chris Fleizach.

        Expose the value of aria-level via the "level" AtkObject attribute, as is currently
        done for headings.

        Test: accessibility/gtk/aria-level.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2017-10-02  Andy Estes  <aestes@apple.com>

        [Payment Request] Validate payment method identifiers
        https://bugs.webkit.org/show_bug.cgi?id=177794

        Reviewed by Sam Weinig.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::isValidStandardizedPaymentMethodIdentifier):
        (WebCore::isValidURLBasedPaymentMethodIdentifier):
        (WebCore::convertAndValidatePaymentMethodIdentifier):
        (WebCore::PaymentRequest::create):
        * Modules/paymentrequest/PaymentRequest.h:

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

        Move more code into PasteboardCustomData
        https://bugs.webkit.org/show_bug.cgi?id=177795

        Reviewed by Wenson Hsieh.

        Moved sharedBufferFromCustomData, customDataFromSharedBuffer, and customWebKitPasteboardDataType into
        PasteboardCustomData as createSharedBuffer, fromSharedBuffer, and cocoaType respectively.

        * platform/Pasteboard.cpp:
        (WebCore::PasteboardCustomData::createSharedBuffer const): Renamed from sharedBufferFromCustomData.
        (WebCore::PasteboardCustomData::fromSharedBuffer): Renamed from customDataFromSharedBuffer.
        * platform/Pasteboard.h:
        * platform/StaticPasteboard.cpp:
        (WebCore::StaticPasteboard::commitToPasteboard): Now initializes with an empty origin string.
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::PasteboardCustomData::cocoaType): Moved here from Pasteboard.h
        (WebCore::Pasteboard::readStringInCustomData):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::write):
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard typeIdentifiersToLoadForRegisteredTypeIdentfiers:]):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::write):

2017-10-02  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Use safer decoding practices for NSKeyedUnarchiver
        https://bugs.webkit.org/show_bug.cgi?id=175887
        <rdar://problem/33435281>

        Reviewed by Daniel Bates.

        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Use NSSecureCoding to unarchive.
        (WebCore::LegacyWebArchive::createPropertyListRepresentation): Ditto for archiving.
        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData): Update to use NSSecureCoding if possible.

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

        Use InlineTextBox::lineFont() in more places
        https://bugs.webkit.org/show_bug.cgi?id=177749

        Reviewed by Zalan Bujtas.

        Currently InlineTextBox::paint() calls InlineTextBox::lineFont() to compute the font for the
        line and then passes this value to various paint helper functions. The computation is not
        expensive and it is sufficient to have the individual paint helper functions compute it
        directly. We should have the individual paint helper functions compute it directly. This
        will help towards sharing more code throughout InlineTextBox by reducing the noise of
        passing the font for the line.

        No functionality changed. So, no new tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintTextSubrangeBackground):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/InlineTextBox.h:

2017-10-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Implement missing async method in RecourceHandle and make it actually async
        https://bugs.webkit.org/show_bug.cgi?id=173964

        Reviewed by Alex Christensen.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::continueWillSendRequest): Deleted.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Deleted.
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace): Deleted.
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::suspend):
        (WebCore::CurlRequest::resume):
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::didCancelTransfer):
        (WebCore::CurlRequest::finalizeTransfer):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        (WebCore::CurlRequest::invokeDidReceiveResponse):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        (WebCore::CurlRequest::setRequestPaused):
        (WebCore::CurlRequest::setCallbackPaused):
        (WebCore::CurlRequest::pausedStatusChanged):
        (WebCore::CurlRequest::setPaused): Deleted.
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::needToInvokeDidReceiveResponse const):
        (WebCore::CurlRequest::isPaused const):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::platformContinueSynchronousDidReceiveResponse):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::continueDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::platformContinueSynchronousDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::continueAfterDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::shouldRedirectAsGET):
        * platform/network/curl/ResourceHandleCurlDelegate.h:
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::shouldRedirect):
        (WebCore::ResourceResponse::isMovedPermanently const):
        (WebCore::ResourceResponse::isFound const):
        (WebCore::ResourceResponse::isSeeOther const):
        (WebCore::ResourceResponse::isNotModified const):
        (WebCore::ResourceResponse::isUnauthorized const):

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

        PasteImage tests are failing on debug builds
        https://bugs.webkit.org/show_bug.cgi?id=177778

        Reviewed by Wenson Hsieh.

        After r222702, PlatformPasteboard is no longer responsible for adding "Files" as a type"
        as DataTransfer takes care of it now. Removed the code to do this from PlatformPasteboardIOS.mm
        and PlatformPasteboardMac.mm so that we don't fail assertions in debug builds.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):

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

        No need to truncate text after calling InlineTextBox::text()
        https://bugs.webkit.org/show_bug.cgi?id=177748

        Reviewed by Zalan Bujtas.

        Following r222670 it is no longer necessary to explicitly truncate the text run length
        as InlineTextBox::text() returns a text run with respect to the truncation of the text box.

        No functionality changed. So, no new tests.

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

2017-10-02  Antti Koivisto  <antti@apple.com>

        Add makeWeakPtr variant that takes pointer
        https://bugs.webkit.org/show_bug.cgi?id=177767

        Reviewed by Zalan Bujtas.

        Use it.

        * rendering/SelectionRangeData.h:
        (WebCore::SelectionRangeData::Context::Context):

2017-10-02  Antti Koivisto  <antti@apple.com>

        Make RenderPtr a type alias of std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=177739

        Reviewed by Sam Weinig.

        It just needs a custom deleter.

        * page/FrameView.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        (WebCore::RenderMultiColumnFlow::handleSpannerRemoval):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObjectDeleter::operator() const):
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderPtr.h:
        (WebCore::createRenderer):
        (WebCore::static_pointer_cast):

            Make this safer with downcast.

        (WebCore::RenderPtr::RenderPtr): Deleted.
        (WebCore::RenderPtr::~RenderPtr): Deleted.
        (WebCore::RenderPtr::get const): Deleted.
        (WebCore::RenderPtr::operator* const): Deleted.
        (WebCore::RenderPtr::operator-> const): Deleted.
        (WebCore::RenderPtr::operator! const): Deleted.
        (WebCore::RenderPtr::operator UnspecifiedBoolType const): Deleted.
        (WebCore::RenderPtr::operator=): Deleted.
        (WebCore::RenderPtr::swap): Deleted.
        (WebCore::RenderPtr::operator==): Deleted.
        (WebCore::RenderPtr::operator!=): Deleted.
        (WebCore::RenderPtr<T>::clear): Deleted.
        (WebCore::RenderPtr<T>::leakPtr): Deleted.
        (WebCore::RenderPtr<T>::RenderPtr): Deleted.
        (WebCore::=): Deleted.
        (WebCore::swap): Deleted.
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.
        (WebCore::getPtr): Deleted.
        (WTF::HashTraits<WebCore::RenderPtr<T>>::emptyValue): Deleted.
        (WTF::HashTraits<WebCore::RenderPtr<T>>::peek): Deleted.

            We already have hash traits for std::unique_ptr.

2017-10-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include Beacon and Ping requests in Network tab
        https://bugs.webkit.org/show_bug.cgi?id=177641
        <rdar://problem/33086839>

        Reviewed by Chris Dumez.

        Tests: http/tests/inspector/network/beacon-type.html
               http/tests/inspector/network/ping-type.html

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        Fix a typo.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::startPingLoad):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        Include InspectorInstrumentation hooks for ping network loads.

        * loader/LoaderStrategy.h:
        * platform/network/PingHandle.h:
        Include an optional ResourceResponse in the ping load completion callback.
        If available this will be enough for Web Inspector to include details such
        as the response statusCode.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willSendRequestOfTypeImpl):
        (WebCore::InspectorInstrumentation::continueAfterPingLoaderImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequestOfType):
        (WebCore::InspectorInstrumentation::continueAfterPingLoader): Deleted.
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::resourceTypeForCachedResource):
        (WebCore::resourceTypeForLoadType):
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::willSendRequestOfType):
        * inspector/InspectorNetworkAgent.h:
        Make a general willSendRequestOfType hook when sending a request that does
        not go through normal CachedResource loading. The Ping and Beacon requests
        go through this process, we may also use this path for Preflight requests.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceType):
        * inspector/InspectorPageAgent.h:
        Small refactoring.

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

        SelectionRangeData should not hold raw RenderObject pointers
        https://bugs.webkit.org/show_bug.cgi?id=177677
        <rdar://problem/34763060>

        Reviewed by Sam Weinig.

        SelectionRangeData::Context start and end renderers' lifetime is not strictly tied
        to the lifetime of SelectionRangeData.

        Covered by existing tests.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearance):
        * platform/DragImage.cpp:
        (WebCore::createDragImageForRange):
        * rendering/SelectionRangeData.cpp:
        (WebCore::isValidRendererForSelection):
        (WebCore::collect):
        (WebCore::SelectionRangeData::set):
        (WebCore::SelectionRangeData::clear):
        (WebCore::SelectionRangeData::repaint const):
        (WebCore::SelectionRangeData::collectBounds const):
        (WebCore::SelectionRangeData::apply):
        * rendering/SelectionRangeData.h:
        (WebCore::SelectionRangeData::Context::Context):
        (WebCore::SelectionRangeData::Context::start const):
        (WebCore::SelectionRangeData::Context::end const):
        (WebCore::SelectionRangeData::Context::startPosition const):
        (WebCore::SelectionRangeData::Context::endPosition const):
        (WebCore::SelectionRangeData::Context::operator== const):
        (WebCore::SelectionRangeData::start const):
        (WebCore::SelectionRangeData::end const):
        (WebCore::SelectionRangeData::startPosition const):
        (WebCore::SelectionRangeData::endPosition const):

2017-10-02  Olivier Blin  <olivier.blin@softathome.com>

        [WPE] Remove GnuTLS dependency
        https://bugs.webkit.org/show_bug.cgi?id=177750

        Reviewed by Michael Catanzaro.

        libgcrypt is used by default instead of GnuTLS.
        See bug 163125

        * PlatformWPE.cmake:

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

        Addressing post-review comments after r222621
        https://bugs.webkit.org/show_bug.cgi?id=177610

        Reviewed by Darin Adler.

        * rendering/RenderMenuList.cpp:
        (RenderMenuList::didUpdateActiveOption):

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

        Remove length argument from TextPainter::paint()
        https://bugs.webkit.org/show_bug.cgi?id=177758

        Reviewed by Alex Christensen.

        Have TextPainter.paint() use the length of the specified TextRun as opposed to
        taking an explicit argument for the length of the TextRun.

        Following r222670 InlineTextBox creates a TextRun with respect to the truncated
        line. Prior to r222670 InlineTextBox did not do this and hence it had to pass both
        the TextRun and truncated length to TextPainter.paint() to have the line painted.
        Code that needs to paint a substring of a TextRun can still do so by using TextPainter.paintRange().

        No functionality changed. So, no new tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paint):
        * rendering/TextPainter.h:

2017-10-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [curl] Crashes in CurlRequest::setupPUT()
        https://bugs.webkit.org/show_bug.cgi?id=177733

        Reviewed by Alex Christensen.

        Tests: http/tests/xmlhttprequest/xmlhttprequest-open-method-allowed.html

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupPUT): Null-check the result of request.httpBody().

2017-10-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [CURL] Should handle redirects in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=21242

        Reviewed by Alex Christensen.

        * platform/network/ResourceHandle.cpp:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableAutoReferer): Deleted.
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didReceiveData):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::continueWillSendRequest):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::shouldRedirectAsGET):
        (WebCore::ResourceHandleCurlDelegate::willSendRequest):
        (WebCore::ResourceHandleCurlDelegate::continueWillSendRequest):
        (WebCore::ResourceHandleCurlDelegate::continueAfterWillSendRequest):
        * platform/network/curl/ResourceHandleCurlDelegate.h:
        * platform/network/curl/ResourceResponse.h:
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::shouldRedirect):
        (WebCore::ResourceResponse::isMovedPermanently const):
        (WebCore::ResourceResponse::isFound const):
        (WebCore::ResourceResponse::isSeeOther const):
        (WebCore::ResourceResponse::isRedirection const): Deleted.

2017-10-02  Antti Koivisto  <antti@apple.com>

        Crashes with guard malloc under RenderFullScreen::unwrapRenderer
        https://bugs.webkit.org/show_bug.cgi?id=177760

        Unreviewed.

        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::unwrapRenderer):

        The assert accesses 'this' after it has been deleted. It is not very valuable so remove the assert.

2017-10-02  Zan Dobersek  <zdobersek@igalia.com>

        GraphicsContext: remove unused ENABLE(3D_TRANSFORMS) && USE(TEXTURE_MAPPER)
        https://bugs.webkit.org/show_bug.cgi?id=177757

        Reviewed by Michael Catanzaro.

        Remove three methods from the GraphicsContext class that were conditioned
        with the ENABLE(3D_TRANSFORMS) and USE(TEXTURE_MAPPER) guards. These aren't
        used anywhere at this point, but apparently used to be in the TextureMapper
        implementation.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::get3DTransform const): Deleted.
        (WebCore::GraphicsContext::concat3DTransform): Deleted.
        (WebCore::GraphicsContext::set3DTransform): Deleted.

2017-10-02  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GLib] NetworkStateNotifier implementation missing
        https://bugs.webkit.org/show_bug.cgi?id=177741

        Reviewed by Carlos Garcia Campos.

        No new tests. The DOM support is already being tested, but we would need a way
        of simulating a network outage to test GNetworkMonitor.

        * PlatformGTK.cmake: add new file.
        * PlatformWPE.cmake: add new file.
        * platform/network/NetworkStateNotifier.cpp: no longer need the empty implementations, all platforms covered.
        * platform/network/NetworkStateNotifier.h:
        * platform/network/glib/NetworkStateNotifierGLib.cpp: Added.
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying): update the network state using GNetworkMonitor's availability.
        (WebCore::NetworkStateNotifier::networkChangedCallback): when network-changed is emitted, trigger a state update.
        (WebCore::NetworkStateNotifier::startObserving): watch GNetworkMonitor's network-changed signal.

2017-10-02  Olivier Blin  <olivier.blin@softathome.com>

        Fix build with MathML disabled
        https://bugs.webkit.org/show_bug.cgi?id=177744

        Reviewed by Michael Catanzaro.

        These are regressions from r217549 (StyleResolver) and r221379 (RenderBlockFlow), which do not guard MathML usage.

        * css/StyleResolver.cpp:
        (WebCore::hasEffectiveDisplayNoneForDisplayContents):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns const):

2017-10-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use ThreadIdentifier instead of thread::this_thread::get_id
        https://bugs.webkit.org/show_bug.cgi?id=177729

        Reviewed by Sam Weinig.

        We can use WTF::ThreadIdentifier instead of thread::this_thread::get_id
        to make use of ThreadIdentifier consistent in WebKit. In the other places,
        we use ThreadIdentifier for this debugging purpose. And this is the only
        place using thread::this_thread::get_id for the exact same purpose.
        Furthermore, thread::this_thread::get_id in Windows platform. So we prefer
        using ThreadIdentifier than thread::this_thread::get_id.

        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::threadID const):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::detailsForNameAndOrigin):

2017-10-02  Antti Koivisto  <antti@apple.com>

        Fix memory leaks in RenderMultiColumnFlow
        https://bugs.webkit.org/show_bug.cgi?id=177735

        Reviewed by Zalan Bujtas.

        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy):

            Switch from destroy() to removeFromParentAndDestroy() (they are currently equivalent in practice).

        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):

            Destroy the placeholders instead of leaking them.

        (WebCore::RenderMultiColumnFlow::handleSpannerRemoval):

            Destroy the placeholder instead of leaking it.

2017-10-02  Charles Turner  <cturner@igalia.com>

        Try to play AVC codec even if H.264 decoder only advertises byte-stream profile.
        https://bugs.webkit.org/show_bug.cgi?id=177550

        GStreamer's element factory filters will claim they can't play videos with AVC
        codec strings, but the elements really are capable of playing them when filters
        like videoconvert are inserted by playbin. Videos of this variety are in the YouTube
        2018 EME conformance tests.

        Also replace std::array with a stack array, this saves having to count
        the number of elements (the compiler does that now) and reduces braces.

        Reviewed by Carlos Alberto Lopez Perez.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::codecSet):

2017-10-02  Tomas Popela  <tpopela@redhat.com>

        [SOUP] Default kerberos authentication credentials are used in ephemeral (private) mode
        https://bugs.webkit.org/show_bug.cgi?id=177738

        Reviewed by Carlos Garcia Campos.

        If the session is ephemeral then don't enable the Negotiate support in
        our SoupSession.

        * platform/network/soup/NetworkStorageSessionSoup.cpp: Pass the
        session ID if it's known to the SoupNetworkSession.
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession):
        (WebCore::NetworkStorageSession::getOrCreateSoupNetworkSession const):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession): If the session is
        ephemeral (based on given session ID) then don't activate the
        Negotiate support in SoupSession.
        * platform/network/soup/SoupNetworkSession.h:
        Change the constructor to accept the PAL::SessionID with the default
        value set to PAL::SessionID::emptySessionID.

2017-10-02  Joanmarie Diggs  <jdiggs@igalia.com>

        REGRESSION(r222640) [GTK] Build broken with ATK 2.14
        https://bugs.webkit.org/show_bug.cgi?id=177634

        Reviewed by Michael Catanzaro.

        Use ATK_CHECK_VERSION to prevent the build failure.

        No new tests. This fixes a downstream build failure.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

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

        Pasteboard shouldn't add "Files" as a type
        https://bugs.webkit.org/show_bug.cgi?id=177731

        Reviewed by Wenson Hsieh.

        Removed the platform specific code to add "Files" when there is a file present in platform's pasteboard.
        DataTransfer::types now adds "Files" automatically when Pasteboard::containsFiles returns true.

        No new tests since there should be no behavioral change.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::types const):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType):
        * platform/win/PasteboardWin.cpp:
        (WebCore::addMimeTypesForFormat): Removed the code to add "Text" and "URL" as separate types since
        this is not what the rest of ports do, and this type normalization is now taken care of by DataTransfer
        since r221063.

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

        Another attempt to fix Windows build after r222697.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearance):
        * platform/DragImage.cpp:
        (WebCore::createDragImageForRange):
        * rendering/SelectionRangeData.cpp:
        (WebCore::SelectionRangeData::clear):
        * rendering/SelectionRangeData.h:
        (WebCore::SelectionRangeData::Context::Context):

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

        Windows build fix attempt after r222697.

        * platform/DragImage.cpp:
        (WebCore::createDragImageForRange):

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

        Merge readFilenames() and read(PasteboardFileReader)
        https://bugs.webkit.org/show_bug.cgi?id=177728
        <rdar://problem/34761725>

        Reviewed by Sam Weinig.

        Generalized PasteboardFileReader to return multiple files instead of just one file, and replaced the use
        of Pasteboard::readFilenames() with it. Because eliminates the need for finding the list of types to read
        as files in addition to file names, this patch also removes Pasteboard::typesTreatedAsFiles().

        Note that Pasteboard::readFilenames() continues to exist in macOS and iOS as it's internally used by
        Pasteboard::read(PasteboardFileReader) in PasteboardCocoa.mm.

        No new tests since there should be no behavioral change.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::files const): Now makes a single call to Pasteboard::read(PasteboardFileReader)
        instead of reading filenames and then falling back to it. Also got rid of if-def for drag drop checks
        since forDrag() and forFileDrag() are always defined since r222688.
        (WebCore::PasteboardFileTypeReader): Added. Gets the list of all file types.
        (WebCore::PasteboardFileTypeReader::readFilename): Added. Gets the list of all file types.
        (WebCore::PasteboardFileTypeReader::readBuffer): Added. Gets the list of all file types.
        (WebCore::DataTransfer::hasFileOfType): Reimplemented using PasteboardFileTypeReader.
        * editing/WebCorePasteboardFileReader.cpp:
        (WebCore::WebCorePasteboardFileReader::readFilename): Added.
        (WebCore::WebCorePasteboardFileReader::readBuffer): Renamed from read.
        * editing/WebCorePasteboardFileReader.h:
        * platform/Pasteboard.h:
        (WebCore::PasteboardFileReader): Removed the constructor since we no longer specify a specific type to
        read off of pasteboard, and renamed the existing read function to readBuffer, and added a new variant
        which takes a filename.
        * platform/StaticPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::imageTypeToFakeFilename): Return "image/png" for ImageType::TIFF (to do TIFF-to-PNG conversion;
        see r222656 for why this is needed) now that this function is used to convert directly from image type
        converted from cocoa type instead of the one reverse-converted from MIME type.
        (WebCore::mimeTypeToImageType): Deleted.
        (WebCore::Pasteboard::typesTreatedAsFiles): Deleted.
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings): Use newly added readTypesWithSecurityCheck.
        (WebCore::convertTIFFToPNG): Extracted out of read(PasteboardFileReader).
        (WebCore::Pasteboard::read): Generalized to add filenames as well as image buffers as files. Because now
        we're concerting Cocoa types to ImageType, we no longer have to detect when TIFF-as-PNG conversion is
        happening here. We just treat ImageType::TIFF as PNG and do the conversion.
        (WebCore::Pasteboard::readStringInCustomData): Use newly added readBufferForTypeWithSecurityCheck.
        (WebCore::Pasteboard::readTypesWithSecurityCheck): Added.
        (WebCore::Pasteboard::readBufferForTypeWithSecurityCheck): Added.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::read): Implemented.
        (WebCore::Pasteboard::typesTreatedAsFiles): Deleted.
        (WebCore::Pasteboard::containsFiles): Implemented without calling readFilenames, which has been deleted.
        (WebCore::Pasteboard::readFilenames): Deleted.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::typesTreatedAsFiles): Deleted.
        (WebCore::PasteboardFileCounter): Added. Used to counts the number of files in the pasteboard.
        (WebCore::PasteboardFileCounter::readFilename):
        (WebCore::PasteboardFileCounter::readBuffer):
        (WebCore::Pasteboard::containsFiles):
        (WebCore::Pasteboard::read): Moved the code to extract filenames out of readFilenames.
        (WebCore::Pasteboard::readFilenames): Deleted.
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::typesTreatedAsFiles): Deleted.
        (WebCore::Pasteboard::readFilenames): Deleted.

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

        [Settings] Move remaining simple settings to Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=177730

        Reviewed by Darin Adler.

        - Adds new option type for Settings.in, 'getter', which allows you to specify
          a custom name for the setting's getter. For instance, the setting javaEnabled
          has a custom getter name, 'isJavaEnabled'.
        - Adds support for WTF::Seconds as a type of setting. Used by only 
          timeWithoutMouseMovementBeforeHidingControls at the moment.
        - Moves non-generated settings from Settings.h/cpp that don't require custom
          action when set, to Settings.in

        * Scripts/GenerateSettings/GenerateInternalSettingsImplementationFile.py:
        * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py:
        * Scripts/GenerateSettings/Settings.py:

            Add support for 'getter' and the Seconds type.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/FontRenderingMode.h: Copied from Source/WebCore/platform/text/TextFlags.h.
        * platform/text/TextFlags.h:
        
            Add FontRenderingMode.h. Moved out of TextFlags.h to be accessible by
            the settings generator.
        
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setJavaEnabled): Deleted.
        (WebCore::Settings::setJavaEnabledForLocalFiles): Deleted.
        (WebCore::Settings::setPreferMIMETypeForImages): Deleted.
        (WebCore::Settings::setForcePendingWebGLPolicy): Deleted.
        (WebCore::Settings::setNeedsAdobeFrameReloadingQuirk): Deleted.
        (WebCore::Settings::setFontRenderingMode): Deleted.
        (WebCore::Settings::fontRenderingMode const): Deleted.
        (WebCore::Settings::setShowTiledScrollingIndicator): Deleted.
        (WebCore::Settings::setFontFallbackPrefersPictographs): Deleted.
        (WebCore::Settings::setWebFontsAlwaysFallBack): Deleted.
        * page/Settings.h:
        (WebCore::Settings::isJavaEnabled const): Deleted.
        (WebCore::Settings::isJavaEnabledForLocalFiles const): Deleted.
        (WebCore::Settings::preferMIMETypeForImages const): Deleted.
        (WebCore::Settings::needsAcrobatFrameReloadingQuirk const): Deleted.
        (WebCore::Settings::showTiledScrollingIndicator const): Deleted.
        (WebCore::Settings::setTouchEventEmulationEnabled): Deleted.
        (WebCore::Settings::isTouchEventEmulationEnabled const): Deleted.
        (WebCore::Settings::setTimeWithoutMouseMovementBeforeHidingControls): Deleted.
        (WebCore::Settings::timeWithoutMouseMovementBeforeHidingControls const): Deleted.
        (WebCore::Settings::fontFallbackPrefersPictographs const): Deleted.
        (WebCore::Settings::webFontsAlwaysFallBack const): Deleted.
        (WebCore::Settings::setMediaKeysStorageDirectory): Deleted.
        (WebCore::Settings::mediaKeysStorageDirectory const): Deleted.
        (WebCore::Settings::setMediaDeviceIdentifierStorageDirectory): Deleted.
        (WebCore::Settings::mediaDeviceIdentifierStorageDirectory const): Deleted.
        (WebCore::Settings::applePayEnabled const): Deleted.
        (WebCore::Settings::setApplePayEnabled): Deleted.
        (WebCore::Settings::applePayCapabilityDisclosureAllowed const): Deleted.
        (WebCore::Settings::setApplePayCapabilityDisclosureAllowed): Deleted.
        (WebCore::Settings::isForcePendingWebGLPolicy const): Deleted.
        * page/Settings.in:

            Moved hand-written settings to be Settings.in based.

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

        RenderView does not need to be a SelectionSubtreeRoot
        https://bugs.webkit.org/show_bug.cgi?id=177713

        Reviewed by Darin Adler and Antti Koivisto.

        1. SelectionSubtreeRoot -> SelectionRangeData 
        2. Move all selection logic from RenderView to SelectionRangeData
        3. class RenderView : public SelectionSubtreeRoot -> SelectionRangeData m_selection;
        4. Remove redundant code
        5. General modernization
 
        No change in functionality.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setNeedsSelectionUpdate):
        (WebCore::DragCaretController::nodeWillBeRemoved):
        (WebCore::FrameSelection::respondToNodeModification):
        (WebCore::FrameSelection::prepareForDestruction):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::selectionBounds const):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContentsForSnapshot):
        * platform/DragImage.cpp:
        (WebCore::ScopedFrameSelectionState::ScopedFrameSelectionState):
        (WebCore::ScopedFrameSelectionState::~ScopedFrameSelectionState):
        (WebCore::createDragImageForRange):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState):
        (WebCore::InlineTextBox::selectionStartEnd const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isSelectionBorder const):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::isSelected const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRectsForLineBoxes):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::setSelectionState):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::SelectionIterator::SelectionIterator): Deleted.
        (WebCore::SelectionIterator::current const): Deleted.
        (WebCore::SelectionIterator::next): Deleted.
        (WebCore::SelectionIterator::checkForSpanner): Deleted.
        (WebCore::rendererAfterPosition): Deleted.
        (WebCore::RenderView::selectionBounds const): Deleted.
        (WebCore::RenderView::subtreeSelectionBounds const): Deleted.
        (WebCore::RenderView::repaintSelection const): Deleted.
        (WebCore::RenderView::repaintSubtreeSelection const): Deleted.
        (WebCore::RenderView::setSelection): Deleted.
        (WebCore::isValidObjectForNewSelection): Deleted.
        (WebCore::RenderView::clearSubtreeSelection const): Deleted.
        (WebCore::RenderView::applySubtreeSelection): Deleted.
        (WebCore::RenderView::getSelection const): Deleted.
        (WebCore::RenderView::clearSelection): Deleted.
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::rendererAfterPosition):
        (WebCore::SelectionIterator::SelectionIterator):
        (WebCore::SelectionIterator::current const):
        (WebCore::SelectionIterator::next):
        (WebCore::SelectionIterator::checkForSpanner):
        (WebCore::SelectionRangeData::SelectionRangeData):
        (WebCore::SelectionRangeData::set):
        (WebCore::SelectionRangeData::clear):
        (WebCore::SelectionRangeData::repaint const):
        (WebCore::SelectionRangeData::bounds const):
        (WebCore::SelectionRangeData::collectAndClear const):
        (WebCore::SelectionRangeData::apply):
        (WebCore::SelectionRangeData::isValidRendererForNewSelection const):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeRoot): Deleted.
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionRangeData::Context::operator== const):
        (WebCore::SelectionRangeData::get const):
        (WebCore::SelectionRangeData::start const):
        (WebCore::SelectionRangeData::end const):
        (WebCore::SelectionRangeData::startPosition const):
        (WebCore::SelectionRangeData::endPosition const):
        (WebCore::SelectionSubtreeRoot::OldSelectionData::OldSelectionData): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::SelectionSubtreeData): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionStart const): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionStartPos const): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionEnd const): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionEndPos const): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionStartEndPositions const): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::clearSelection): Deleted.
        (WebCore::SelectionSubtreeRoot::selectionData): Deleted.
        (WebCore::SelectionSubtreeRoot::selectionData const): Deleted.
        (WebCore::SelectionSubtreeRoot::setSelectionData): Deleted.

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

        [Settings] Enums should not be passed by const reference
        https://bugs.webkit.org/show_bug.cgi?id=177727

        Reviewed by Darin Adler.

        * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py:
        * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py:
        (printGetterAndSetter):
        
            Use the new typeIsAggregate predicate to determine whether to
            use const reference or not.
        
        (includeForSetting): Deleted.

            Move includeForSetting to Settings.py with the rest of the Setting
            helpers.

        * Scripts/GenerateSettings/Settings.py:
        (mapToIDLType):
        (typeIsPrimitive):
        (typeIsAggregate):
        
            Add predicate to determine if a setting's type is an aggregate (struct or class)
            or a primitive. Remove references to size_t, which is not used.

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

        Add support for DOM aborting (https://dom.spec.whatwg.org/#aborting-ongoing-activities)
        https://bugs.webkit.org/show_bug.cgi?id=177718

        Reviewed by Darin Adler.

        Adds standalone support for AbortController and AbortSignal. No integration
        with other specs yet.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        
            Add new files.
        
        * dom/AbortController.cpp: Added.
        * dom/AbortController.h: Added.
        * dom/AbortController.idl: Added.
        * dom/AbortSignal.cpp: Added.
        * dom/AbortSignal.h: Added.
        * dom/AbortSignal.idl: Added.
        
            Add basic support AbortController and AbortSignal.
        
        * dom/EventTargetFactory.in:
        
            Add AbortSignal to the list of EventTargets.

2017-10-01  Antti Koivisto  <antti@apple.com>

        Use WeakPtr for first-letter memory management
        https://bugs.webkit.org/show_bug.cgi?id=177716

        Reviewed by Darin Adler.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::destroyLeftoverChildren):

            Remove first-letter special case.
            Use removeAndDestroyChild instead of calling destroy() directly. The latter should
            eventually stop calling takeChild and assert that the renderer is not in the tree.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::willBeDestroyed):
        (WebCore::RenderTextFragment::setText):
        * rendering/RenderTextFragment.h:

            Use WeakPtr.

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

        XMLHttpRequest's responseXML should be annotated with [Exposed=Window]
        https://bugs.webkit.org/show_bug.cgi?id=177714

        Reviewed by Darin Adler.

        Tests: imported/w3c/web-platform-tests/XMLHttpRequest/responseType-document-in-worker.html
               imported/w3c/web-platform-tests/XMLHttpRequest/responseXML-unavailable-in-worker.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        
            Replace returning null for non-document contexts with an assertion now
            that the bindings layer ensures this doesn't get called.
        
        (WebCore::XMLHttpRequest::setResponseType):
        
            Match the spec and turn attempts to set a responseType of 'document' in
            non-documents contexts as a no-op.
        
        * xml/XMLHttpRequest.idl:
        
            Address FIXME and annotate responseXML with [Exposed=Window] now that it
            is supported.

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

        Don't reveal file URL when pasting an image
        https://bugs.webkit.org/show_bug.cgi?id=177710
        <rdar://problem/34757924>

        Reviewed by Wenson Hsieh.

        Fixed the bug by generalizing the code we had for drag & drop to hide string types when there is a file.

        We don't hide string types when customPasteboardDataEnabled() is false to preserve the backwards compatiblity
        with apps that are relying on being able to read files URLs in the pasteboard.

        Test: editing/pasteboard/paste-image-does-not-reveal-file-url.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::getData const): Pretend there is no string data when there is a file in the pasteboard
        custom pasteboard data is enabled.
        (WebCore::DataTransfer::setData): Ditto.
        (WebCore::DataTransfer::types const): Ditto.
        * dom/DataTransfer.h:
        (WebCore::DataTransfer::forDrag const): Added for when drag & drop support is disabled at compilation time.
        (WebCore::DataTransfer::forFileDrag const): Ditto.
        * platform/Pasteboard.h:
        * platform/StaticPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::containsFiles): Added.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::containsFiles): Added.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::containsFiles): Added.
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::containsFiles): Added.
        (WebCore::Pasteboard::readFilenames): Annotated this function with notImplemented().

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

        [Settings] Replace SettingsMacros.h with a generated base class for Settings
        https://bugs.webkit.org/show_bug.cgi?id=177681

        Reviewed by Darin Adler.

        - Adds a SettingsGenerated class that Settings inherits from. The new class
          has the members and getters/setters for all the generated bindings.
        - Some default values for settings are literals in Settings.in, but rather
          constants or functions defined externally. These have all been moved to
          SettingsDefaultValues.h to allow for the script to include them all for
          SettingsGenerated.
        - Previously, a few enums were declared in Settings.h for use by Settings.
          Now that SettingsGenerated needs access, we standarize the same way that
          exists for the IDL generator; expecting the enum to be in a header of the
          same name.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreMacros.cmake:

            Add new files / generation steps.
        
        * Scripts/GenerateSettings.py:
        * Scripts/GenerateSettings/GenerateSettings.py:
        * Scripts/GenerateSettings/GenerateSettingsHeaderFile.py: Added.
        * Scripts/GenerateSettings/GenerateSettingsImplementationFile.py: Added.
        * Scripts/GenerateSettings/GenerateSettingsMacrosHeader.py: Removed.
        * Scripts/GenerateSettings/Settings.py:
        
            Replace script to generate SettingsMacros.h with scripts to generate a SettingsGenerated.{h,cpp}.
        
        * accessibility/ForcedAccessibilityValue.h: Added.
        * editing/EditableLinkBehavior.h: Added.
        * editing/EditingBehavior.h:
        * editing/EditingBehaviorType.h: Copied from editing/EditingBehaviorTypes.h.
        * editing/EditingBehaviorTypes.h: Removed.
        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetectorTypes.h: Added.
        * page/DebugOverlayRegions.h: Added.
        * page/FrameFlattening.h: Added.
        * page/PDFImageCachingPolicy.h: Added.
        * page/TextDirectionSubmenuInclusionBehavior.h: Added.
        * page/UserInterfaceDirectionPolicy.h: Added.
        * platform/text/TextDirection.h: Added.
        * platform/text/WritingMode.h:

            Split out enums from Settings.h

        * css/MediaQueryEvaluator.cpp:

            Update for new name of ForcedAccessibilityValue.

        * html/parser/HTMLParserOptions.cpp:

            Update for new name of defaultMaximumHTMLParserDOMTreeDepth.

        * page/Settings.cpp:
        * page/Settings.h:
        
            - Move defaults to SettingsDefaultValues.h (and SettingsDefaultValuesCocoa.mm for defaultTextAutosizingEnabled).
            - Move enums to their own files.
            - Inherit from SettingsGenerated.h
        
        * page/Settings.in:
        
            - Use new 'include' option for javaScriptRuntimeFlags setting to include <runtime/RuntimeFlags.h>,
              as it doesn't fit the normal idiomatic model.
            - Replace call to defaultMinimumZoomFontSize() with direct constant access.

        * page/SettingsDefaultValues.h: Added.
        * page/cocoa/SettingsDefaultValuesCocoa.mm: Added.

            Move default values from Settings to this new file.

        * page/cocoa/SettingsCocoa.mm:
        
            Move defaultTextAutosizingEnabled() out of here and into SettingsDefaultValuesCocoa.mm.
        
        * style/StyleTreeResolver.cpp:

            - Update for new scoping of defaultMaximumRenderTreeDepth.
            - Move defaultMaximumRenderTreeDepth from Settings here. This is the only use.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::forcedColorsAreInvertedAccessibilityValue const):
        (WebCore::InternalSettings::setForcedColorsAreInvertedAccessibilityValue):
        (WebCore::InternalSettings::forcedDisplayIsMonochromeAccessibilityValue const):
        (WebCore::InternalSettings::setForcedDisplayIsMonochromeAccessibilityValue):
        (WebCore::InternalSettings::forcedPrefersReducedMotionAccessibilityValue const):
        (WebCore::InternalSettings::setForcedPrefersReducedMotionAccessibilityValue):
        (WebCore::settingsToInternalSettingsValue): Deleted.
        (WebCore::internalSettingsToSettingsValue): Deleted.
        * testing/InternalSettings.h:
        
            Replace duplicate definition of ForcedAccessibilityValue with a using declaration
            and simplify code now that it doesn't need to map between the two enums.

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

        [iOS WK2] API test EditorStateTests.ContentViewHasTextInContentEditableElement is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=177698

        Reviewed by Ryosuke Niwa.

        The WebKit2 API test EditorStateTests.ContentViewHasTextInContentEditableElement is currently hitting
        intermittent failures on test runners. After inserting just an image in the editable element, we would expect
        that -hasText should return NO because the text content is an empty string, but we find that -hasText is YES.
        This is because we're bailing on an early return in computeEditableRootHasContentAndPlainText because the
        EditorState's PostLayoutData contains non-zero characters near the selection, which is incorrect.

        However, upon closer inspection, this is due to a latent bug in the charactersAroundPosition helper function.
        This function attempts to compute characters before and after the current selection by initializing a Vector
        of size 3 with the relevant character data, and then sets oneAfter, oneBefore and twoBefore to the UChar32
        values in the vector. However, in the case where there are less than three characters, we end up assigning
        the uninitialized values in the vector to one or more of oneAfter, oneBefore and twoBefore, which causes the
        helper added in r222654 to bail early when it should not.

        To fix this, we initialize the values in `characters` to 0 (which is the initial value for the 3 corresponding
        members in the PostLayoutData struct). We also turn `characters` into a UChar32 array on the stack, to avoid the
        heap allocations using a Vector<UChar32>.

        No new tests; fixes a flaky API test.

        * editing/VisibleUnits.cpp:
        (WebCore::charactersAroundPosition):

2017-09-30  Antti Koivisto  <antti@apple.com>

        Add makeWeakPtr for easier WeakPtr construction
        https://bugs.webkit.org/show_bug.cgi?id=177706

        Reviewed by Sam Weinig.

        Use it in render tree.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateEmbeddedObject):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::weakFactory const):
        (WebCore::RenderObject::createWeakPtr): Deleted.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::updateWidgetPosition):

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

        Share more pasteboard code between iOS and macOS and remove dependency on Settings
        https://bugs.webkit.org/show_bug.cgi?id=177700

        Reviewed by Wenson Hsieh.

        Moved more code from PasteboardIOS.mm and PasteboardMac.mm into PasteboardCocoa.mm to share code.

        This patch also removes the layering violation inadvertently introduced in r222595 whereby which
        Pasteboard code depends on Settings. To do this, this patch splits readStringForBindings is into
        readString and readStringInCustomData and typesForBindings into typesSafeForBindings and
        typesForLegacyUnsafeBindings, and moves the logic to decide whether a given type or string is read
        off of the native pasteboard entry or our custom data entry is moved to DataTransfer.

        No new tests since there should be no behavioral change.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::getData const): Moved the code to decide whether string is
        read off of custom data or native pasteboard from readStringForBindings.
        (WebCore::DataTransfer::types const): Ditto from typesForBindings.
        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::isSafeTypeForDOMToReadAndWrite): Moved into Pasteboard.
        * platform/Pasteboard.h:
        * platform/StaticPasteboard.cpp:
        (WebCore::StaticPasteboard::readString): Renamed from readStringForBindings.
        (WebCore::StaticPasteboard::readStringInCustomData): Added.
        (WebCore::StaticPasteboard::writeString):
        * platform/StaticPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::typesSafeForBindings): Extracted out of typesForBindings in PasteboardIOS.mm
        and PasteboardMac.mm.
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings): Ditto.
        (WebCore::Pasteboard::readString): Ditto.
        (WebCore::Pasteboard::readStringInCustomData): Ditto.
        (WebCore::Pasteboard::writeCustomData): Moved here from PasteboardIOS.mm and PasteboardCocoa.mm.
        (WebCore::Pasteboard::changeCount const): Ditto.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::typesSafeForBindings): Added.
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings): Renamed from readStringForBindings.
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::readStringInCustomData): Added.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writeCustomData): Moved to PasteboardCocoa.mm.
        (WebCore::Pasteboard::changeCount const): Ditto.
        (WebCore::Pasteboard::readPlatformValueAsString): Moved into Pasteboard.
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType): Ditto.
        (WebCore::Pasteboard::readStringForBindings): Moved to PasteboardCocoa.mm.
        (WebCore::Pasteboard::typesForBindings): Ditto.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::changeCount const): Moved to PasteboardCocoa.mm.
        (WebCore::Pasteboard::writeCustomData): Ditto.
        (WebCore::Pasteboard::readPlatformValueAsString): Moved into Pasteboard.
        (WebCore::Pasteboard::readStringForBindings): Moved to PasteboardCocoa.mm.
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType): Moved into Pasteboard.
        (WebCore::Pasteboard::typesForBindings): Moved to PasteboardCocoa.mm.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::typesSafeForBindings): Added.
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings): Renamed from readStringForBindings.
        (WebCore::Pasteboard::readString): Renamed from readStringForBindings.
        (WebCore::Pasteboard::readStringInCustomData): Added.
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::typesSafeForBindings): Added.
        (WebCore::PasteboardtypesForLegacyUnsafeBindings): Renamed from readStringForBindings.
        (WebCore::Pasteboard::readString): Renamed from readStringForBindings.
        (WebCore::Pasteboard::readStringInCustomData): Added.

2017-09-29  Antti Koivisto  <antti@apple.com>

        Use smart pointers for creating, adding and removing renderers
        https://bugs.webkit.org/show_bug.cgi?id=177603

        Reviewed by Zalan Bujtas.

        With this patch RenderObject ownership is consistently managed using RenderPtrs. It also
        clarifies that in-tree renderers are always owned by the parent renderer.

        - renderers are constructed with createRenderer<> which returns RenderPtr
        - addChild and related functions take RenderPtrs
        - removeChild is replaced with takeChild that returns a RenderPtr
        - only addChildInternal/takeChildInternal deal with raw ownder renderer pointers.

        There are still a few exception left, noted below, to be fixed later.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToContinuation):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::dropAnonymousBoxChild):
        (WebCore::RenderBlock::takeChild):
        (WebCore::RenderBlock::createAnonymousBlockWithStyleAndDisplay):
        (WebCore::RenderBlock::removeChild): Deleted.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        (WebCore::RenderBlock::createAnonymousBoxWithSameTypeAs const):
        (WebCore::RenderBlock::createAnonymousBlock const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addChild):
        (WebCore::RenderBlockFlow::takeChild):
        (WebCore::RenderBlockFlow::removeChild): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::splitAnonymousBoxesAroundChild):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::createAnonymousBoxWithSameTypeAs const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::takeChild):
        (WebCore::RenderButton::setText):
        (WebCore::RenderButton::removeChild): Deleted.
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        (WebCore::RenderElement::takeChild):
        (WebCore::RenderElement::removeAndDestroyChild):
        (WebCore::RenderElement::destroyLeftoverChildren):

            Keep the existing behavior and leak the firstLetter renderer. The comment claims they get destroyed by RenderTextFragment.
            To be cleaned up later.

        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::takeChildInternal):
        (WebCore::RenderElement::handleDynamicFloatPositionChange):
        (WebCore::RenderElement::removeChild): Deleted.
        (WebCore::RenderElement::removeChildInternal): Deleted.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::addChildIgnoringContinuation):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::willBeDestroyed):
        (WebCore::RenderFullScreen::wrapNewRenderer):
        (WebCore::RenderFullScreen::wrapExistingRenderer):

            Split wrapRenderer() into two functions, wrapNewRenderer() and wrapExistingRenderer().
            The first one deals with adding new renderers to the tree while the latter mutates
            existing render tree in-place.

        (WebCore::RenderFullScreen::unwrapRenderer):
        (WebCore::RenderFullScreen::createPlaceholder):
        (WebCore::RenderFullScreen::wrapRenderer): Deleted.
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::addChild):
        (WebCore::RenderGrid::takeChild):
        (WebCore::RenderGrid::removeChild): Deleted.
        * rendering/RenderGrid.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChild):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::addChildToContinuation):
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderInline.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createInnerBlock):
        (RenderMenuList::addChild):
        (RenderMenuList::takeChild):
        (RenderMenuList::setText):
        (RenderMenuList::removeChild): Deleted.
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy):
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):

            Keep the existing behavior and leak the placeholder renderer.
            To be cleaned up later.

        (WebCore::RenderMultiColumnFlow::handleSpannerRemoval):

            Keep the existing behavior and leak the placeholder renderer.
            To be cleaned up later.

        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::createAnonymous):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromParentAndDestroy):
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::removeFromParent): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::updateTextRenderer):
        * rendering/RenderRuby.cpp:
        (WebCore::createAnonymousRubyInlineBlock):
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsInline::takeChild):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::takeChild):
        (WebCore::RenderRubyAsInline::removeChild): Deleted.
        (WebCore::RenderRubyAsBlock::removeChild): Deleted.
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::takeChild):
        (WebCore::RenderRubyRun::createRubyBase const):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        (WebCore::RenderRubyRun::removeChild): Deleted.
        * rendering/RenderRubyRun.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::createTableWithStyle):
        (WebCore::RenderTable::createAnonymousWithParentRenderer):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::createAnonymousBoxWithSameTypeAs const):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::createTableCellWithStyle):
        (WebCore::RenderTableCell::createAnonymousWithParentRenderer):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::createAnonymousBoxWithSameTypeAs const):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        (WebCore::RenderTableRow::createTableRowWithStyle):
        (WebCore::RenderTableRow::createAnonymousWithParentRenderer):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::createAnonymousBoxWithSameTypeAs const):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::createTableSectionWithStyle):
        (WebCore::RenderTableSection::createAnonymousWithParentRenderer):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::createAnonymousBoxWithSameTypeAs const):
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addChild):
        (WebCore::RenderSVGContainer::takeChild):
        (WebCore::RenderSVGContainer::removeChild): Deleted.
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        (WebCore::RenderSVGInline::takeChild):
        (WebCore::RenderSVGInline::removeChild): Deleted.
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::addChild):
        (WebCore::RenderSVGRoot::takeChild):
        (WebCore::RenderSVGRoot::removeChild): Deleted.
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::addChild):
        (WebCore::RenderSVGText::takeChild):
        (WebCore::RenderSVGText::removeChild): Deleted.
        * rendering/svg/RenderSVGText.h:
        * style/RenderTreePosition.h:
        (WebCore::RenderTreePosition::insert):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createRenderer):
        (WebCore::createTextRenderer):
        * style/RenderTreeUpdaterFirstLetter.cpp:
        (WebCore::updateFirstLetterStyle):
        (WebCore::createFirstLetterRenderer):
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::createContentRenderers):
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow):

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

        Remove redundant RenderObject::selectionRoot and dependencies
        https://bugs.webkit.org/show_bug.cgi?id=177696

        Reviewed by Ryosuke Niwa.

        There's only one selection root (RenderView).

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionState):
        (WebCore::InlineTextBox::selectionStartEnd const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionRoot const): Deleted.
        (WebCore::RenderObject::selectionStartEnd const): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::isSelected const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRectsForLineBoxes):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::setSelectionState):
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.h:

2017-09-29  Chris Dumez  <cdumez@apple.com>

        http/tests/preconnect/link-rel-preconnect-https.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=177673

        Reviewed by Alex Christensen.

        No new tests, unskipped test that is now passing consistently.

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * loader/LoaderStrategy.h:

2017-09-29  Daniel Bates  <dabates@apple.com>

        Extract logic to compute text to render into common function
        https://bugs.webkit.org/show_bug.cgi?id=177607

        Reviewed by Zalan Bujtas.

        Currently we duplicate the logic to compute the text to render
        throughout InlineTextBox. Instead we should move this common
        code into a member function. This will allow us to audit the
        the code paths that render text and ensure such code paths
        account for hyphenation and combined text, if applicable.

        Note that a TextRun does not own the text. The caller owns it.

        No functionality changed. So, no new tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect const): Modified to
        use text() and createTextRun() to compute the text to render
        and the text run for it.
        (WebCore::InlineTextBox::paint): Ditto.
        (WebCore::InlineTextBox::paintSelection): Ditto. Additionally query
        lineStyle() for the style of the line instead of requiring it to be
        passed as an argument.
        (WebCore::InlineTextBox::paintTextSubrangeBackground): Modified
        to use text() and createTextRun() to compute the text to render
        and the text run for it.
        (WebCore::InlineTextBox::paintDocumentMarker): Ditto.
        (WebCore::InlineTextBox::offsetForPosition const): Ditto.
        (WebCore::InlineTextBox::positionForOffset const): Ditto.
        (WebCore::InlineTextBox::createTextRun const): Added; formerly named constructTextRun.
        (WebCore::InlineTextBox::text const): Added.
        (WebCore::InlineTextBox::substringToRender const): Deleted.
        (WebCore::InlineTextBox::hyphenatedStringForTextRun const): Deleted.
        (WebCore::InlineTextBox::constructTextRun const): Deleted.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::substringToRender): Deleted.
        (WebCore::InlineTextBox::hyphenatedStringForTextRun): Deleted.
        (WebCore::InlineTextBox::constructTextRun): Deleted; renamed to createTextRun.

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

        Remove SelectionSubtreeRoot::RenderSubtreesMap
        https://bugs.webkit.org/show_bug.cgi?id=177685

        Reviewed by Andy Estes.

        This is in preparation of removing redundant SelectionSubtreeRoot.
        (Now that we removed regions, RenderView is the only selection root) 

        No change in functionality.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds const):
        (WebCore::RenderView::subtreeSelectionBounds const):
        (WebCore::RenderView::repaintSelection const):
        (WebCore::RenderView::repaintSubtreeSelection const):
        (WebCore::RenderView::setSelection):
        (WebCore::isValidObjectForNewSelection):
        (WebCore::RenderView::clearSubtreeSelection const):
        (WebCore::RenderView::applySubtreeSelection):
        (WebCore::RenderView::updateSelectionForSubtrees): Deleted.
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.h:

2017-09-29  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Extract a features to manage HTTP communication from ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=175148

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/curl/CurlRequest.cpp: Added.
        (WebCore::CurlRequest::CurlRequest):
        (WebCore::CurlRequest::setUserPass):
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::startWithJobManager):
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::suspend):
        (WebCore::CurlRequest::resume):
        (WebCore::CurlRequest::callDelegate):
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::willSetupSslCtx):
        (WebCore::CurlRequest::willSendData):
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::didCancelTransfer):
        (WebCore::CurlRequest::resolveBlobReferences):
        (WebCore::CurlRequest::setupPUT):
        (WebCore::CurlRequest::setupPOST):
        (WebCore::CurlRequest::setupFormData):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        (WebCore::CurlRequest::invokeDidReceiveResponse):
        (WebCore::CurlRequest::setPaused):
        (WebCore::CurlRequest::willSetupSslCtxCallback):
        (WebCore::CurlRequest::willSendDataCallback):
        (WebCore::CurlRequest::didReceiveHeaderCallback):
        (WebCore::CurlRequest::didReceiveDataCallback):
        * platform/network/curl/CurlRequest.h: Added.
        (WebCore::CurlRequest::~CurlRequest):
        (WebCore::CurlRequest::setDelegate):
        (WebCore::CurlRequest::isSyncRequest):
        (WebCore::CurlRequest::getNetworkLoadMetrics):
        * platform/network/curl/CurlRequestDelegate.h: Added.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::~ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::start):
        (WebCore::ResourceHandleCurlDelegate::cancel):
        (WebCore::ResourceHandleCurlDelegate::setDefersLoading):
        (WebCore::ResourceHandleCurlDelegate::setAuthentication):
        (WebCore::ResourceHandleCurlDelegate::dispatchSynchronousJob):
        (WebCore::ResourceHandleCurlDelegate::createCurlRequest):
        (WebCore::ResourceHandleCurlDelegate::cancelledOrClientless):
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveBuffer):
        (WebCore::ResourceHandleCurlDelegate::curlDidComplete):
        (WebCore::ResourceHandleCurlDelegate::curlDidFailWithError):
        (WebCore::ResourceHandleCurlDelegate::response):
        (WebCore::ResourceHandleCurlDelegate::getCredential):
        (WebCore::ResourceHandleCurlDelegate::retain): Deleted.
        (WebCore::ResourceHandleCurlDelegate::release): Deleted.
        (WebCore::ResourceHandleCurlDelegate::setupTransfer): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didCompleteTransfer): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didCancelTransfer): Deleted.
        (WebCore::ResourceHandleCurlDelegate::setupAuthentication): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didReceiveAllHeaders): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didReceiveContentData): Deleted.
        (WebCore::ResourceHandleCurlDelegate::handleLocalReceiveResponse): Deleted.
        (WebCore::ResourceHandleCurlDelegate::prepareSendData): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didFinish): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didFail): Deleted.
        (WebCore::ResourceHandleCurlDelegate::setupPOST): Deleted.
        (WebCore::ResourceHandleCurlDelegate::setupPUT): Deleted.
        (WebCore::ResourceHandleCurlDelegate::getFormElementsCount): Deleted.
        (WebCore::ResourceHandleCurlDelegate::setupFormData): Deleted.
        (WebCore::ResourceHandleCurlDelegate::applyAuthentication): Deleted.
        (WebCore::ResourceHandleCurlDelegate::getNetworkLoadMetrics): Deleted.
        (WebCore::ResourceHandleCurlDelegate::willSetupSslCtx): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didReceiveData): Deleted.
        (WebCore::ResourceHandleCurlDelegate::willSendData): Deleted.
        (WebCore::ResourceHandleCurlDelegate::willSetupSslCtxCallback): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeaderCallback): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didReceiveDataCallback): Deleted.
        (WebCore::ResourceHandleCurlDelegate::willSendDataCallback): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-29  Chris Dumez  <cdumez@apple.com>

        Split some logic out of VisitedLinkStore and make it reusable
        https://bugs.webkit.org/show_bug.cgi?id=177575

        Reviewed by Alex Christensen.

        Rename LinkHash to SharedStringHash to make it more reusable.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleResolver.cpp:
        * dom/VisitedLinkState.cpp:
        (WebCore::linkHashForElement):
        (WebCore::VisitedLinkState::invalidateStyleForLink):
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * dom/VisitedLinkState.h:
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::visitedLinkHash const):
        * loader/EmptyClients.cpp:
        * loader/HistoryController.cpp:
        (WebCore::addVisitedLink):
        * page/Page.cpp:
        (WebCore::Page::invalidateStylesForLink):
        * page/Page.h:
        * page/VisitedLinkStore.cpp:
        (WebCore::VisitedLinkStore::invalidateStylesForLink):
        * page/VisitedLinkStore.h:
        * platform/SharedStringHash.cpp: Renamed from Source/WebCore/platform/LinkHash.cpp.
        (WebCore::needsTrailingSlash):
        (WebCore::computeSharedStringHashInline):
        (WebCore::computeSharedStringHash):
        * platform/SharedStringHash.h: Renamed from Source/WebCore/platform/LinkHash.h.
        (WebCore::SharedStringHashHash::hash):
        (WebCore::SharedStringHashHash::equal):
        (WebCore::SharedStringHashHash::avoidDeletedValue):

2017-09-29  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Fix build after rev 222610
        https://bugs.webkit.org/show_bug.cgi?id=177674

        Reviewed by Per Arne Vollan.

        No new tests. No change in behavior.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:

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

        [iOS] Remove unused pre-iOS 11 codepaths for writing to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=177669

        Reviewed by Tim Horton.

        Now that PlatformPasteboardIOS codepaths for writing data on drag and copy have been unified to both use
        NSItemProviders, we can remove the legacy codepath that called -setItems on UIPasteboard, since nothing uses it
        any more. No change in behavior.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::allowReadingURLAtIndex const):
        (WebCore::PlatformPasteboard::readURL):
        (WebCore::richTextRepresentationsForPasteboardWebContent): Deleted.

2017-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Image pasting is not working on tineye.com / gmail.com / GitHub.com due to lack of support for DataTransfer.items
        https://bugs.webkit.org/show_bug.cgi?id=170449
        <rdar://problem/31432525>

        Reviewed by Wenson Hsieh.

        The bug was caused by image types in NSPasteboard or UIPasteboard not being treated as file items in dataTransfer.
        Because there is no Web API to get binary data out of dataTransfer unlike text data, we need to treat any image
        data as files even if they're entirely in the memory.

        This patch introduces the notion of pasteboard types to be treated as files and expose them on dataTransfer.files
        as well as dataTransfer.items of type "file". Because in-memory images are stored as TIFF in macOS and websites
        don't typically support image/tiff, we convert all such in-memory TIFF images into PNG images ourselves for
        a better web compatibility. This is done inside read(PasteboardFileReader&) in PasteboardCocoa.mm.

        Note that PasteboardFileReader cannot directly have RefPtr<File> as a member variable as code in WebCore/platform
        including Pasteboard code is not supposed to depend on WebCore types. WebCorePasteboardFileReader, a subclass of
        PasteboardFileReader was introduced to resolve this reverse dependency.

        In addition, this patch removes the restriction on dataTransfer.items that it only includes files of the supported
        MIME types. This was unwarranted since 1. we don't have any restriction on what an user can drag & drop into a web
        page via input element so there is no security benefit in this, and 2. the user should be able to copy & paste
        whatever file he/she desires regardless of the MIME type on websites like Google Drive.

        Tests: PasteImage

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore/PlatformMac.cmake:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::types const): Now excludes image/gif, image/png, image/jpeg, and image/tiff.
        (WebCore::DataTransfer::files const): Add fake files we create for in-memory images but only when there are no real
        files in the pasteboard since it's expensive to copy image data across UI/Web processes to create a blob URL.
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::ensureItems const): Just expose every file type. If the user had decided to paste
        a file, it's okay for the page to access that file regardless of whether it's a zip file, JPEG image, etc...
        * editing/WebCorePasteboardFileReader.cpp:
        (WebCorePasteboardFileReader::~WebCorePasteboardFileReader):
        (WebCorePasteboardFileReader::read):
        * editing/WebCorePasteboardFileReader.h:
        (WebCorePasteboardFileReader):
        * platform/Pasteboard.cpp:
        (WebCore::PasteboardImage::PasteboardImage): Moved from platform specific translation units.
        (WebCore::PasteboardImage::~PasteboardImage): Ditto.
        * platform/Pasteboard.h:
        (PasteboardFileReader): Added.
        (* platform/StaticPasteboard.h:
        (StaticPasteboard::typesForBindings): Added.
        (StaticPasteboard::typesTreatedAsFiles): Added. Returns an empty list we don't support the web content writing image
        files into pasteboard at the moment.
        * platform/cocoa/PasteboardCocoa.mm: Added.
        (WebCore::PasteboardWebContent::PasteboardWebContent): Moved from PasteboardMac.mm and PasteboardIOS.mm.
        (WebCore::PasteboardWebContent::~PasteboardWebContent):
        (WebCore::cocoaTypeToImageType): Added.
        (WebCore::imageTypeToMIMEType): Added. Pretends to have image/png when the Cocoa type is image/tiff since most of
        websites don't support image/tiff.
        (WebCore::imageTypeToFakeFilename): Added.
        (WebCore::mimeTypeToImageType): Added.
        (WebCore::Pasteboard::shouldTreatCocoaTypeAsFile): Added. Pasteboard::typesForBindings excludes the type for which
        this function returns true.
        (WebCore::Pasteboard::typesTreatedAsFiles): Returns the list of all in-memory image types in the pasteboard.
        (WebCore::Pasteboard::read): Added. On macOS, we convert TIFF to PNG for web compatibility. We don't do this rather
        memory intensive coercion on iOS where most of apps like Photos put PNG file into the pasteboard in the first place.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::PasteboardImage::PasteboardImage): Deleted.
        (WebCore::PasteboardImage::~PasteboardImage): Deleted.
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::typesForBindings): Renamed from types.
        (WebCore::Pasteboard::typesTreatedAsFiles):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::Pasteboard::typesForBindings):
        (WebCore::PasteboardWebContent::PasteboardWebContent): Deleted.
        (WebCore::PasteboardWebContent::~PasteboardWebContent): Deleted.
        (WebCore::PasteboardImage::PasteboardImage): Deleted.
        (WebCore::PasteboardImage::~PasteboardImage): Deleted.
        (WebCore::Pasteboard::types): Deleted.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType): Add "Files" to dataTransfer.types when there is an in-memory
        image type in the pasteboard.
        * platform/mac/PasteboardMac.mm:
        (WebCore::PasteboardWebContent::PasteboardWebContent): Deleted.
        (WebCore::PasteboardWebContent::~PasteboardWebContent): Deleted.
        (WebCore::PasteboardImage::PasteboardImage): Deleted.
        (WebCore::PasteboardImage::~PasteboardImage): Deleted.
        (WebCore::addHTMLClipboardTypesForCocoaType): Moved the check for the legacy NeXT plain text check here. Also add
        "Files" to dataTransfer.types when there is an in-memory image type in the pasteboard.
        (WebCore::Pasteboard::typesForBindings): Renamed from types.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType): Ditto to add "Files".
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::typesForBindings): Renamed from types.
        (WebCore::Pasteboard::typesTreatedAsFiles):
        (WebCore::Pasteboard::read):
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::typesForBindings): Renamed from types.
        (WebCore::Pasteboard::typesTreatedAsFiles):
        (WebCore::Pasteboard::read):

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

        [iOS WK2] Implement -[WKContentView hasText] for compatibility with the UITextInput protocol
        https://bugs.webkit.org/show_bug.cgi?id=177662
        <rdar://problem/33410373>

        Reviewed by Tim Horton.

        Adds a new TextIterator helper function to determine whether a Range has any plain text.

        Tests: EditorStateTests.ContentViewHasTextInContentEditableElement
               EditorStateTests.ContentViewHasTextInTextarea

        * editing/TextIterator.cpp:
        (WebCore::hasAnyPlainText):

        Add a new helper to determine whether a Range contains any plain text. While inspired by and very similar to the
        plainText() helper function, this variant does not create a new string buffer when invoked, and is therefore
        more efficient for the purposes of determining whether there is any plain text at all.

        * editing/TextIterator.h:

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

        Add WeakPtr support to RenderObject.
        https://bugs.webkit.org/show_bug.cgi?id=177429
        <rdar://problem/34625212>

        Reviewed by Dean Jackson.

        This is in preparation to start using weak pointers extensively in rendering.

        No change in functionality.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateEmbeddedObject):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::createWeakPtr):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        (WebCore::RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::createWeakPtr): Deleted.

2017-09-29  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer] Refactor media player to use MediaTime consistently
        https://bugs.webkit.org/show_bug.cgi?id=174817

        Reviewed by Xabier Rodriguez-Calvar.

        Make consistent use of the MediaTime class in the GStreamer media
        player implementations.

        This patch is authored by Charlie Turner <cturner@igalia.com> plus
        some minor modifications by Enrique: migration of m_cachedPosition,
        usage of m_seekTime as MediaTime in the MSE player and more logging
        using toString().

        Covered by existing tests.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::toGstUnsigned64Time): Scales MediaTime to the precision used
        by GStreamer and returns a value compatible with GstClockTime.
        (WebCore::toGstClockTime): Deleted.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        (WebCore::toGstClockTime): Inlined, now it takes MediaTime and converts
        to GstClockTime.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        Several changes to use MediaTime instead of float and to log MediaTime
        values converting them toString().
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        (WebCore::MediaPlayerPrivateGStreamer::durationMediaTime const):
        (WebCore::MediaPlayerPrivateGStreamer::currentMediaTime const):
        (WebCore::MediaPlayerPrivateGStreamer::seek): Uses MediaTime.
        (WebCore::MediaPlayerPrivateGStreamer::doSeek):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::buffered const):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::maxMediaTimeSeekable const):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeLoaded const):
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress const):
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        (WebCore::MediaPlayerPrivateGStreamer::durationChanged):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable const): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Changed
        seek(), playBackposition(), m_cachedPosition, m_durationAtEOS,
        m_seekTime and m_timeOfOverlappingSeek to be of MediaTime type.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Prefer the methods based on MediaTime over those based on fload/double.
        (WebCore::MediaPlayerPrivateGStreamerBase::maxTimeLoaded const):
        * platform/graphics/gstreamer/mse/GStreamerMediaSample.cpp:
        (WebCore::GStreamerMediaSample::offsetTimestampsBy): toGstClockTime()
        now can handle MediaTime.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        Several changes to use MediaTime instead of float and to log MediaTime
        values converting them toString().
        (WebCore::MediaPlayerPrivateGStreamerMSE::seek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::notifySeekNeedsDataForTime):
        (WebCore::MediaPlayerPrivateGStreamerMSE::doSeek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::maybeFinishSeek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::isTimeBuffered const):
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):
        (WebCore::MediaPlayerPrivateGStreamerMSE::currentMediaTime const):
        (WebCore::MediaPlayerPrivateGStreamerMSE::maxTimeSeekable const):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        seek() now takes a MediaTime argument.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::enqueueSample): Use MediaTime values in
        MediaSample.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcQueryWithParent): Use MediaTime values in
        durationMediaTime().

2017-09-28  Sam Weinig  <sam@webkit.org>

        Re-write Settings generation in python for some reason
        https://bugs.webkit.org/show_bug.cgi?id=177621

        Reviewed by Tim Horton.

        Re-writes and splits up generation of InternalSettingsGenerated.{h|cpp|idl}
        and SettingsMacros.h in python in preparation for larger changes.

        * DerivedSources.make:
        * Scripts/GenerateSettings: Added.
        * Scripts/GenerateSettings.py: Added.
        * Scripts/GenerateSettings/GenerateInternalSettingsHeaderFile.py: Added.
        * Scripts/GenerateSettings/GenerateInternalSettingsIDLFile.py: Added.
        * Scripts/GenerateSettings/GenerateInternalSettingsImplementationFile.py: Added.
        * Scripts/GenerateSettings/GenerateSettings.py: Added.
        * Scripts/GenerateSettings/GenerateSettingsMacrosHeader.py: Added.
        * Scripts/GenerateSettings/Settings.py: Added.
        * Scripts/GenerateSettings/__init__.py: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * page/make_settings.pl: Removed.

2017-09-28  Don Olmstead  <don.olmstead@sony.com>

        Simplify PLATFORM ifdefs within Editor around writing selections
        https://bugs.webkit.org/show_bug.cgi?id=177624

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * editing/Editor.cpp:
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:

2017-09-28  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] object:state-changed notifications missing for multiple ARIA attributes
        https://bugs.webkit.org/show_bug.cgi?id=177542

        Add new notification types to AXObjectCache in order to support the notifications
        needed, post the notifications to all platforms, emit the signals for ATK.

        Reviewed by Chris Fleizach.

        Tests: accessibility/gtk/aria-disabled-changed-notification.html
               accessibility/gtk/aria-expanded-changed-notification.html
               accessibility/gtk/aria-pressed-changed-notification.html
               accessibility/gtk/aria-readonly-changed-notification.html
               accessibility/gtk/aria-required-changed-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAttributeChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

2017-09-28  Daniel Bates  <dabates@apple.com>

        Remove TextRun::setCharactersLength() and TextRun::charactersLength()
        https://bugs.webkit.org/show_bug.cgi?id=177620

        Reviewed by Zalan Bujtas.

        The purpose of TextRun::setCharactersLength() and TextRun::charactersLength() predate the
        use of WidthIterator to safely iterate over characters in a TextRun that may contain
        surrogate halves due to how it was created (without thought of surrogate pairs). Historically
        TextRun::charactersLength() complemented TextRun::length() and represented the length of the
        text to render ignoring and respecting truncation, respectively. We not longer need either
        of these member functions with the advent of WidthIterator.

        No functionality changed. So, no new tests.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::TextLayout::constructTextRun):
        * platform/graphics/TextRun.cpp: Remove one unsigned field from ExpectedTextRunSize as we
        reduced the size of TextRun with the removal of TextRun::m_charactersLength.
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::charactersLength const): Deleted.
        (WebCore::TextRun::setCharactersLength): Deleted.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun const):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::constructTextRun): Deleted overload that took const RenderStyle& style
        and StringView.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache const):
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::width const):
        * rendering/line/BreakingContext.h:
        (WebCore::textWidth):
        (WebCore::tryHyphenating):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun const):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::currentCharacterStartsSurrogatePair const): Use TextRun::length().
        (WebCore::SVGTextMetricsBuilder::advance): Ditto.

2017-09-28  Tim Horton  <timothy_horton@apple.com>

        Remove constant() in favor of env()
        https://bugs.webkit.org/show_bug.cgi?id=177581
        <rdar://problem/34701321>

        Reviewed by Dean Jackson.

        No new tests, removing a feature.

        * css/CSSValueKeywords.in:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange const):
        (WebCore::CSSVariableData::resolveTokenRange const):
        * css/parser/CSSVariableParser.cpp:
        (WebCore::classifyBlock):

2017-09-28  Brent Fulgham  <bfulgham@apple.com>

        Add ports 6679 and 6697 (IRC SSL) to port blacklist
        https://bugs.webkit.org/show_bug.cgi?id=177544
        <rdar://problem/34666525>

        Reviewed by Alex Christensen.

        Test: security/block-test.html

        * platform/URL.cpp:
        (WebCore::portAllowed): Also block port 6679.

2017-09-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, speculative Windows build fix after r222613.

        * dom/StringCallback.idl:

2017-09-28  Zalan Bujtas  <zalan@apple.com>

        Small cleanup in RenderMenuList::didUpdateActiveOption
        https://bugs.webkit.org/show_bug.cgi?id=177610

        Reviewed by Dean Jackson.

        No change in functionality.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        (RenderMenuList::didUpdateActiveOption):
        * rendering/RenderMenuList.h:

2017-09-28  Ross Kirsling  <ross.kirsling@sony.com>

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

        Reviewed by Alex Christensen.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/UserActivity.cpp:
        (WebCore::UserActivity::UserActivity):
        (WebCore::UserActivity::hysteresisUpdated):
        * platform/UserActivity.h:
        * platform/graphics/cairo/BackingStoreBackendCairoImpl.cpp:
        (WebCore::BackingStoreBackendCairoImpl::BackingStoreBackendCairoImpl):
        * platform/graphics/cairo/BackingStoreBackendCairoImpl.h:
        * platform/ios/WebSQLiteDatabaseTrackerClient.h:
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        (WebCore::WebSQLiteDatabaseTrackerClient::WebSQLiteDatabaseTrackerClient):
        (WebCore::WebSQLiteDatabaseTrackerClient::hysteresisUpdated):

2017-09-28  Chris Dumez  <cdumez@apple.com>

        Add support for <link rel=preconnect>
        https://bugs.webkit.org/show_bug.cgi?id=177474
        <rdar://problem/33141380>

        Reviewed by Alex Christensen.

        Add support for <link rel=preconnect>:
        - https://w3c.github.io/resource-hints/#preconnect

        It is currently only enabled for WK2 on MacOS High Sierra+
        and iOS 11+.

        Tests: fast/dom/HTMLLinkElement/preconnect-support.html
               http/tests/preconnect/link-rel-preconnect-http.html
               http/tests/preconnect/link-rel-preconnect-https.html

        * bindings/js/JSDOMExceptionHandling.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeaderContent):
        * bindings/scripts/IDLAttributes.json:
        * dom/Document.cpp:
        (WebCore::Document::addConsoleMessage):
        (WebCore::Document::setConsoleMessageListener):
        * dom/Document.h:
        * dom/StringCallback.idl:
        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::DOMTokenList):
        (WebCore::DOMTokenList::supports):
        * html/DOMTokenList.h:
        (WebCore::DOMTokenList::DOMTokenList):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::sandbox):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::relList):
        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::LinkRelAttribute):
        (WebCore::LinkRelAttribute::isSupported):
        * html/LinkRelAttribute.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader):
        (WebCore::LinkLoader::loadLink):
        * loader/LoaderStrategy.h:
        * page/Settings.in:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::setConsoleMessageListener):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-09-28  Zalan Bujtas  <zalan@apple.com>

        AX: Defer RenderListBox selectionChanged event until after layout is done.
        https://bugs.webkit.org/show_bug.cgi?id=177589
        <rdar://problem/34705785>

        Reviewed by Chris Fleizach.

        Defer AX update when the selection changed event is followed by a layout.

        Covered by existing tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::deferSelectedChildrenChangedIfNeeded):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::deferSelectedChildrenChangedIfNeeded):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::selectionChanged):

2017-09-28  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Remove the cairo_glyph_t complexity from GlyphBuffer
        https://bugs.webkit.org/show_bug.cgi?id=177598

        Reviewed by Carlos Garcia Campos.

        Remove the decade-old use of cairo_glyph_t as the underlying type for
        Glyph. The former spans 24 bytes in size, while the latte is just 2
        bytes. The x and y coordinate attributes of cairo_glyph_t were only
        used in FontCascade::drawGlyphs() implementation, where they were
        overridden even if the same GlyphBuffer object was used here repeatedly.

        FontCascade::drawGlyphs() now creates a new Vector<cairo_glyph_t> object
        and fills it only with the glyph index and coordinates data for glyphs
        that will actually be drawn. This will likely in the future be leveraged
        to pack the necessary data and perform the drawing operations in
        parallelized tasks. GlyphBuffer usages that before required USE(CAIRO)
        special-casing can now be simplified.

        This also removes the need for <cairo.h> header inclusion in the
        GlyphBuffer.h header. This further removes Cairo header inclusion in
        roughly 600 build targets.

        No new tests -- no change in behavior.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText const):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt const):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::drawGlyphsToContext):
        (WebCore::drawGlyphsShadow):
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawGlyphs::generateGlyphBuffer const):

2017-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rolling out r222606.

        The debug assertion hit in these API tests should be fixed by
        r222608.

        Reverted changeset:

        "REGRESSION(r222595): Assertion failure in
        _preLoadedDataConformingToType"
        https://bugs.webkit.org/show_bug.cgi?id=177599
        http://trac.webkit.org/changeset/222606

2017-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] DataTransfer DataInteractionTests debug assert under -_preLoadedDataConformingToType:forItemProviderAtIndex:
        https://bugs.webkit.org/show_bug.cgi?id=177594

        Reviewed by Tim Horton.

        Currently, some API tests added in r222595 currently hit debug assertions under -preloadedDataConformingToType:
        forItemProviderAtIndex:. This is because the page may call DataTransfer.types, which now calls into
        PlatformPasteboard::typesSafeForDOMToReadAndWrite(). This calls on the AbstractPasteboard (either the
        UIPasteboard or WebItemProviderPasteboard, in the case of drag and drop) to fetch the custom WebKit pasteboard
        data blob, if it exists. For WebItemProviderPasteboard, this ends up calling into -[WebItemProviderPasteboard
        _preLoadedDataConformingToType:forItemProviderAtIndex:], which was previously only called after loading data off
        of the item providers. There's an existing sanity check in this preloaded data helper to make sure that the
        number of load results is equal to the number of item providers loaded from, but this sanity check only makes
        sense *after* the drop has happened, not before, since we should only attempt to read dropped data after any
        data at all has been dropped.

        We need to check whether or not this custom data blob exists in PlatformPasteboard::typesSafeForDOMToReadAndWrite
        to fetch the list of DOM-exposed types to propagate back to the page. So to fix this, we make the helper methods
        for fetching dropped data (-dataForPasteboardType:inItemSet: and -valuesForPasteboardType:inItemSet:) fail
        gracefully when invoked prior to drop, when PlatformPasteboard::typesSafeForDOMToReadAndWrite is invoked.

        No new tests; fixes iOS drag and drop API tests that currently hit this debug assertion.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard dataForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):

2017-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r222595): Assertion failure in _preLoadedDataConformingToType
        https://bugs.webkit.org/show_bug.cgi?id=177599

        Temporarily remove the debug assertion to make API tests not crash since the relevant API tests are passing.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard _preLoadedDataConformingToType:forItemProviderAtIndex:]):

2017-09-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [REGRESSION] word-spacing property is incorrectly applied
        https://bugs.webkit.org/show_bug.cgi?id=142086
        <rdar://problem/19985240>

        Reviewed by Zalan Bujtas.

        word-spacing property isn't applied to text nodes with starting
        with '\n' if the kerning enabled. In Bug 165796, only ' ' and '\t'
        are treated for word-spacing, but '\n'. It should be treated as
        well.

        Test: fast/text/word-space-between-inlines.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Use
        FontCascade::treatAsSpace() instead of checking explicitly by
        comparing with ' ' and '\t'.

2017-09-27  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Remove unnecessary cairo.h includes
        https://bugs.webkit.org/show_bug.cgi?id=177540

        Reviewed by Carlos Garcia Campos.

        Drop unnecessary includes of the cairo.h header from the Font.h,
        FontPlatformData.h and Pattern.h headers. For the former two the
        header isn't required, while in the last one we can use a forward
        declaration for the cairo_pattern_t type instead of including
        the whole Cairo headers to have that available.

        * platform/graphics/Font.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/Pattern.h:

2017-09-27  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Drop cairo_matrix_t conversion operators for AffineTransform, TransformationMatrix
        https://bugs.webkit.org/show_bug.cgi?id=177539

        Reviewed by Carlos Garcia Campos.

        Remove the cairo_matrix_t conversion operators from the AffineTransform
        and TransformationMatrix classes. These are rarely used, but enforce
        including the cairo.h header in both headers, which leads to the Cairo
        headers being included in around 800 build targets.

        Instead, the toCairoMatrix() function is added to CairoUtilities.h that
        creates a cairo_matrix_t object for the given AffineTransform. No
        toCairoMatrix() is needed for TransformationMatrix since objects of
        that type aren't converted to cairo_matrix_t anywhere in the codebase.

        This patch excludes unnecessary Cairo headers from about 550 build
        targets (with those headers being included in the other affected 250
        targets by some other header inclusion chain). CairoUtilities.h header
        is now included where necessary to make toCairoMatrix() available, and
        duplicated cairo.h inclusions are removed.

        No new tests -- no change in behavior.

        * editing/gtk/EditorGtk.cpp: Explicitly include <cairo.h> since it's
        necessary for Cairo operations used there.
        * platform/Cairo.cmake:
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::drawPatternToCairoContext):
        (WebCore::toCairoMatrix):
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformGradient):
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setCTM):
        * platform/graphics/cairo/PathCairo.cpp: No need to include AffineTransform.h.
        (WebCore::Path::addPath):
        (WebCore::Path::transform):
        * platform/graphics/cairo/PatternCairo.cpp: Ditto.
        (WebCore::Pattern::createPlatformPattern const):
        * platform/graphics/cairo/TransformationMatrixCairo.cpp: Removed.
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.h:

2017-09-27  Alex Christensen  <achristensen@webkit.org>

        Add WKContentRuleList notify action type
        https://bugs.webkit.org/show_bug.cgi?id=177013
        <rdar://problem/31073936>

        Reviewed by Darin Adler.

        Covered by new API tests.

        * contentextensions/ContentExtensionActions.h:
        (WebCore::ContentExtensions::hasStringArgument):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::resolvePendingDisplayNoneActions):
        (WebCore::ContentExtensions::serializeActions):
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        (WebCore::ContentExtensions::Action::deserializeType):
        (WebCore::ContentExtensions::Action::serializedLength):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForPingLoad):
        (WebCore::ContentExtensions::applyBlockedStatusToRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/PingLoader.cpp:
        (WebCore::processContentExtensionRulesForLoad):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::applyBlockedStatus):
        * loader/cache/CachedResourceRequest.h:
        * page/ChromeClient.h:

2017-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal build after r222596 and r222595.

        Guarding code in PlatformPasteboardIOS.mm TARGET_OS_IPHONE did not have the intended effect.

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

2017-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal build after r222595.

        Add missing iOS compiler guards.

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

2017-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Drag event DataTransfer has unexpected types "dyn.ah62d4..."
        https://bugs.webkit.org/show_bug.cgi?id=172526
        <rdar://problem/32396081>

        Reviewed by Ryosuke Niwa.

        Currently, the pasteboard types we expose to web content are simply the types that appear on the platform
        pasteboard (i.e. the general NSPasteboard on Mac, and either the general UIPasteboard or a UIDragSession's
        NSItemProviders on iOS). This leads to DataTransfer.types exposing many private pasteboard types written by apps
        around the system to the page, such as dynamic UTIs, CorePasteboardFlavorTypes, or the "Apple WebKit dummy
        pasteboard type". These are not only confusing and not useful for web content (since they mostly hold values of
        empty string anyways), but can additionally pose privacy concerns by exposing information meant only for native
        applications to unvetted web content.

        To address this problem, other browsers (e.g. Chrome and Firefox on Mac) white-list MIME types in DataTransfer's
        list of types. By default, when dragging or copying, these are "text/plain", "text/html" and "text/uri-list".
        However, this policy alone is insufficient, because the page may also supply its own types, in which case our
        naive whitelist would prevent us from delivering them to the page. To address this additional constraint, both
        Chrome and Firefox write any custom data supplied by the page to custom pasteboard UTIs
        (org.chromium.drag-dummy-type and org.mozilla.custom-clipdata, respectively). The corresponding data is a map
        of custom UTI => custom data supplied by the page; upon drop or paste, this mapping is consulted if the page
        calls getData() with a custom UTI.

        This patch adopts this same approach in WebKit, and introduces the com.apple.WebKit.custom-pasteboard-data UTI
        (refer to per-method comments below for more information). These changes are covered by 18 new layout and API
        tests, as well as existing drag-and-drop tests.

        Tests: editing/pasteboard/data-transfer-get-data-on-drop-custom.html
               editing/pasteboard/data-transfer-get-data-on-drop-plain-text.html
               editing/pasteboard/data-transfer-get-data-on-drop-rich-text.html
               editing/pasteboard/data-transfer-get-data-on-drop-url.html
               editing/pasteboard/data-transfer-get-data-on-paste-custom.html
               editing/pasteboard/data-transfer-get-data-on-paste-plain-text.html
               editing/pasteboard/data-transfer-get-data-on-paste-rich-text.html
               DataInteractionTests.DataTransferGetDataWhenDroppingPlainText
               DataInteractionTests.DataTransferGetDataWhenDroppingCustomData
               DataInteractionTests.DataTransferGetDataWhenDroppingURL
               DataInteractionTests.DataTransferGetDataWhenDroppingImageWithFileURL
               DataInteractionTests.DataTransferGetDataWhenDroppingRespectsPresentationStyle
               DataInteractionTests.DataTransferSetDataCannotWritePlatformTypes
               DataInteractionTests.DataTransferGetDataCannotReadPrivatePlatformTypes
               UIPasteboardTests.DataTransferGetDataWhenPastingURL
               UIPasteboardTests.DataTransferGetDataWhenPastingPlatformRepresentations
               UIPasteboardTests.DataTransferSetDataCannotWritePlatformTypes
               UIPasteboardTests.DataTransferGetDataCannotReadPrivatePlatformTypes

        * CMakeLists.txt:

        Add Pasteboard.cpp to the WebCore CMakeList.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::getData const):
        (WebCore::DataTransfer::createForDragStartEvent):

        Make a new static helper function to create a StaticPasteboard-backed DataTransfer when dispatching a dragstart
        event. Any data supplied by the page will be written to the static pasteboard of this DataTransfer.

        (WebCore::DataTransfer::moveDragState):

        Add a new helper on DataTransfer to transfer the data required to initiate a drag from one DataTransfer to
        another. This is used in EventHandler to transfer the contents of the temporary DataTransfer modified by the
        page during the dragstart event over to the DataTransfer used for the rest of the drag initiation codepath,
        which is actually connected to the platform. This includes committing the contents of the other
        DataTransfer's StaticPasteboard to the new platform-connected Pasteboard.

        (WebCore::DataTransfer::hasDragImage const):
        * dom/DataTransfer.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::selectionInHTMLFormat):
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::writeSelection):

        Write an additional HTML markup string on iOS. We already do this for Mac, but this data previously had no use
        on iOS. This is needed for to vend the "text/html" representation to the page on iOS when pasting.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::selectionInHTMLFormat): Deleted.
        * editing/wpe/EditorWPE.cpp:
        (WebCore::createFragmentFromPasteboardData):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragStartEventOnSourceElement):

        Renamed from dispatchDragStartEvent to dispatchDragStartEventOnSourceElement. Additionally, simplified the logic
        significantly, so that we now just check to see if the StaticPasteboard exposed to the page has any data,
        instead of using platform-dependent logic to compare changeCounts. We can do this because StaticPasteboard is
        guaranteed to only contain content that the page has supplied during the dragstart event, since it is empty
        upon initialization and cannot be written to by the rest of the platform.

        (WebCore::EventHandler::handleDrag):

        Tweak dispatchDragStartEvent to take a DataTransfer to expose to bindings; at the call site in handleDrag,
        create a new DataTransfer backed by a StaticPasteboard that the page may mutate over the course of the dragstart
        event. After dispatching to the page, move the dragging information present on the drag start DataTransfer over
        to the DragState's DataTransfer. If the drag image has not been set, compute and set the default drag image
        element on the DragState's DataTransfer.

        (WebCore::EventHandler::dispatchDragStartEvent): Deleted.
        * page/EventHandler.h:
        * page/Settings.cpp:
        (WebCore::Settings::customPasteboardDataEnabled):
        * page/Settings.h:
        (WebCore::Settings::setCustomPasteboardDataEnabled):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::createDraggingDataTransfer const): Deleted.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingDataTransfer const): Deleted.
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingDataTransfer const): Deleted.

        Remove this helper on both iOS and Mac. This only called createForDrag() before, with the addition of clearing
        the platform pasteboard prior to returning. Now that a StaticPasteboard is used when starting a drag, we clear
        out the platform pasteboard in platform-invariant code in EventHandler::handleDrag, so these helpers are no
        longer useful.

        * platform/Pasteboard.cpp: Added.
        (WebCore::isSafeTypeForDOMToReadAndWrite):

        Add a new helper to determine whether or not a pasteboard type is one of the standard DOM-exposed types. These
        are "text/plain", "text/html" and "text/uri-list".

        (WebCore::sharedBufferFromCustomData):
        (WebCore::customDataFromSharedBuffer):

        Add helper methods to serialize and deserialize custom data. The serialized data blob consists of: (1)
        versioning information, (2) a dictionary mapping each custom type to a value, and (3) a full list of types
        written by the page, in the order they were written.

        * platform/Pasteboard.h:

        Rename Pasteboard::readString to Pasteboard::readStringForBindings, to reflect that the string being read and
        the given type are exposed to and from the DOM.

        * platform/PasteboardStrategy.h:
        * platform/PasteboardWriterData.h:
        * platform/PlatformPasteboard.h:
        * platform/StaticPasteboard.cpp:

        Split m_stringContents out into m_platformData and m_customData. The former contains type-to-data entries for
        the DOM-exposed types, while the second contains entries that don't belong in the former.

        (WebCore::StaticPasteboard::hasData):
        (WebCore::StaticPasteboard::readStringForBindings):
        (WebCore::StaticPasteboard::writeString):
        (WebCore::StaticPasteboard::clear):
        (WebCore::StaticPasteboard::commitToPasteboard):

        Rather than propagate each entry to the client layer one at a time, populate a new PasteboardCustomData struct
        and send it to the client layer in one go. This new struct consists of an array of types in the order they were
        written by the page, a dictionary of public types (types we want to write directly to the platform pasteboard)
        and private types (custom types we want to package under our custom data blob).

        (WebCore::StaticPasteboard::readString): Deleted.
        * platform/StaticPasteboard.h:
        * platform/glib/EventHandlerGLib.cpp:
        (WebCore::EventHandler::createDraggingDataTransfer const): Deleted.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::readStringForBindings):
        (WebCore::Pasteboard::writeCustomData):
        (WebCore::Pasteboard::readString): Deleted.
        * platform/gtk/PlatformPasteboardGtk.cpp:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::write):

        Add stub implementations for new custom pasteboard data methods.

        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writeCustomData):

        Add new plumbing to ship a custom data (PasteboardCustomData) struct from WebCore to the client layer.

        (WebCore::cocoaTypeFromHTMLClipboardType):
        (WebCore::readPlatformValueAsString):
        (WebCore::Pasteboard::readStringForBindings):
        (WebCore::Pasteboard::types):

        Rewritten to ask the client layer for DOM-exposed types rather than all types, in the case where custom
        pasteboard data is enabled in Settings.

        (WebCore::Pasteboard::readString): Deleted.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::bufferForType):
        (WebCore::PlatformPasteboard::getPathnamesForType const):
        (WebCore::PlatformPasteboard::numberOfFiles const):
        (WebCore::PlatformPasteboard::platformPasteboardTypeForSafeTypeForDOMToReadAndWrite):

        Add a new helper to map DOM-safe pasteboard types to their platform counterparts.

        (WebCore::PlatformPasteboard::write):
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):

        Add a new helper to map platform pasteboard types to their DOM-safe counterparts.

        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):

        Fetch a list of DOM-exposed types. On iOS, for drag and drop, we have the additional constraint of not being
        able to read any data before the drop happens. This is problematic, since the page needs to know the list of
        types during 'dragover' events. To support this, we instead keep the array of types in the teamData property of
        the generated item provider, which is immediately available, even when dragging across different apps. Note that
        we still need to check if the pasteboard contains the full custom data blob here to handle the case where we
        copy on Mac and perform a continuity paste on iOS, since teamData does not exist on Mac.

        (WebCore::PlatformPasteboard::readString):

        Tweak to account for how UIPasteboard may return data blobs when reading values.

        (WebCore::PlatformPasteboard::getPathnamesForType): Deleted.
        (WebCore::PlatformPasteboard::numberOfFiles): Deleted.
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList itemProvider]):
        (+[WebItemProviderLoadResult loadResultWithItemProvider:typesToLoad:]):
        (-[WebItemProviderLoadResult initWithItemProvider:typesToLoad:]):
        (-[WebItemProviderLoadResult typesToLoad]):
        (-[WebItemProviderLoadResult setFileURL:forType:]):
        (-[WebItemProviderLoadResult itemProvider]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard dataForPasteboardType:]):
        (-[WebItemProviderPasteboard typeIdentifiersToLoadForRegisteredTypeIdentfiers:]):
        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):
        (+[WebItemProviderLoadResult emptyLoadResult]): Deleted.
        (+[WebItemProviderLoadResult loadResultWithFileURLMap:presentationStyle:]): Deleted.
        (-[WebItemProviderLoadResult initWithFileURLMap:presentationStyle:]): Deleted.
        (-[WebItemProviderPasteboard typeIdentifierToLoadForRegisteredTypeIdentfiers:]): Deleted.

        In the case of drag and drop on iOS, we cannot load any data prior to performing the drop; additionally, any
        attempts to load data immediately after the drop is performed in the UI process will fail. This means any and
        all data that the web process may require in the future when handling the drop must be loaded out of the item
        providers and saved when the drop is being handled in the UI process.

        Currently, we only load the highest fidelity type we can handle (or, if we don't know what we can handle, we
        select the highest fidelity representation conforming to "public.content"). This is a problematic for supporting
        DataTransfer.getData() on drop on iOS, because the page can ask for any of the three web-exposed types. To
        address this, we refactor WebItemProviderPasteboard to support loading multiple representations per item being
        dropped. At minimum, we will load anything conforming to "public.html", "public.plain-text", "public.url", and
        the new "com.apple.WebKit.custom-pasteboard-data" so we have means to answer any question that the page could
        ask via DataTransfer.getData(). We additonally load the highest fidelity supported (or content-conformant) type,
        if it has not already been loaded as a result of the former.

        To make this possible, we refactor WebItemProviderLoadResult to take an item provider and a list of types to
        load. -doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout: then creates a list of load results and
        uses each one to represent the results of loading data from its item provider (i.e. a map of UTI => file URL).

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeCustomData):
        (WebCore::cocoaTypeFromHTMLClipboardType):
        (WebCore::readPlatformValueAsString):
        (WebCore::Pasteboard::readStringForBindings):

        Change readStringForBindings (formerly, readString) so that if support for custom pasteboard data is enabled,
        we only allow reading directly from the platform pasteboard if the given type is DOM-safe; otherwise, we consult
        the custom data blob, if it exists. Otherwise, if support for custom pasteboard data is disabled, we fall back
        to our current behavior.

        (WebCore::Pasteboard::types):
        (WebCore::Pasteboard::readString): Deleted.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::numberOfFiles const):
        (WebCore::PlatformPasteboard::getPathnamesForType const):
        (WebCore::PlatformPasteboard::stringForType):
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):

        Add support for reading DOM-exposed types and fetching DOM-exposed data off of the pasteboard. The overall idea
        here is similar to iOS, though implementation details vary (e.g. no item provider support).

        (WebCore::PlatformPasteboard::write):
        (WebCore::PlatformPasteboard::platformPasteboardTypeForSafeTypeForDOMToReadAndWrite):
        (WebCore::PlatformPasteboard::numberOfFiles): Deleted.
        (WebCore::PlatformPasteboard::getPathnamesForType): Deleted.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::readStringForBindings):
        (WebCore::Pasteboard::writeCustomData):
        (WebCore::Pasteboard::readString): Deleted.
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::readStringForBindings):
        (WebCore::Pasteboard::writeCustomData):
        (WebCore::Pasteboard::readString): Deleted.
        * platform/wpe/PlatformPasteboardWPE.cpp:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::write):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setCustomPasteboardDataEnabled):

        Add a new internal settings hook for layout tests to opt in to using custom pasteboard data. By default, custom
        pasteboard data is enabled only in Safari, or on applications linked on or after certain releases of iOS and
        macOS.

        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-09-27  Zalan Bujtas  <zalan@apple.com>

        Deferred image size change makes image-load-on-delay.html flaky.
        https://bugs.webkit.org/show_bug.cgi?id=177520
        <rdar://problem/34674299>

        Reviewed by Dean Jackson.

        Only defer recomputeIsIgnored when the image change actually triggers layout. 

        * accessibility/AXObjectCache.cpp:
        (WebCore::rendererNeedsDeferredUpdate):
        (WebCore::AXObjectCache::deferRecomputeIsIgnoredIfNeeded):
        (WebCore::AXObjectCache::deferTextChangedIfNeeded):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::deferRecomputeIsIgnoredIfNeeded):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):

2017-09-27  Tim Horton  <timothy_horton@apple.com>

        Try to fix the Mac CMake build

        * PlatformMac.cmake:

2017-09-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Minimum font size may cause elements to have an infinite line-height
        https://bugs.webkit.org/show_bug.cgi?id=177573
        <rdar://problem/34573792>

        Reviewed by Dan Bernstein.

        When minimum font size is specified, we were trying to preserve the ratio of specified font-size
        and specified line-height in order to boost the computed font size proportionately to the font-size
        boost. However, this doesn't work when the specified font-size is 0, because the ratio between
        line-height and font-size is infinite.

        The most straightforward solution is just to make small font-sizes opt out of the line-height
        adjustment because the result would be too big.

        Test: fast/text/line-height-minimumFontSize-text-small-font-size.html

        * css/StyleBuilderCustom.h:
        (WebCore::computeLineHeightMultiplierDueToFontSize):
        (WebCore::StyleBuilderCustom::applyValueLineHeight):

2017-09-27  Alex Christensen  <achristensen@webkit.org>

        Allow modern decoding of std::optional<T>
        https://bugs.webkit.org/show_bug.cgi?id=177519

        Reviewed by Tim Horton.

        * platform/DragItem.h:
        (WebCore::DragItem::decode):

2017-09-27  Myles C. Maxfield  <mmaxfield@apple.com>

        "Tag" codepoints require the complex text codepath
        https://bugs.webkit.org/show_bug.cgi?id=177251
        <rdar://problem/34384001>

        Reviewed by David Hyatt.

        Previously, Tag codepoints (U+E0000 - U+E007F) weren't triggering the
        complex text codepath.

        Eventually, we should migrate the default from simple to complex. I'll do
        that in a separate patch.

        Test: fast/text/flag-codepoint.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::characterRangeCodePath):

2017-09-27  David Hyatt  <hyatt@apple.com>

        Rename "FlowThread" to "FragmentedFlow"
        https://bugs.webkit.org/show_bug.cgi?id=177557

        Reviewed by Zalan Bujtas.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        * dom/Element.cpp:
        (WebCore::Element::absoluteEventBounds):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::currentRenderFragmentedFlow const):
        (WebCore::LayoutState::setCurrentRenderFragmentedFlow):
        (WebCore::LayoutState::currentRenderFlowThread const): Deleted.
        (WebCore::LayoutState::setCurrentRenderFlowThread): Deleted.
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::ContainingBlockInfo):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::setBlock):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::logicalLeftSelectionOffset const):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::logicalRightSelectionOffset const):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::hasFloatsOrFragmentedFlows const):
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::hasFloatsOrFlowThreads const): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::clone const):
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        (WebCore::RenderBlock::preparePaginationBeforeBlockLayout):
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::addVisualOverflowFromTheme):
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::simplifiedLayout):
        (WebCore::RenderBlock::isSelectionRoot const):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::insertPositionedObject):
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::cachedEnclosingFragmentedFlow const):
        (WebCore::RenderBlock::cachedEnclosingFragmentedFlowNeedsUpdate const):
        (WebCore::RenderBlock::setCachedEnclosingFragmentedFlowNeedsUpdate):
        (WebCore::RenderBlock::updateCachedEnclosingFragmentedFlow const):
        (WebCore::RenderBlock::locateEnclosingFragmentedFlow const):
        (WebCore::RenderBlock::resetEnclosingFragmentedFlowAndChildInfoIncludingDescendants):
        (WebCore::RenderBlock::absoluteQuads const):
        (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const):
        (WebCore::RenderBlock::fragmentAtBlockOffset const):
        (WebCore::canComputeFragmentRangeForBox):
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation const):
        (WebCore::RenderBlock::computeFragmentRangeForBoxChild const):
        (WebCore::RenderBlock::estimateFragmentRangeForBoxChild const):
        (WebCore::RenderBlock::updateFragmentRangeForBoxChild const):
        (WebCore::RenderBlock::cachedFlowThreadContainingBlock const): Deleted.
        (WebCore::RenderBlock::cachedFlowThreadContainingBlockNeedsUpdate const): Deleted.
        (WebCore::RenderBlock::setCachedFlowThreadContainingBlockNeedsUpdate): Deleted.
        (WebCore::RenderBlock::updateCachedFlowThreadContainingBlock const): Deleted.
        (WebCore::RenderBlock::locateFlowThreadContainingBlock const): Deleted.
        (WebCore::RenderBlock::resetFlowThreadContainingBlockAndChildInfoIncludingDescendants): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns const):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::setStaticInlinePositionForChild):
        (WebCore::inNormalFlow):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::hasNextPage const):
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild):
        (WebCore::RenderBlockFlow::setPageBreak):
        (WebCore::RenderBlockFlow::updateMinimumPageHeight):
        (WebCore::RenderBlockFlow::pageLogicalTopForOffset const):
        (WebCore::RenderBlockFlow::pageLogicalHeightForOffset const):
        (WebCore::RenderBlockFlow::pageRemainingLogicalHeightForOffset const):
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::updateStylesForColumnChildren):
        (WebCore::RenderBlockFlow::computeOverflow):
        (WebCore::RenderBlockFlow::paintColumnRules):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::setMultiColumnFlow):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::layoutExcludedChildren):
        (WebCore::RenderBlockFlow::addChild):
        (WebCore::RenderBlockFlow::removeChild):
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):
        (WebCore::RenderBlockFlow::updateColumnProgressionFromStyle):
        (WebCore::RenderBlockFlow::computedColumnWidth const):
        (WebCore::RenderBlockFlow::computedColumnCount const):
        (WebCore::RenderBlockFlow::isTopLayoutOverflowAllowed const):
        (WebCore::RenderBlockFlow::isLeftLayoutOverflowAllowed const):
        (WebCore::RenderBlockFlow::setMultiColumnFlowThread): Deleted.
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::multiColumnFlow const):
        (WebCore::RenderBlockFlow::multiColumnFlowThread const): Deleted.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        (WebCore::RenderBlockFlow::lineWidthForPaginatedLineChanged const):
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        (WebCore::RenderBlockFlow::updateFragmentForLine const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clampToStartAndEndFragments const):
        (WebCore::RenderBox::hasFragmentRangeInFragmentedFlow const):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::absoluteQuads const):
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats const):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInFragment const):
        (WebCore::RenderBox::offsetFromContainer const):
        (WebCore::RenderBox::computeRectForRepaint const):
        (WebCore::RenderBox::skipContainingBlockForPercentHeightCalculation const):
        (WebCore::RenderBox::availableLogicalHeightUsing const):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned const):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned const):
        (WebCore::RenderBox::computePositionedLogicalWidth const):
        (WebCore::RenderBox::computePositionedLogicalHeight const):
        (WebCore::RenderBox::positionForPoint):
        (WebCore::RenderBox::createsNewFormattingContext const):
        (WebCore::RenderBox::addVisualEffectOverflow):
        (WebCore::RenderBox::addOverflowFromChild):
        (WebCore::RenderBox::clearOverflow):
        (WebCore::RenderBox::offsetFromLogicalTopOfFirstPage const):
        (WebCore::RenderBox::hasFragmentRangeInFlowThread const): Deleted.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideFragmentRange const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setStyle):
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::removeChildInternal):
        (WebCore::RenderElement::propagateStyleToAnonymousChildren):
        (WebCore::RenderElement::adjustFragmentedFlowStateOnContainingBlockChangeIfNeeded):
        (WebCore::RenderElement::removeFromRenderFragmentedFlow):
        (WebCore::RenderElement::removeFromRenderFragmentedFlowIncludingDescendants):
        (WebCore::RenderElement::resetEnclosingFragmentedFlowAndChildInfoIncludingDescendants):
        (WebCore::RenderElement::adjustFlowThreadStateOnContainingBlockChangeIfNeeded): Deleted.
        (WebCore::RenderElement::removeFromRenderFlowThread): Deleted.
        (WebCore::RenderElement::removeFromRenderFlowThreadIncludingDescendants): Deleted.
        (WebCore::RenderElement::resetFlowThreadContainingBlockAndChildInfoIncludingDescendants): Deleted.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainFixedPositionObjects const):
        * rendering/RenderFlowThread.cpp: Removed.
        * rendering/RenderFlowThread.h: Removed.
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::RenderFragmentContainer):
        (WebCore::RenderFragmentContainer::mapFragmentPointIntoFragmentedFlowCoordinates):
        (WebCore::RenderFragmentContainer::positionForPoint):
        (WebCore::RenderFragmentContainer::pageLogicalWidth const):
        (WebCore::RenderFragmentContainer::pageLogicalHeight const):
        (WebCore::RenderFragmentContainer::logicalHeightOfAllFragmentedFlowContent const):
        (WebCore::RenderFragmentContainer::fragmentedFlowPortionOverflowRect):
        (WebCore::RenderFragmentContainer::fragmentedFlowPortionLocation const):
        (WebCore::RenderFragmentContainer::overflowRectForFragmentedFlowPortion):
        (WebCore::RenderFragmentContainer::pageLogicalTopForOffset const):
        (WebCore::RenderFragmentContainer::isFirstFragment const):
        (WebCore::RenderFragmentContainer::isLastFragment const):
        (WebCore::RenderFragmentContainer::shouldClipFragmentedFlowContent const):
        (WebCore::RenderFragmentContainer::styleDidChange):
        (WebCore::RenderFragmentContainer::computeOverflowFromFragmentedFlow):
        (WebCore::RenderFragmentContainer::repaintFragmentedFlowContent):
        (WebCore::RenderFragmentContainer::repaintFragmentedFlowContentRectangle):
        (WebCore::RenderFragmentContainer::installFragmentedFlow):
        (WebCore::RenderFragmentContainer::attachFragment):
        (WebCore::RenderFragmentContainer::detachFragment):
        (WebCore::RenderFragmentContainer::logicalTopOfFragmentedFlowContentRect const):
        (WebCore::RenderFragmentContainer::logicalBottomOfFragmentedFlowContentRect const):
        (WebCore::RenderFragmentContainer::computeIntrinsicLogicalWidths const):
        (WebCore::RenderFragmentContainer::adjustFragmentBoundsFromFragmentedFlowPortionRect const):
        (WebCore::RenderFragmentContainer::ensureOverflowForBox):
        (WebCore::RenderFragmentContainer::rectFlowPortionForBox const):
        (WebCore::RenderFragmentContainer::addVisualOverflowForBox):
        (WebCore::RenderFragmentContainer::visualOverflowRectForBoxForPropagation):
        (WebCore::CurrentRenderFragmentContainerMaintainer::CurrentRenderFragmentContainerMaintainer):
        (WebCore::CurrentRenderFragmentContainerMaintainer::~CurrentRenderFragmentContainerMaintainer):
        (WebCore::RenderFragmentContainer::mapFragmentPointIntoFlowThreadCoordinates): Deleted.
        (WebCore::RenderFragmentContainer::logicalHeightOfAllFlowThreadContent const): Deleted.
        (WebCore::RenderFragmentContainer::flowThreadPortionOverflowRect): Deleted.
        (WebCore::RenderFragmentContainer::flowThreadPortionLocation const): Deleted.
        (WebCore::RenderFragmentContainer::overflowRectForFlowThreadPortion): Deleted.
        (WebCore::RenderFragmentContainer::shouldClipFlowThreadContent const): Deleted.
        (WebCore::RenderFragmentContainer::computeOverflowFromFlowThread): Deleted.
        (WebCore::RenderFragmentContainer::repaintFlowThreadContent): Deleted.
        (WebCore::RenderFragmentContainer::repaintFlowThreadContentRectangle): Deleted.
        (WebCore::RenderFragmentContainer::installFlowThread): Deleted.
        (WebCore::RenderFragmentContainer::logicalTopOfFlowThreadContentRect const): Deleted.
        (WebCore::RenderFragmentContainer::logicalBottomOfFlowThreadContentRect const): Deleted.
        (WebCore::RenderFragmentContainer::adjustFragmentBoundsFromFlowThreadPortionRect const): Deleted.
        * rendering/RenderFragmentContainer.h:
        (WebCore::RenderFragmentContainer::setFragmentedFlowPortionRect):
        (WebCore::RenderFragmentContainer::fragmentedFlowPortionRect const):
        (WebCore::RenderFragmentContainer::fragmentedFlow const):
        (WebCore::RenderFragmentContainer::logicalTopForFragmentedFlowContent const):
        (WebCore::RenderFragmentContainer::logicalBottomForFragmentedFlowContent const):
        (WebCore::RenderFragmentContainer::setFlowThreadPortionRect): Deleted.
        (WebCore::RenderFragmentContainer::flowThreadPortionRect const): Deleted.
        (WebCore::RenderFragmentContainer::flowThread const): Deleted.
        (WebCore::RenderFragmentContainer::logicalTopForFlowThreadContent const): Deleted.
        (WebCore::RenderFragmentContainer::logicalBottomForFlowThreadContent const): Deleted.
        * rendering/RenderFragmentContainerSet.cpp:
        (WebCore::RenderFragmentContainerSet::RenderFragmentContainerSet):
        (WebCore::RenderFragmentContainerSet::installFragmentedFlow):
        (WebCore::RenderFragmentContainerSet::expandToEncompassFragmentedFlowContentsIfNeeded):
        (WebCore::RenderFragmentContainerSet::installFlowThread): Deleted.
        (WebCore::RenderFragmentContainerSet::expandToEncompassFlowThreadContentsIfNeeded): Deleted.
        * rendering/RenderFragmentContainerSet.h:
        * rendering/RenderFragmentedFlow.cpp: Copied from rendering/RenderFlowThread.cpp.
        (WebCore::RenderFragmentedFlow::RenderFragmentedFlow):
        (WebCore::RenderFragmentedFlow::createFragmentedFlowStyle):
        (WebCore::RenderFragmentedFlow::styleDidChange):
        (WebCore::RenderFragmentedFlow::removeFlowChildInfo):
        (WebCore::RenderFragmentedFlow::removeFragmentFromThread):
        (WebCore::RenderFragmentedFlow::invalidateFragments):
        (WebCore::RenderFragmentedFlow::validateFragments):
        (WebCore::RenderFragmentedFlow::layout):
        (WebCore::RenderFragmentedFlow::updateLogicalWidth):
        (WebCore::RenderFragmentedFlow::computeLogicalHeight const):
        (WebCore::RenderFragmentedFlow::nodeAtPoint):
        (WebCore::RenderFragmentedFlow::shouldRepaint const):
        (WebCore::RenderFragmentedFlow::repaintRectangleInFragments const):
        (WebCore::RenderFragmentedFlow::fragmentAtBlockOffset const):
        (WebCore::RenderFragmentedFlow::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderFragmentedFlow::pageLogicalTopForOffset const):
        (WebCore::RenderFragmentedFlow::pageLogicalWidthForOffset const):
        (WebCore::RenderFragmentedFlow::pageLogicalHeightForOffset const):
        (WebCore::RenderFragmentedFlow::pageRemainingLogicalHeightForOffset const):
        (WebCore::RenderFragmentedFlow::mapFromFlowToFragment const):
        (WebCore::RenderFragmentedFlow::removeRenderBoxFragmentInfo):
        (WebCore::RenderFragmentedFlow::removeLineFragmentInfo):
        (WebCore::RenderFragmentedFlow::logicalWidthChangedInFragmentsForBlock):
        (WebCore::RenderFragmentedFlow::contentLogicalWidthOfFirstFragment const):
        (WebCore::RenderFragmentedFlow::contentLogicalHeightOfFirstFragment const):
        (WebCore::RenderFragmentedFlow::contentLogicalLeftOfFirstFragment const):
        (WebCore::RenderFragmentedFlow::firstFragment const):
        (WebCore::RenderFragmentedFlow::lastFragment const):
        (WebCore::RenderFragmentedFlow::clearRenderBoxFragmentInfoAndCustomStyle):
        (WebCore::RenderFragmentedFlow::setFragmentRangeForBox):
        (WebCore::RenderFragmentedFlow::hasCachedFragmentRangeForBox const):
        (WebCore::RenderFragmentedFlow::getFragmentRangeForBoxFromCachedInfo const):
        (WebCore::RenderFragmentedFlow::getFragmentRangeForBox const):
        (WebCore::RenderFragmentedFlow::computedFragmentRangeForBox const):
        (WebCore::RenderFragmentedFlow::fragmentInRange const):
        (WebCore::RenderFragmentedFlow::objectShouldFragmentInFlowFragment const):
        (WebCore::RenderFragmentedFlow::objectInFlowFragment const):
        (WebCore::RenderFragmentedFlow::checkLinesConsistency const):
        (WebCore::RenderFragmentedFlow::clearLinesToFragmentMap):
        (WebCore::RenderFragmentedFlow::deleteLines):
        (WebCore::RenderFragmentedFlow::willBeDestroyed):
        (WebCore::RenderFragmentedFlow::markFragmentsForOverflowLayoutIfNeeded):
        (WebCore::RenderFragmentedFlow::updateFragmentsFragmentedFlowPortionRect):
        (WebCore::RenderFragmentedFlow::addForcedFragmentBreak):
        (WebCore::RenderFragmentedFlow::collectLayerFragments):
        (WebCore::RenderFragmentedFlow::fragmentsBoundingBox):
        (WebCore::RenderFragmentedFlow::offsetFromLogicalTopOfFirstFragment const):
        (WebCore::RenderFragmentedFlow::FragmentSearchAdapter::collectIfNeeded):
        (WebCore::RenderFragmentedFlow::mapLocalToContainer const):
        (WebCore::RenderFragmentedFlow::mapFromLocalToFragmentedFlow const):
        (WebCore::RenderFragmentedFlow::mapFromFragmentedFlowToLocal const):
        (WebCore::RenderFragmentedFlow::flipForWritingModeLocalCoordinates const):
        (WebCore::RenderFragmentedFlow::addFragmentsVisualEffectOverflow):
        (WebCore::RenderFragmentedFlow::addFragmentsVisualOverflowFromTheme):
        (WebCore::RenderFragmentedFlow::addFragmentsOverflowFromChild):
        (WebCore::RenderFragmentedFlow::addFragmentsLayoutOverflow):
        (WebCore::RenderFragmentedFlow::addFragmentsVisualOverflow):
        (WebCore::RenderFragmentedFlow::clearFragmentsOverflow):
        (WebCore::RenderFragmentedFlow::currentFragment const):
        (WebCore::RenderFragmentedFlow::containingFragmentMap):
        (WebCore::RenderFlowThread::RenderFlowThread): Deleted.
        (WebCore::RenderFlowThread::createFlowThreadStyle): Deleted.
        (WebCore::RenderFlowThread::styleDidChange): Deleted.
        (WebCore::RenderFlowThread::removeFlowChildInfo): Deleted.
        (WebCore::RenderFlowThread::removeFragmentFromThread): Deleted.
        (WebCore::RenderFlowThread::invalidateFragments): Deleted.
        (WebCore::RenderFlowThread::validateFragments): Deleted.
        (WebCore::RenderFlowThread::layout): Deleted.
        (WebCore::RenderFlowThread::updateLogicalWidth): Deleted.
        (WebCore::RenderFlowThread::computeLogicalHeight const): Deleted.
        (WebCore::RenderFlowThread::nodeAtPoint): Deleted.
        (WebCore::RenderFlowThread::shouldRepaint const): Deleted.
        (WebCore::RenderFlowThread::repaintRectangleInFragments const): Deleted.
        (WebCore::RenderFlowThread::fragmentAtBlockOffset const): Deleted.
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent const): Deleted.
        (WebCore::RenderFlowThread::pageLogicalTopForOffset const): Deleted.
        (WebCore::RenderFlowThread::pageLogicalWidthForOffset const): Deleted.
        (WebCore::RenderFlowThread::pageLogicalHeightForOffset const): Deleted.
        (WebCore::RenderFlowThread::pageRemainingLogicalHeightForOffset const): Deleted.
        (WebCore::RenderFlowThread::mapFromFlowToFragment const): Deleted.
        (WebCore::RenderFlowThread::removeRenderBoxFragmentInfo): Deleted.
        (WebCore::RenderFlowThread::removeLineFragmentInfo): Deleted.
        (WebCore::RenderFlowThread::logicalWidthChangedInFragmentsForBlock): Deleted.
        (WebCore::RenderFlowThread::contentLogicalWidthOfFirstFragment const): Deleted.
        (WebCore::RenderFlowThread::contentLogicalHeightOfFirstFragment const): Deleted.
        (WebCore::RenderFlowThread::contentLogicalLeftOfFirstFragment const): Deleted.
        (WebCore::RenderFlowThread::firstFragment const): Deleted.
        (WebCore::RenderFlowThread::lastFragment const): Deleted.
        (WebCore::RenderFlowThread::clearRenderBoxFragmentInfoAndCustomStyle): Deleted.
        (WebCore::RenderFlowThread::setFragmentRangeForBox): Deleted.
        (WebCore::RenderFlowThread::hasCachedFragmentRangeForBox const): Deleted.
        (WebCore::RenderFlowThread::getFragmentRangeForBoxFromCachedInfo const): Deleted.
        (WebCore::RenderFlowThread::getFragmentRangeForBox const): Deleted.
        (WebCore::RenderFlowThread::computedFragmentRangeForBox const): Deleted.
        (WebCore::RenderFlowThread::fragmentInRange const): Deleted.
        (WebCore::RenderFlowThread::objectShouldFragmentInFlowFragment const): Deleted.
        (WebCore::RenderFlowThread::objectInFlowFragment const): Deleted.
        (WebCore::RenderFlowThread::checkLinesConsistency const): Deleted.
        (WebCore::RenderFlowThread::clearLinesToFragmentMap): Deleted.
        (WebCore::RenderFlowThread::deleteLines): Deleted.
        (WebCore::RenderFlowThread::willBeDestroyed): Deleted.
        (WebCore::RenderFlowThread::markFragmentsForOverflowLayoutIfNeeded): Deleted.
        (WebCore::RenderFlowThread::updateFragmentsFlowThreadPortionRect): Deleted.
        (WebCore::RenderFlowThread::addForcedFragmentBreak): Deleted.
        (WebCore::RenderFlowThread::collectLayerFragments): Deleted.
        (WebCore::RenderFlowThread::fragmentsBoundingBox): Deleted.
        (WebCore::RenderFlowThread::offsetFromLogicalTopOfFirstFragment const): Deleted.
        (WebCore::RenderFlowThread::FragmentSearchAdapter::collectIfNeeded): Deleted.
        (WebCore::RenderFlowThread::mapLocalToContainer const): Deleted.
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread const): Deleted.
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal const): Deleted.
        (WebCore::RenderFlowThread::flipForWritingModeLocalCoordinates const): Deleted.
        (WebCore::RenderFlowThread::addFragmentsVisualEffectOverflow): Deleted.
        (WebCore::RenderFlowThread::addFragmentsVisualOverflowFromTheme): Deleted.
        (WebCore::RenderFlowThread::addFragmentsOverflowFromChild): Deleted.
        (WebCore::RenderFlowThread::addFragmentsLayoutOverflow): Deleted.
        (WebCore::RenderFlowThread::addFragmentsVisualOverflow): Deleted.
        (WebCore::RenderFlowThread::clearFragmentsOverflow): Deleted.
        (WebCore::RenderFlowThread::currentFragment const): Deleted.
        (WebCore::RenderFlowThread::containingFragmentMap): Deleted.
        * rendering/RenderFragmentedFlow.h: Copied from rendering/RenderFlowThread.h.
        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderersViaLayers):
        (WebCore::RenderGeometryMap::pushRenderFragmentedFlow):
        (WebCore::RenderGeometryMap::pushRenderFlowThread): Deleted.
        * rendering/RenderGeometryMap.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layoutShadowControls):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChild):
        (WebCore::RenderInline::clone const):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::offsetFromContainer const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updatePagination):
        (WebCore::transparencyClipBox):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::enclosingFragmentedFlowAncestor const):
        (WebCore::RenderLayer::hitTestContents const):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::enclosingFlowThreadAncestor const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canBeComposited const):
        * rendering/RenderMedia.cpp:
        * rendering/RenderMultiColumnFlow.cpp: Copied from rendering/RenderMultiColumnFlowThread.cpp.
        (WebCore::RenderMultiColumnFlow::RenderMultiColumnFlow):
        (WebCore::RenderMultiColumnFlow::~RenderMultiColumnFlow):
        (WebCore::RenderMultiColumnFlow::renderName const):
        (WebCore::RenderMultiColumnFlow::firstMultiColumnSet const):
        (WebCore::RenderMultiColumnFlow::lastMultiColumnSet const):
        (WebCore::RenderMultiColumnFlow::firstColumnSetOrSpanner const):
        (WebCore::RenderMultiColumnFlow::nextColumnSetOrSpannerSiblingOf):
        (WebCore::RenderMultiColumnFlow::previousColumnSetOrSpannerSiblingOf):
        (WebCore::RenderMultiColumnFlow::layout):
        (WebCore::findSetRendering):
        (WebCore::RenderMultiColumnFlow::populate):
        (WebCore::RenderMultiColumnFlow::evacuateAndDestroy):
        (WebCore::RenderMultiColumnFlow::addFragmentToThread):
        (WebCore::RenderMultiColumnFlow::willBeRemovedFromTree):
        (WebCore::RenderMultiColumnFlow::resolveMovedChild const):
        (WebCore::isValidColumnSpanner):
        (WebCore::spannerPlacehoderCandidate):
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
        (WebCore::RenderMultiColumnFlow::handleSpannerRemoval):
        (WebCore::RenderMultiColumnFlow::fragmentedFlowRelativeWillBeRemoved):
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantBoxLaidOut):
        (WebCore::RenderMultiColumnFlow::computeLogicalHeight const):
        (WebCore::RenderMultiColumnFlow::initialLogicalWidth const):
        (WebCore::RenderMultiColumnFlow::setPageBreak):
        (WebCore::RenderMultiColumnFlow::updateMinimumPageHeight):
        (WebCore::RenderMultiColumnFlow::fragmentAtBlockOffset const):
        (WebCore::RenderMultiColumnFlow::setFragmentRangeForBox):
        (WebCore::RenderMultiColumnFlow::addForcedFragmentBreak):
        (WebCore::RenderMultiColumnFlow::computeLineGridPaginationOrigin const):
        (WebCore::RenderMultiColumnFlow::offsetFromContainer const):
        (WebCore::RenderMultiColumnFlow::mapAbsoluteToLocalPoint const):
        (WebCore::RenderMultiColumnFlow::physicalTranslationFromFragmentToFlow const):
        (WebCore::RenderMultiColumnFlow::mapFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlow::physicalTranslationOffsetFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlow::physicalTranslationFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlow::isPageLogicalHeightKnown const):
        (WebCore::RenderMultiColumnFlow::nodeAtPoint):
        (WebCore::RenderMultiColumnFlow::shouldCheckColumnBreaks const):
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread): Deleted.
        (WebCore::RenderMultiColumnFlowThread::~RenderMultiColumnFlowThread): Deleted.
        (WebCore::RenderMultiColumnFlowThread::renderName const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::firstMultiColumnSet const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::lastMultiColumnSet const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::firstColumnSetOrSpanner const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::nextColumnSetOrSpannerSiblingOf): Deleted.
        (WebCore::RenderMultiColumnFlowThread::previousColumnSetOrSpannerSiblingOf): Deleted.
        (WebCore::RenderMultiColumnFlowThread::layout): Deleted.
        (WebCore::RenderMultiColumnFlowThread::populate): Deleted.
        (WebCore::RenderMultiColumnFlowThread::evacuateAndDestroy): Deleted.
        (WebCore::RenderMultiColumnFlowThread::addFragmentToThread): Deleted.
        (WebCore::RenderMultiColumnFlowThread::willBeRemovedFromTree): Deleted.
        (WebCore::RenderMultiColumnFlowThread::resolveMovedChild const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::processPossibleSpannerDescendant): Deleted.
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted): Deleted.
        (WebCore::RenderMultiColumnFlowThread::handleSpannerRemoval): Deleted.
        (WebCore::RenderMultiColumnFlowThread::flowThreadRelativeWillBeRemoved): Deleted.
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantBoxLaidOut): Deleted.
        (WebCore::RenderMultiColumnFlowThread::computeLogicalHeight const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::initialLogicalWidth const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::setPageBreak): Deleted.
        (WebCore::RenderMultiColumnFlowThread::updateMinimumPageHeight): Deleted.
        (WebCore::RenderMultiColumnFlowThread::fragmentAtBlockOffset const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::setFragmentRangeForBox): Deleted.
        (WebCore::RenderMultiColumnFlowThread::addForcedFragmentBreak): Deleted.
        (WebCore::RenderMultiColumnFlowThread::computeLineGridPaginationOrigin const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::offsetFromContainer const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::mapAbsoluteToLocalPoint const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromFragmentToFlow const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::mapFromFlowToFragment const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationOffsetFromFlowToFragment const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromFlowToFragment const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::isPageLogicalHeightKnown const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::nodeAtPoint): Deleted.
        (WebCore::RenderMultiColumnFlowThread::shouldCheckColumnBreaks const): Deleted.
        * rendering/RenderMultiColumnFlow.h: Copied from rendering/RenderMultiColumnFlowThread.h.
        * rendering/RenderMultiColumnFlowThread.cpp: Removed.
        * rendering/RenderMultiColumnFlowThread.h: Removed.
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::firstRendererInFragmentedFlow const):
        (WebCore::RenderMultiColumnSet::lastRendererInFragmentedFlow const):
        (WebCore::RenderMultiColumnSet::containsRendererInFragmentedFlow const):
        (WebCore::RenderMultiColumnSet::setLogicalTopInFragmentedFlow):
        (WebCore::RenderMultiColumnSet::setLogicalBottomInFragmentedFlow):
        (WebCore::RenderMultiColumnSet::pageLogicalTopForOffset const):
        (WebCore::RenderMultiColumnSet::setAndConstrainColumnHeight):
        (WebCore::RenderMultiColumnSet::distributeImplicitBreaks):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight const):
        (WebCore::RenderMultiColumnSet::recalculateColumnHeight):
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        (WebCore::RenderMultiColumnSet::requiresBalancing const):
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        (WebCore::RenderMultiColumnSet::beginFlow):
        (WebCore::RenderMultiColumnSet::endFlow):
        (WebCore::RenderMultiColumnSet::layout):
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight const):
        (WebCore::RenderMultiColumnSet::columnCount const):
        (WebCore::RenderMultiColumnSet::columnLogicalLeft const):
        (WebCore::RenderMultiColumnSet::columnLogicalTop const):
        (WebCore::RenderMultiColumnSet::columnIndexAtOffset const):
        (WebCore::RenderMultiColumnSet::fragmentedFlowPortionRectAt const):
        (WebCore::RenderMultiColumnSet::fragmentedFlowPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        (WebCore::RenderMultiColumnSet::repaintFragmentedFlowContent):
        (WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting const):
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset const):
        (WebCore::RenderMultiColumnSet::adjustFragmentBoundsFromFragmentedFlowPortionRect const):
        (WebCore::RenderMultiColumnSet::positionForPoint):
        (WebCore::RenderMultiColumnSet::translateFragmentPointToFragmentedFlow const):
        (WebCore::RenderMultiColumnSet::updateHitTestResult):
        (WebCore::RenderMultiColumnSet::firstRendererInFlowThread const): Deleted.
        (WebCore::RenderMultiColumnSet::lastRendererInFlowThread const): Deleted.
        (WebCore::RenderMultiColumnSet::containsRendererInFlowThread const): Deleted.
        (WebCore::RenderMultiColumnSet::setLogicalTopInFlowThread): Deleted.
        (WebCore::RenderMultiColumnSet::setLogicalBottomInFlowThread): Deleted.
        (WebCore::RenderMultiColumnSet::flowThreadPortionRectAt const): Deleted.
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect): Deleted.
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent): Deleted.
        (WebCore::RenderMultiColumnSet::adjustFragmentBoundsFromFlowThreadPortionRect const): Deleted.
        (WebCore::RenderMultiColumnSet::translateFragmentPointToFlowThread const): Deleted.
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::createAnonymous):
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setFragmentedFlowStateIncludingDescendants):
        (WebCore::RenderObject::computedFragmentedFlowState):
        (WebCore::RenderObject::initializeFragmentedFlowStateOnInsertion):
        (WebCore::RenderObject::resetFragmentedFlowStateOnRemoval):
        (WebCore::RenderObject::containerForRepaint const):
        (WebCore::RenderObject::repaintUsingContainer const):
        (WebCore::enclosingFragmentedFlowFromRenderer):
        (WebCore::RenderObject::outputRegionsInformation const):
        (WebCore::RenderObject::selectionRoot const):
        (WebCore::RenderObject::offsetFromContainer const):
        (WebCore::RenderObject::insertedIntoTree):
        (WebCore::RenderObject::locateEnclosingFragmentedFlow const):
        (WebCore::RenderObject::setIsRenderFragmentedFlow):
        (WebCore::RenderObject::setFlowThreadStateIncludingDescendants): Deleted.
        (WebCore::RenderObject::computedFlowThreadState): Deleted.
        (WebCore::RenderObject::initializeFlowThreadStateOnInsertion): Deleted.
        (WebCore::RenderObject::resetFlowThreadStateOnRemoval): Deleted.
        (WebCore::flowThreadContainingBlockFromRenderer): Deleted.
        (WebCore::RenderObject::locateFlowThreadContainingBlock const): Deleted.
        (WebCore::RenderObject::setIsRenderFlowThread): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::enclosingFragmentedFlow const):
        (WebCore::RenderObject::isInFlowRenderFragmentedFlow const):
        (WebCore::RenderObject::isOutOfFlowRenderFragmentedFlow const):
        (WebCore::RenderObject::isRenderMultiColumnFlow const):
        (WebCore::RenderObject::fragmentedFlowState const):
        (WebCore::RenderObject::setFragmentedFlowState):
        (WebCore::RenderObject::isAnonymousBlock const):
        (WebCore::RenderObject::isRenderFragmentedFlow const):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::RenderObjectBitfields::fragmentedFlowState const):
        (WebCore::RenderObject::RenderObjectBitfields::setFragmentedFlowState):
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData):
        (WebCore::RenderObject::flowThreadContainingBlock const): Deleted.
        (WebCore::RenderObject::isInFlowRenderFlowThread const): Deleted.
        (WebCore::RenderObject::isOutOfFlowRenderFlowThread const): Deleted.
        (WebCore::RenderObject::isRenderMultiColumnFlowThread const): Deleted.
        (WebCore::RenderObject::flowThreadState const): Deleted.
        (WebCore::RenderObject::setFlowThreadState): Deleted.
        (WebCore::RenderObject::isRenderFlowThread const): Deleted.
        (WebCore::RenderObject::RenderObjectBitfields::flowThreadState const): Deleted.
        (WebCore::RenderObject::RenderObjectBitfields::setFlowThreadState): Deleted.
        * rendering/RenderReplaced.cpp:
        * rendering/RenderRuby.cpp:
        (WebCore::isRubyChildForNormalRemoval):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::blockForAccompanyingFirstLetter):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight const):
        (WebCore::RenderView::pageOrViewLogicalHeight const):
        (WebCore::RenderView::updateHitTestResult):
        (WebCore::RenderView::pageNumberForBlockProgressionOffset const):
        (WebCore::RenderView::pageCount const):
        * rendering/RenderView.h:
        * rendering/RenderingAllInOne.cpp:
        * rendering/RootInlineBox.cpp:
        (WebCore::containingFragmentMap):
        (WebCore::RootInlineBox::~RootInlineBox):
        (WebCore::RootInlineBox::containingFragment const):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/line/LineLayoutState.h:
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::fragmentedFlow const):
        (WebCore::LineLayoutState::setFragmentedFlow):
        (WebCore::LineLayoutState::flowThread const): Deleted.
        (WebCore::LineLayoutState::setFlowThread): Deleted.
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * style/RenderTreePosition.h:
        * style/RenderTreeUpdaterListItem.cpp:
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):
        * style/RenderTreeUpdaterMultiColumn.cpp:
        (WebCore::RenderTreeUpdater::MultiColumn::update):
        (WebCore::RenderTreeUpdater::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeUpdater::MultiColumn::createFlowThread): Deleted.
        * style/RenderTreeUpdaterMultiColumn.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2017-09-27  Don Olmstead  <don.olmstead@sony.com>

        Default to void* for platform widgets
        https://bugs.webkit.org/show_bug.cgi?id=177518

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/Widget.h:

2017-09-27  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Cloning an opaque response should not assert
        https://bugs.webkit.org/show_bug.cgi?id=177548

        Reviewed by Sam Weinig.

        Test: http/wpt/fetch/response-opaque-clone.html

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::readableStream): Returning null if response is opaque.
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone): Making sure cloned responses keep their opaque state.
        (WebCore::FetchResponse::consumeBodyAsStream): Removing assertion as we need to create a stream for cloning.

2017-09-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused parameter of Page.reload
        https://bugs.webkit.org/show_bug.cgi?id=177522

        Reviewed by Matt Baker.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld): Deleted.
        * inspector/InspectorPageAgent.h:

2017-09-27  Chris Dumez  <cdumez@apple.com>

        cssFloat missing in CSSPropertyDeclaration.prototype
        https://bugs.webkit.org/show_bug.cgi?id=177487

        Reviewed by Sam Weinig.

        Add support for cssFloat attribute on CSSPropertyDeclaration, as per:
        - https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-cssfloat

        Test: fast/css/CSSStyleDeclaration-cssFloat.html

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::cssFloat):
        (WebCore::CSSStyleDeclaration::setCssFloat):
        * css/CSSStyleDeclaration.h:
        * css/CSSStyleDeclaration.idl:

2017-09-27  Antti Koivisto  <antti@apple.com>

        Ref element keys in CSSAnimationControllerPrivate
        https://bugs.webkit.org/show_bug.cgi?id=177543

        Reviewed by Zalan Bujtas.

        For safety.

        * page/animation/CSSAnimationControllerPrivate.h:

        This won't create ref cycle as elements are removed from the m_compositeAnimations maps when they
        are removed from the tree. We have assertions that verify the map is always cleared.

2017-09-27  David Hyatt  <hyatt@apple.com>

        Rename "Region" to "Fragment" for RenderRegion and associated classes/methods.
        https://bugs.webkit.org/show_bug.cgi?id=177506

        Reviewed by Zalan Bujtas.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator BreakInside const):
        * css/CSSValueKeywords.in:
        * dom/Element.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::computeMarginLogicalSizeForChild):
        (WebCore::IndefiniteSizeStrategy::minLogicalWidthForChild const):
        (WebCore::DefiniteSizeStrategy::minLogicalWidthForChild const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::preparePaginationBeforeBlockLayout):
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::clearLayoutOverflow):
        (WebCore::RenderBlock::addVisualOverflowFromTheme):
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::simplifiedLayout):
        (WebCore::RenderBlock::markFixedPositionObjectForLayoutIfNeeded):
        (WebCore::RenderBlock::layoutPositionedObject):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::logicalLeftOffsetForContent const):
        (WebCore::RenderBlock::logicalRightOffsetForContent const):
        (WebCore::RenderBlock::adjustLogicalLeftOffsetForLine const):
        (WebCore::RenderBlock::adjustLogicalRightOffsetForLine const):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::positionForPoint):
        (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const):
        (WebCore::RenderBlock::fragmentAtBlockOffset const):
        (WebCore::canComputeFragmentRangeForBox):
        (WebCore::RenderBlock::computeFragmentRangeForBoxChild const):
        (WebCore::RenderBlock::estimateFragmentRangeForBoxChild const):
        (WebCore::RenderBlock::updateFragmentRangeForBoxChild const):
        (WebCore::RenderBlock::regionAtBlockOffset const): Deleted.
        (WebCore::canComputeRegionRangeForBox): Deleted.
        (WebCore::RenderBlock::computeRegionRangeForBoxChild const): Deleted.
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild const): Deleted.
        (WebCore::RenderBlock::updateRegionRangeForBoxChild const): Deleted.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLineInFragment const):
        (WebCore::RenderBlock::logicalRightOffsetForLineInFragment const):
        (WebCore::RenderBlock::logicalLeftOffsetForLineInFragment const):
        (WebCore::RenderBlock::startOffsetForLineInFragment const):
        (WebCore::RenderBlock::endOffsetForLineInFragment const):
        (WebCore::RenderBlock::availableLogicalWidthForLine const):
        (WebCore::RenderBlock::availableLogicalWidthForContent const):
        (WebCore::RenderBlock::startOffsetForContent const):
        (WebCore::RenderBlock::endOffsetForContent const):
        (WebCore::RenderBlock::logicalLeftOffsetForContent const):
        (WebCore::RenderBlock::logicalRightOffsetForContent const):
        (WebCore::RenderBlock::availableLogicalWidthForLineInRegion const): Deleted.
        (WebCore::RenderBlock::logicalRightOffsetForLineInRegion const): Deleted.
        (WebCore::RenderBlock::logicalLeftOffsetForLineInRegion const): Deleted.
        (WebCore::RenderBlock::startOffsetForLineInRegion const): Deleted.
        (WebCore::RenderBlock::endOffsetForLineInRegion const): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::setStaticInlinePositionForChild):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::hasNextPage const):
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild):
        (WebCore::RenderBlockFlow::pushToNextPageWithMinimumLogicalHeight const):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::needsLayoutAfterFragmentRangeChange const):
        (WebCore::RenderBlockFlow::findClosestTextAtAbsolutePoint):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::positionForPoint):
        (WebCore::RenderBlockFlow::layoutExcludedChildren):
        (WebCore::RenderBlockFlow::needsLayoutAfterRegionRangeChange const): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        (WebCore::RenderBlockFlow::lineWidthForPaginatedLineChanged const):
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        (WebCore::RenderBlockFlow::updateFragmentForLine const):
        (WebCore::RenderBlockFlow::updateRegionForLine const): Deleted.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clampToStartAndEndFragments const):
        (WebCore::RenderBox::hasFragmentRangeInFlowThread const):
        (WebCore::RenderBox::clientBoxRectInFragment const):
        (WebCore::RenderBox::borderBoxRectInFragment const):
        (WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::overflowClipRect):
        (WebCore::RenderBox::clipRect):
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats const):
        (WebCore::RenderBox::containingBlockLogicalWidthForContentInFragment const):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInFragment const):
        (WebCore::RenderBox::offsetFromContainer const):
        (WebCore::RenderBox::computeRectForRepaint const):
        (WebCore::RenderBox::updateLogicalWidth):
        (WebCore::RenderBox::computeLogicalWidthInFragment const):
        (WebCore::RenderBox::computeLogicalWidthInFragmentUsing const):
        (WebCore::RenderBox::renderBoxFragmentInfo const):
        (WebCore::tableCellShouldHaveZeroInitialSize):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned const):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned const):
        (WebCore::computeInlineStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalWidth const):
        (WebCore::RenderBox::computePositionedLogicalHeight const):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced const):
        (WebCore::RenderBox::positionForPoint):
        (WebCore::RenderBox::createsNewFormattingContext const):
        (WebCore::RenderBox::addVisualEffectOverflow):
        (WebCore::RenderBox::addOverflowFromChild):
        (WebCore::RenderBox::clearOverflow):
        (WebCore::RenderBox::clampToStartAndEndRegions const): Deleted.
        (WebCore::RenderBox::hasRegionRangeInFlowThread const): Deleted.
        (WebCore::RenderBox::clientBoxRectInRegion const): Deleted.
        (WebCore::RenderBox::borderBoxRectInRegion const): Deleted.
        (WebCore::RenderBox::constrainLogicalWidthInRegionByMinMax const): Deleted.
        (WebCore::RenderBox::containingBlockLogicalWidthForContentInRegion const): Deleted.
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion const): Deleted.
        (WebCore::RenderBox::computeLogicalWidthInRegion const): Deleted.
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing const): Deleted.
        (WebCore::RenderBox::renderBoxRegionInfo const): Deleted.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::overflowClipRectForChildLayers):
        (WebCore::RenderBox::canHaveOutsideFragmentRange const):
        (WebCore::RenderBox::needsLayoutAfterFragmentRangeChange const):
        (WebCore::RenderBox::canHaveOutsideRegionRange const): Deleted.
        (WebCore::RenderBox::needsLayoutAfterRegionRangeChange const): Deleted.
        * rendering/RenderBoxFragmentInfo.h: Copied from rendering/RenderBoxRegionInfo.h.
        (WebCore::RenderBoxFragmentInfo::RenderBoxFragmentInfo):
        (WebCore::RenderBoxRegionInfo::RenderBoxRegionInfo): Deleted.
        (WebCore::RenderBoxRegionInfo::logicalLeft const): Deleted.
        (WebCore::RenderBoxRegionInfo::logicalWidth const): Deleted.
        (WebCore::RenderBoxRegionInfo::shiftLogicalLeft): Deleted.
        (WebCore::RenderBoxRegionInfo::isShifted const): Deleted.
        (WebCore::RenderBoxRegionInfo::createOverflow): Deleted.
        (WebCore::RenderBoxRegionInfo::overflow const): Deleted.
        (WebCore::RenderBoxRegionInfo::clearOverflow): Deleted.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint const):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::canHaveBoxInfoInFragment const):
        (WebCore::RenderBoxModelObject::canHaveBoxInfoInRegion const): Deleted.
        * rendering/RenderBoxRegionInfo.h: Removed.
        * rendering/RenderElement.cpp:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::positionForPoint):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::styleDidChange):
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::removeFragmentFromThread):
        (WebCore::RenderFlowThread::invalidateFragments):
        (WebCore::RenderFlowThread::validateFragments):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight const):
        (WebCore::RenderFlowThread::repaintRectangleInFragments const):
        (WebCore::RenderFlowThread::fragmentAtBlockOffset const):
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderFlowThread::pageLogicalTopForOffset const):
        (WebCore::RenderFlowThread::pageLogicalWidthForOffset const):
        (WebCore::RenderFlowThread::pageLogicalHeightForOffset const):
        (WebCore::RenderFlowThread::pageRemainingLogicalHeightForOffset const):
        (WebCore::RenderFlowThread::mapFromFlowToFragment const):
        (WebCore::RenderFlowThread::removeRenderBoxFragmentInfo):
        (WebCore::RenderFlowThread::removeLineFragmentInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInFragmentsForBlock):
        (WebCore::RenderFlowThread::contentLogicalWidthOfFirstFragment const):
        (WebCore::RenderFlowThread::contentLogicalHeightOfFirstFragment const):
        (WebCore::RenderFlowThread::contentLogicalLeftOfFirstFragment const):
        (WebCore::RenderFlowThread::firstFragment const):
        (WebCore::RenderFlowThread::lastFragment const):
        (WebCore::RenderFlowThread::clearRenderBoxFragmentInfoAndCustomStyle):
        (WebCore::RenderFlowThread::setFragmentRangeForBox):
        (WebCore::RenderFlowThread::hasCachedFragmentRangeForBox const):
        (WebCore::RenderFlowThread::getFragmentRangeForBoxFromCachedInfo const):
        (WebCore::RenderFlowThread::getFragmentRangeForBox const):
        (WebCore::RenderFlowThread::computedFragmentRangeForBox const):
        (WebCore::RenderFlowThread::fragmentInRange const):
        (WebCore::RenderFlowThread::objectShouldFragmentInFlowFragment const):
        (WebCore::RenderFlowThread::objectInFlowFragment const):
        (WebCore::RenderFlowThread::checkLinesConsistency const):
        (WebCore::RenderFlowThread::clearLinesToFragmentMap):
        (WebCore::RenderFlowThread::deleteLines):
        (WebCore::RenderFlowThread::willBeDestroyed):
        (WebCore::RenderFlowThread::markFragmentsForOverflowLayoutIfNeeded):
        (WebCore::RenderFlowThread::updateFragmentsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedFragmentBreak):
        (WebCore::RenderFlowThread::collectLayerFragments):
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        (WebCore::RenderFlowThread::offsetFromLogicalTopOfFirstFragment const):
        (WebCore::RenderFlowThread::FragmentSearchAdapter::collectIfNeeded):
        (WebCore::RenderFlowThread::mapLocalToContainer const):
        (WebCore::RenderFlowThread::addFragmentsVisualEffectOverflow):
        (WebCore::RenderFlowThread::addFragmentsVisualOverflowFromTheme):
        (WebCore::RenderFlowThread::addFragmentsOverflowFromChild):
        (WebCore::RenderFlowThread::addFragmentsLayoutOverflow):
        (WebCore::RenderFlowThread::addFragmentsVisualOverflow):
        (WebCore::RenderFlowThread::clearFragmentsOverflow):
        (WebCore::RenderFlowThread::currentFragment const):
        (WebCore::RenderFlowThread::containingFragmentMap):
        (WebCore::RenderFlowThread::removeRegionFromThread): Deleted.
        (WebCore::RenderFlowThread::invalidateRegions): Deleted.
        (WebCore::RenderFlowThread::validateRegions): Deleted.
        (WebCore::RenderFlowThread::repaintRectangleInRegions const): Deleted.
        (WebCore::RenderFlowThread::regionAtBlockOffset const): Deleted.
        (WebCore::RenderFlowThread::mapFromFlowToRegion const): Deleted.
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo): Deleted.
        (WebCore::RenderFlowThread::removeLineRegionInfo): Deleted.
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock): Deleted.
        (WebCore::RenderFlowThread::contentLogicalWidthOfFirstRegion const): Deleted.
        (WebCore::RenderFlowThread::contentLogicalHeightOfFirstRegion const): Deleted.
        (WebCore::RenderFlowThread::contentLogicalLeftOfFirstRegion const): Deleted.
        (WebCore::RenderFlowThread::firstRegion const): Deleted.
        (WebCore::RenderFlowThread::lastRegion const): Deleted.
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle): Deleted.
        (WebCore::RenderFlowThread::setRegionRangeForBox): Deleted.
        (WebCore::RenderFlowThread::hasCachedRegionRangeForBox const): Deleted.
        (WebCore::RenderFlowThread::getRegionRangeForBoxFromCachedInfo const): Deleted.
        (WebCore::RenderFlowThread::getRegionRangeForBox const): Deleted.
        (WebCore::RenderFlowThread::computedRegionRangeForBox const): Deleted.
        (WebCore::RenderFlowThread::regionInRange const): Deleted.
        (WebCore::RenderFlowThread::objectShouldFragmentInFlowRegion const): Deleted.
        (WebCore::RenderFlowThread::objectInFlowRegion const): Deleted.
        (WebCore::RenderFlowThread::clearLinesToRegionMap): Deleted.
        (WebCore::RenderFlowThread::markRegionsForOverflowLayoutIfNeeded): Deleted.
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect): Deleted.
        (WebCore::RenderFlowThread::addForcedRegionBreak): Deleted.
        (WebCore::RenderFlowThread::offsetFromLogicalTopOfFirstRegion const): Deleted.
        (WebCore::RenderFlowThread::RegionSearchAdapter::collectIfNeeded): Deleted.
        (WebCore::RenderFlowThread::addRegionsVisualEffectOverflow): Deleted.
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme): Deleted.
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild): Deleted.
        (WebCore::RenderFlowThread::addRegionsLayoutOverflow): Deleted.
        (WebCore::RenderFlowThread::addRegionsVisualOverflow): Deleted.
        (WebCore::RenderFlowThread::clearRegionsOverflow): Deleted.
        (WebCore::RenderFlowThread::currentRegion const): Deleted.
        (WebCore::RenderFlowThread::containingRegionMap): Deleted.
        * rendering/RenderFlowThread.h:
        (WTF::ValueToString<WebCore::RenderFragmentContainer::string):
        (WTF::ValueToString<WebCore::RenderRegion::string): Deleted.
        * rendering/RenderFragmentContainer.cpp: Copied from rendering/RenderRegion.cpp.
        (WebCore::RenderFragmentContainer::RenderFragmentContainer):
        (WebCore::RenderFragmentContainer::mapFragmentPointIntoFlowThreadCoordinates):
        (WebCore::RenderFragmentContainer::positionForPoint):
        (WebCore::RenderFragmentContainer::pageLogicalWidth const):
        (WebCore::RenderFragmentContainer::pageLogicalHeight const):
        (WebCore::RenderFragmentContainer::logicalHeightOfAllFlowThreadContent const):
        (WebCore::RenderFragmentContainer::flowThreadPortionOverflowRect):
        (WebCore::RenderFragmentContainer::flowThreadPortionLocation const):
        (WebCore::RenderFragmentContainer::overflowRectForFlowThreadPortion):
        (WebCore::RenderFragmentContainer::pageLogicalTopForOffset const):
        (WebCore::RenderFragmentContainer::isFirstFragment const):
        (WebCore::RenderFragmentContainer::isLastFragment const):
        (WebCore::RenderFragmentContainer::shouldClipFlowThreadContent const):
        (WebCore::RenderFragmentContainer::styleDidChange):
        (WebCore::RenderFragmentContainer::computeOverflowFromFlowThread):
        (WebCore::RenderFragmentContainer::repaintFlowThreadContent):
        (WebCore::RenderFragmentContainer::repaintFlowThreadContentRectangle):
        (WebCore::RenderFragmentContainer::installFlowThread):
        (WebCore::RenderFragmentContainer::attachFragment):
        (WebCore::RenderFragmentContainer::detachFragment):
        (WebCore::RenderFragmentContainer::renderBoxFragmentInfo const):
        (WebCore::RenderFragmentContainer::setRenderBoxFragmentInfo):
        (WebCore::RenderFragmentContainer::takeRenderBoxFragmentInfo):
        (WebCore::RenderFragmentContainer::removeRenderBoxFragmentInfo):
        (WebCore::RenderFragmentContainer::deleteAllRenderBoxFragmentInfo):
        (WebCore::RenderFragmentContainer::logicalTopOfFlowThreadContentRect const):
        (WebCore::RenderFragmentContainer::logicalBottomOfFlowThreadContentRect const):
        (WebCore::RenderFragmentContainer::insertedIntoTree):
        (WebCore::RenderFragmentContainer::willBeRemovedFromTree):
        (WebCore::RenderFragmentContainer::computeIntrinsicLogicalWidths const):
        (WebCore::RenderFragmentContainer::computePreferredLogicalWidths):
        (WebCore::RenderFragmentContainer::adjustFragmentBoundsFromFlowThreadPortionRect const):
        (WebCore::RenderFragmentContainer::ensureOverflowForBox):
        (WebCore::RenderFragmentContainer::rectFlowPortionForBox const):
        (WebCore::RenderFragmentContainer::addLayoutOverflowForBox):
        (WebCore::RenderFragmentContainer::addVisualOverflowForBox):
        (WebCore::RenderFragmentContainer::layoutOverflowRectForBox):
        (WebCore::RenderFragmentContainer::visualOverflowRectForBox):
        (WebCore::RenderFragmentContainer::layoutOverflowRectForBoxForPropagation):
        (WebCore::RenderFragmentContainer::visualOverflowRectForBoxForPropagation):
        (WebCore::CurrentRenderFragmentContainerMaintainer::CurrentRenderFragmentContainerMaintainer):
        (WebCore::CurrentRenderFragmentContainerMaintainer::~CurrentRenderFragmentContainerMaintainer):
        (WebCore::RenderRegion::RenderRegion): Deleted.
        (WebCore::RenderRegion::mapRegionPointIntoFlowThreadCoordinates): Deleted.
        (WebCore::RenderRegion::positionForPoint): Deleted.
        (WebCore::RenderRegion::pageLogicalWidth const): Deleted.
        (WebCore::RenderRegion::pageLogicalHeight const): Deleted.
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent const): Deleted.
        (WebCore::RenderRegion::flowThreadPortionOverflowRect): Deleted.
        (WebCore::RenderRegion::flowThreadPortionLocation const): Deleted.
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion): Deleted.
        (WebCore::RenderRegion::pageLogicalTopForOffset const): Deleted.
        (WebCore::RenderRegion::isFirstRegion const): Deleted.
        (WebCore::RenderRegion::isLastRegion const): Deleted.
        (WebCore::RenderRegion::shouldClipFlowThreadContent const): Deleted.
        (WebCore::RenderRegion::styleDidChange): Deleted.
        (WebCore::RenderRegion::computeOverflowFromFlowThread): Deleted.
        (WebCore::RenderRegion::repaintFlowThreadContent): Deleted.
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle): Deleted.
        (WebCore::RenderRegion::installFlowThread): Deleted.
        (WebCore::RenderRegion::attachRegion): Deleted.
        (WebCore::RenderRegion::detachRegion): Deleted.
        (WebCore::RenderRegion::renderBoxRegionInfo const): Deleted.
        (WebCore::RenderRegion::setRenderBoxRegionInfo): Deleted.
        (WebCore::RenderRegion::takeRenderBoxRegionInfo): Deleted.
        (WebCore::RenderRegion::removeRenderBoxRegionInfo): Deleted.
        (WebCore::RenderRegion::deleteAllRenderBoxRegionInfo): Deleted.
        (WebCore::RenderRegion::logicalTopOfFlowThreadContentRect const): Deleted.
        (WebCore::RenderRegion::logicalBottomOfFlowThreadContentRect const): Deleted.
        (WebCore::RenderRegion::insertedIntoTree): Deleted.
        (WebCore::RenderRegion::willBeRemovedFromTree): Deleted.
        (WebCore::RenderRegion::computeIntrinsicLogicalWidths const): Deleted.
        (WebCore::RenderRegion::computePreferredLogicalWidths): Deleted.
        (WebCore::RenderRegion::adjustRegionBoundsFromFlowThreadPortionRect const): Deleted.
        (WebCore::RenderRegion::ensureOverflowForBox): Deleted.
        (WebCore::RenderRegion::rectFlowPortionForBox const): Deleted.
        (WebCore::RenderRegion::addLayoutOverflowForBox): Deleted.
        (WebCore::RenderRegion::addVisualOverflowForBox): Deleted.
        (WebCore::RenderRegion::layoutOverflowRectForBox): Deleted.
        (WebCore::RenderRegion::visualOverflowRectForBox): Deleted.
        (WebCore::RenderRegion::layoutOverflowRectForBoxForPropagation): Deleted.
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation): Deleted.
        (WebCore::CurrentRenderRegionMaintainer::CurrentRenderRegionMaintainer): Deleted.
        (WebCore::CurrentRenderRegionMaintainer::~CurrentRenderRegionMaintainer): Deleted.
        * rendering/RenderFragmentContainer.h: Copied from rendering/RenderRegion.h.
        (WebCore::RenderFragmentContainer::isRenderFragmentContainerSet const):
        (WebCore::RenderFragmentContainer::absoluteQuadsForBoxInFragment):
        (WebCore::CurrentRenderFragmentContainerMaintainer::fragment const):
        (WebCore::RenderRegion::setFlowThreadPortionRect): Deleted.
        (WebCore::RenderRegion::flowThreadPortionRect const): Deleted.
        (WebCore::RenderRegion::flowThread const): Deleted.
        (WebCore::RenderRegion::isValid const): Deleted.
        (WebCore::RenderRegion::setIsValid): Deleted.
        (WebCore::RenderRegion::logicalTopForFlowThreadContent const): Deleted.
        (WebCore::RenderRegion::logicalBottomForFlowThreadContent const): Deleted.
        (WebCore::RenderRegion::isRenderRegionSet const): Deleted.
        (WebCore::RenderRegion::collectLayerFragments): Deleted.
        (WebCore::RenderRegion::absoluteQuadsForBoxInRegion): Deleted.
        (WebCore::CurrentRenderRegionMaintainer::region const): Deleted.
        * rendering/RenderFragmentContainerSet.cpp: Copied from rendering/RenderRegionSet.cpp.
        (WebCore::RenderFragmentContainerSet::RenderFragmentContainerSet):
        (WebCore::RenderFragmentContainerSet::installFlowThread):
        (WebCore::RenderFragmentContainerSet::expandToEncompassFlowThreadContentsIfNeeded):
        (WebCore::RenderRegionSet::RenderRegionSet): Deleted.
        (WebCore::RenderRegionSet::installFlowThread): Deleted.
        (WebCore::RenderRegionSet::expandToEncompassFlowThreadContentsIfNeeded): Deleted.
        * rendering/RenderFragmentContainerSet.h: Copied from rendering/RenderRegionSet.h.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeMarginLogicalSizeForChild const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::positionForPoint):
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInFragment const):
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInRegion const): Deleted.
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canBeComposited const):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::positionForPoint):
        * rendering/RenderLineBreak.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::addFragmentToThread):
        (WebCore::RenderMultiColumnFlowThread::willBeRemovedFromTree):
        (WebCore::RenderMultiColumnFlowThread::processPossibleSpannerDescendant):
        (WebCore::RenderMultiColumnFlowThread::flowThreadRelativeWillBeRemoved):
        (WebCore::RenderMultiColumnFlowThread::setPageBreak):
        (WebCore::RenderMultiColumnFlowThread::updateMinimumPageHeight):
        (WebCore::RenderMultiColumnFlowThread::fragmentAtBlockOffset const):
        (WebCore::RenderMultiColumnFlowThread::setFragmentRangeForBox):
        (WebCore::RenderMultiColumnFlowThread::addForcedFragmentBreak):
        (WebCore::RenderMultiColumnFlowThread::offsetFromContainer const):
        (WebCore::RenderMultiColumnFlowThread::mapAbsoluteToLocalPoint const):
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromFragmentToFlow const):
        (WebCore::RenderMultiColumnFlowThread::mapFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationOffsetFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlowThread::addRegionToThread): Deleted.
        (WebCore::RenderMultiColumnFlowThread::regionAtBlockOffset const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::setRegionRangeForBox): Deleted.
        (WebCore::RenderMultiColumnFlowThread::addForcedRegionBreak): Deleted.
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromRegionToFlow const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::mapFromFlowToRegion const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationOffsetFromFlowToRegion const): Deleted.
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromFlowToRegion const): Deleted.
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        (WebCore::RenderMultiColumnSet::beginFlow):
        (WebCore::RenderMultiColumnSet::endFlow):
        (WebCore::RenderMultiColumnSet::layout):
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::adjustFragmentBoundsFromFlowThreadPortionRect const):
        (WebCore::RenderMultiColumnSet::positionForPoint):
        (WebCore::RenderMultiColumnSet::translateFragmentPointToFlowThread const):
        (WebCore::RenderMultiColumnSet::updateHitTestResult):
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect const): Deleted.
        (WebCore::RenderMultiColumnSet::translateRegionPointToFlowThread const): Deleted.
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint const):
        (WebCore::RenderObject::repaintUsingContainer const):
        (WebCore::RenderObject::outputRegionsInformation const):
        (WebCore::RenderObject::positionForPoint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderFragmentContainer const):
        (WebCore::RenderObject::isRenderRegion const): Deleted.
        * rendering/RenderRegion.cpp: Removed.
        * rendering/RenderRegion.h: Removed.
        * rendering/RenderRegionSet.cpp: Removed.
        * rendering/RenderRegionSet.h: Removed.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderReplaced.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::overflowClipRect):
        * rendering/RenderTable.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/RenderingAllInOne.cpp:
        * rendering/RootInlineBox.cpp:
        (WebCore::containingFragmentMap):
        (WebCore::RootInlineBox::~RootInlineBox):
        (WebCore::RootInlineBox::containingFragment const):
        (WebCore::RootInlineBox::clearContainingFragment):
        (WebCore::RootInlineBox::setContainingFragment):
        (WebCore::containingRegionMap): Deleted.
        (WebCore::RootInlineBox::containingRegion const): Deleted.
        (WebCore::RootInlineBox::clearContainingRegion): Deleted.
        (WebCore::RootInlineBox::setContainingRegion): Deleted.
        * rendering/RootInlineBox.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::logicalLeftOffset const):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::positionForPoint):
        * rendering/svg/RenderSVGText.h:

2017-09-26  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Introduce CurlResponse to hold response information among threads.
        https://bugs.webkit.org/show_bug.cgi?id=177496

        Reviewed by Alex Christensen.

        * platform/network/curl/AuthenticationChallenge.h:
        * platform/network/curl/AuthenticationChallengeCurl.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::protectionSpaceFromHandle):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getHttpConnectCode):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlResponse.h: Added.
        (WebCore::CurlResponse::isolatedCopy const):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::didReceiveAllHeaders):
        (WebCore::ResourceHandleCurlDelegate::didReceiveContentData):
        (WebCore::ResourceHandleCurlDelegate::handleLocalReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::didFinish):
        (WebCore::ResourceHandleCurlDelegate::handleDataURL):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):
        (WebCore::isHttpInfo): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.h:
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::setResponseFired): Deleted.
        (WebCore::ResourceResponse::responseFired): Deleted.
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::appendHTTPHeaderField):
        (WebCore::ResourceResponse::setStatusLine):

2017-09-26  Chris Dumez  <cdumez@apple.com>

        Make StoredCredentials an enum class and rename its header
        https://bugs.webkit.org/show_bug.cgi?id=177455

        Reviewed by Youenn Fablet.

        Follow-up to r222467, actually make it an enum *class*.

        * platform/network/StoredCredentialsPolicy.h:
        (): Deleted.

2017-09-26  Daniel Bates  <dabates@apple.com>

        Remove extraneous includes of TextRun.h
        https://bugs.webkit.org/show_bug.cgi?id=177499

        Reviewed by Myles C. Maxfield.

        No functionality changed. So, no new tests.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/mac/DragImageMac.mm:
        * platform/text/ios/LocalizedDateCache.mm:
        * testing/InternalSettings.cpp:

2017-09-26  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

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

        Reviewed by Myles C. Maxfield.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/MediaController.cpp:
        (MediaController::MediaController):
        * html/MediaController.h:
        * platform/Clock.cpp: Removed.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        * platform/mac/PlatformClockCA.cpp: Removed. PlatformClockCA is no longer used.
        * platform/mac/PlatformClockCA.h: Removed.

2017-09-26  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Change member variable of CurlHandle to use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=177492

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::getResponse const):
        (WebCore::CurlDownload::setupTransfer):
        (WebCore::CurlDownload::didCompleteTransfer):
        (WebCore::CurlDownload::didCancelTransfer):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::addHeaders): Deleted.
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::start):
        (WebCore::ResourceHandleCurlDelegate::setDefersLoading):
        (WebCore::ResourceHandleCurlDelegate::setAuthentication):
        (WebCore::ResourceHandleCurlDelegate::setupTransfer):
        (WebCore::ResourceHandleCurlDelegate::didCompleteTransfer):
        (WebCore::ResourceHandleCurlDelegate::didCancelTransfer):
        (WebCore::ResourceHandleCurlDelegate::didReceiveAllHeaders):
        (WebCore::ResourceHandleCurlDelegate::handleLocalReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::setupPOST):
        (WebCore::ResourceHandleCurlDelegate::setupPUT):
        (WebCore::ResourceHandleCurlDelegate::setupFormData):
        (WebCore::ResourceHandleCurlDelegate::applyAuthentication):
        (WebCore::ResourceHandleCurlDelegate::getNetworkLoadMetrics):
        (WebCore::ResourceHandleCurlDelegate::willSetupSslCtx):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):
        (WebCore::ResourceHandleCurlDelegate::didReceiveData):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-26  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Simplify JobManager's duty and move the tasks to client
        for easy handling. Also simlify CurlHandle by not storing internal
        error value as a member variable.
        https://bugs.webkit.org/show_bug.cgi?id=177466

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::perform):
        (WebCore::CurlHandle::pause):
        (WebCore::CurlHandle::getEffectiveURL):
        (WebCore::CurlHandle::getPrimaryPort):
        (WebCore::CurlHandle::getResponseCode):
        (WebCore::CurlHandle::getContentLength):
        (WebCore::CurlHandle::getHttpAuthAvail):
        (WebCore::CurlHandle::getNetworkLoadMetrics):
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlHandle::errorCode const): Deleted.
        (WebCore::CurlHandle::setErrorCode): Deleted.
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::cancel):
        (WebCore::CurlDownload::setupTransfer):
        (WebCore::CurlDownload::didCompleteTransfer):
        (WebCore::CurlDownload::didCancelTransfer):
        (WebCore::CurlDownload::setupRequest): Deleted.
        (WebCore::CurlDownload::notifyFinish): Deleted.
        (WebCore::CurlDownload::notifyFail): Deleted.
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlJobManager.cpp:
        (WebCore::CurlJobList::startJobs):
        (WebCore::CurlJobList::finishJobs):
        (WebCore::CurlJobManager::add):
        (WebCore::CurlJobManager::cancel):
        (WebCore::CurlJobManager::callOnJobThread):
        (WebCore::CurlJobManager::updateJobList):
        (WebCore::CurlJobManager::workerThread):
        (WebCore::CurlJobList::notifyResult): Deleted.
        * platform/network/curl/CurlJobManager.h:
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::start):
        (WebCore::ResourceHandleCurlDelegate::cancel):
        (WebCore::ResourceHandleCurlDelegate::dispatchSynchronousJob):
        (WebCore::ResourceHandleCurlDelegate::setupTransfer):
        (WebCore::ResourceHandleCurlDelegate::didCompleteTransfer):
        (WebCore::ResourceHandleCurlDelegate::didCancelTransfer):
        (WebCore::ResourceHandleCurlDelegate::didFinish):
        (WebCore::ResourceHandleCurlDelegate::didFail):
        (WebCore::ResourceHandleCurlDelegate::setupRequest): Deleted.
        (WebCore::ResourceHandleCurlDelegate::notifyFinish): Deleted.
        (WebCore::ResourceHandleCurlDelegate::notifyFail): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-26  Daniel Bates  <dabates@apple.com>

        Cleanup: Consolidate non-selection background painting code for text
        https://bugs.webkit.org/show_bug.cgi?id=177490

        Reviewed by Zalan Bujtas.

        Share code to paint the background of a text subrange instead of duplicating
        it for text match markers and composition underlines.

        Additionally standardize the argument order for various paint functions and
        make more paint functions private.

        No functionality changed. So, no new tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Updated code as needed for changes below.
        (WebCore::InlineTextBox::paintSelection): Add FIXME comment to fix up this code for
        combined text while I am in this file.
        (WebCore::InlineTextBox::paintTextSubrangeBackground): Added. Extracted from the common code of
        paintCompositionBackground() and paintTextMatchMarker().
        (WebCore::InlineTextBox::paintCompositionBackground): Modified to use paintTextSubrangeBackground().
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::paintDocumentMarker): Add FIXME comment to fix up this code for
        combined and hyphenated text while I am here.
        (WebCore::InlineTextBox::paintDocumentMarkers): Update code as needed for changes
        above.
        * rendering/InlineTextBox.h: Change visibility of paintCompositionBackground(),
        paintDocumentMarkers() and paintCompositionUnderline() from protected to private
        as no derived class makes use of these functions. Group related functions to
        improve readability.

2017-09-26  Dean Jackson  <dino@apple.com>

        Unreviewed. Remove hardware concurrency from features list.

        * features.json:

2017-09-26  Antti Koivisto  <antti@apple.com>

        REGRESSION (222040): Google Maps Street View CrashTracer: [USER] com.apple.WebKit.WebContent.Development at com.apple.WebCore: WebCore::PropertyWrapperAcceleratedTransform::blend const + 92
        https://bugs.webkit.org/show_bug.cgi?id=177485

        Reviewed by Zalan Bujtas.

        We crash when animating between two different types of transforms because renderer is null for the first frame.

        Test: fast/animation/animation-mixed-transform-crash.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::currentStyle const):

            Add a way to get the current style from animations.
            This is either the render style or the inital style.

        * page/animation/AnimationBase.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

            Renderer may be null when computing the first frame of the animation. Null check.

        (WebCore::blendFilter):

            Here too.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.h:

2017-09-26  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Add ClearKey support for persistent session data load and removal
        https://bugs.webkit.org/show_bug.cgi?id=177442

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the session data load and removal for persistent sessions
        in the ClearKey implementation of the CDMInstance interface.

        CDMInstanceClearKey::loadSession() finds data for the specified session
        name, if any, and constructs a corresponding KeyStatusVector object that
        holds information about all known keys associated with this session before
        dispatching the LoadSessionCallback asynchronously.

        CDMInstanceClearKey::removeSessionData() similarly finds the session data,
        if any, and then removes it from the state tracker. The key data is still
        reused to construct the KeyStatusVector object that holds information
        about all the keys that were stored for this session. The key information
        is also embedded in the 'license release' JSON message. Both key status
        vector and message are then used in the RemoveSessionDataCallback dispatch
        that is again done asynchronously.

        No new tests -- affected tests have their baselines updated.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::loadSession):
        (WebCore::CDMInstanceClearKey::removeSessionData):

2017-09-26  Ms2ger  <Ms2ger@igalia.com>

        Update compressedTexImage3D to match the signature in the specification.
        https://bugs.webkit.org/show_bug.cgi?id=177431

        Reviewed by Sam Weinig.

        No new tests: not much point in adding tests now; this method doesn't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::compressedTexImage3D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-25  Timothy Horton  <timothy_horton@apple.com>

        Fix the macOS WebCore CMake build

        * PlatformMac.cmake:

2017-09-25  Alex Christensen  <achristensen@webkit.org>

        Make PolicyAction an encodable enum class
        https://bugs.webkit.org/show_bug.cgi?id=177480

        Reviewed by Antti Koivisto.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/FrameLoaderTypes.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2017-09-25  Timothy Horton  <timothy_horton@apple.com>

        Fix the macOS WebCore CMake build

        * PlatformMac.cmake:

2017-09-25  Frederik Riedel  <riedel@apple.com>

        Expose way to set values of classified form controls as {Legacy WebKit, WebKit} SPI
        https://bugs.webkit.org/show_bug.cgi?id=174394
        <rdar://problem/33183504>

        Reviewed by Ryosuke Niwa.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/ios/AutofillElements.cpp: Added.
        (WebCore::isAutofillableElement): Returns true if the element is of type text or email.
        (WebCore::nextAutofillableElement): Returns the next focusable element that is autofillable.
        (WebCore::previousAutofillableElement): Returns the previous focusable element that is autofillable.
        (WebCore::AutofillElements::computeAutofillElements): Computes the autofill elements (username & password)
        for a given input element.
        (WebCore::AutofillElements::autofill): Fills the credentials into the pair of username/password elements.
        * editing/ios/AutofillElements.h: Added.

2017-09-25  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: move Console.addInspectedNode to DOM.setInspectedNode
        https://bugs.webkit.org/show_bug.cgi?id=176827

        Reviewed by Joseph Pecoraro.

        Tests: http/tests/inspector/dom/cross-domain-inspected-node-access.html
               inspector/dom/setInspectedNode.html

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

        * inspector/PageConsoleAgent.h:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::addInspectedNode): Deleted.

        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::addInspectedNode): Deleted.

2017-09-25  Sam Weinig  <sam@webkit.org>

        [WebIDL] Factor out IsExceptionOr check from toJS/toJSNewlyCreated signature
        https://bugs.webkit.org/show_bug.cgi?id=177457

        Reviewed by Youenn Fablet.

        Add new type, IsExceptionOr, that factors out the previously repeated logic of determining
        if a type is an ExceptionOr template type.

        * bindings/js/JSDOMConvertBase.h:
        (WebCore::toJS):
        (WebCore::toJSNewlyCreated):

2017-09-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Refactor and improve methods in the CurlHandle
        https://bugs.webkit.org/show_bug.cgi?id=177373

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlShareHandle::~CurlShareHandle):
        (WebCore::CurlMultiHandle::~CurlMultiHandle):
        (WebCore::CurlHandle::~CurlHandle):
        (WebCore::CurlHandle::initialize):
        (WebCore::CurlHandle::pause):
        (WebCore::CurlHandle::setUrl):
        (WebCore::CurlHandle::appendRequestHeaders):
        (WebCore::CurlHandle::appendRequestHeader):
        (WebCore::CurlHandle::removeRequestHeader):
        (WebCore::CurlHandle::enableRequestHeaders):
        (WebCore::CurlHandle::getContentLength):
        (WebCore::CurlHandle::getNetworkLoadMetrics):
        (WebCore::CurlHandle::errorDescription const): Deleted.
        (WebCore::CurlHandle::clearUrl): Deleted.
        (WebCore::CurlHandle::getContentLenghtDownload): Deleted.
        (WebCore::CurlHandle::getTimes): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlHandle::privateData const): Deleted.
        (WebCore::CurlHandle::setPrivateData): Deleted.
        (WebCore::CurlHandle::url const): Deleted.
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::setupRequest):
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::certVerifyCallback):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::setupRequest):
        (WebCore::ResourceHandleCurlDelegate::setupPUT):
        (WebCore::ResourceHandleCurlDelegate::getNetworkLoadMetrics):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):

2017-09-25  Youenn Fablet  <youenn@apple.com>

        WebRTC video does not resume receiving when switching back to Safari 11 on iOS
        https://bugs.webkit.org/show_bug.cgi?id=175472
        <rdar://problem/33860863>

        Reviewed by Darin Adler.

        Test: webrtc/video-interruption.html and manual testing.

        Using new SetActive method from libwebrtc encoder/decoder to enable/disable them based on interuptions.
        For that purpose, LibWebRTCProvider is now storing the peer connection factory and keeping track of the encoder/decoder factories.
        LibWebRTCProvider is then notified by WebPage when backgrounded/foregrounded.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::staticFactoryAndThreads):
        (WebCore::initializePeerConnectionFactoryAndThreads):
        (WebCore::LibWebRTCProvider::factory):
        (WebCore::LibWebRTCProvider::setPeerConnectionFactory):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        (WebCore::LibWebRTCProvider::setActive):
        (WebCore::LibWebRTCProvider::webRTCAvailable):
        (WebCore::LibWebRTCProvider::mayResumePlayback): Deleted.
        (WebCore::LibWebRTCProvider::suspendPlayback): Deleted.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/VideoToolBoxDecoderFactory.cpp: Copied from Source/WebCore/platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp.
        (WebCore::VideoToolboxVideoDecoderFactory::setActive):
        (WebCore::VideoToolboxVideoDecoderFactory::CreateVideoDecoder):
        (WebCore::VideoToolboxVideoDecoderFactory::DestroyVideoDecoder):
        * platform/mediastream/libwebrtc/VideoToolBoxDecoderFactory.h: Copied from Source/WebCore/platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.h.
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp:
        (WebCore::VideoToolboxVideoEncoderFactory::setActive):
        (WebCore::VideoToolboxVideoEncoderFactory::CreateSupportedVideoEncoder):
        (WebCore::VideoToolboxVideoEncoderFactory::DestroyVideoEncoder):
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::useRealRTCPeerConnectionFactory):
        (WebCore::useMockRTCPeerConnectionFactory):
        * testing/MockLibWebRTCPeerConnection.h:

2017-09-25  Sam Weinig  <sam@webkit.org>

        Remove unused EditorClient functions
        https://bugs.webkit.org/show_bug.cgi?id=177463

        Reviewed by Alex Christensen.

        Remove unused EditorClient functions.

        * loader/EmptyClients.cpp:
        * page/EditorClient.h:

2017-09-25  Per Arne Vollan  <pvollan@apple.com>

        Crash in WebCore::TreeScope::documentScope
        https://bugs.webkit.org/show_bug.cgi?id=176159

        Reviewed by Ryosuke Niwa.

        When all children are replaced with a new node in ContainerNode::replaceAllChildren,
        the treescope of the new node should be set after the call to willRemoveChildren,
        since this call can fire events, and execute JS code, which might change the treescope
        of the container node.

        Test: fast/dom/crash-moving-subtree-between-documents.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceAllChildren):

2017-09-25  Alex Christensen  <achristensen@webkit.org>

        Make Attribute an enum class
        https://bugs.webkit.org/show_bug.cgi?id=177414

        Reviewed by Yusuke Suzuki.

        No change in behavior.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/JSDOMMapLike.cpp:
        (WebCore::initializeBackingMap):
        (WebCore::createBackingMap):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::jsDOMWindowPropertiesGetOwnPropertySlotNamedItemGetter):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementCustomGetOwnPropertySlot):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateIndexedGetter):
        (GenerateNamedGetter):
        (GetJSCAttributesForAttribute):
        (GeneratePropertiesHashTable):
        (addUnscopableProperties):
        (GenerateImplementation):
        (GenerateCallbackImplementationContent):
        (GenerateHashTableValueArray):
        (GenerateConstructorHelperMethods):
        (ComputeFunctionSpecial):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceNameConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::JSMapLikeConstructor::initializeProperties):
        (WebCore::JSMapLikePrototype::finishCreation):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::JSReadOnlyMapLikeConstructor::initializeProperties):
        (WebCore::JSReadOnlyMapLikePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactionsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::JSTestCallbackInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::initializeProperties):
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySettingConstructor::initializeProperties):
        (WebCore::JSTestEnabledBySetting::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::initializeProperties):
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObjectConstructor::initializeProperties):
        (WebCore::JSTestGlobalObject::finishCreation):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestIndexedSetterNoIdentifier::getOwnPropertySlot):
        (WebCore::JSTestIndexedSetterNoIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestIndexedSetterThrowingException::getOwnPropertySlot):
        (WebCore::JSTestIndexedSetterThrowingException::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestIndexedSetterWithIdentifier::getOwnPropertySlot):
        (WebCore::JSTestIndexedSetterWithIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscoreConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterableConstructor::initializeProperties):
        (WebCore::JSTestIterablePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::getOwnPropertySlot):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::initializeProperties):
        (WebCore::JSTestNamedConstructorNamedConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterNoIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedDeleterNoIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterThrowingException::getOwnPropertySlot):
        (WebCore::JSTestNamedDeleterThrowingException::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterWithIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedDeleterWithIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetterConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterWithIndexedGetter::getOwnPropertySlot):
        (WebCore::JSTestNamedDeleterWithIndexedGetter::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWithConstructor::initializeProperties):
        (WebCore::JSTestNamedGetterCallWith::getOwnPropertySlot):
        (WebCore::JSTestNamedGetterCallWith::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedGetterNoIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedGetterNoIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedGetterWithIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedGetterWithIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterNoIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterNoIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterThrowingException::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterThrowingException::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithIdentifier::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterWithIdentifier::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithIndexedGetter::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterWithIndexedGetter::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithOverrideBuiltinsConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithOverrideBuiltins::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterWithOverrideBuiltins::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::getOwnPropertySlot):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::initializeProperties):
        (WebCore::JSTestNodePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::initializeProperties):
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::JSTestObj::getOwnPropertySlot):
        (WebCore::JSTestObj::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequenceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::initializeProperties):
        (WebCore::JSTestOverrideBuiltins::getOwnPropertySlot):
        (WebCore::JSTestOverrideBuiltins::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEventConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerializationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::JSTestSerializationIndirectInheritanceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInheritConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinalConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToStringConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttributeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttributeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::initializeProperties):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertySlotByIndex):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::getOwnPropertySlot):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::getOwnPropertySlot):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):

2017-09-25  Alex Christensen  <achristensen@webkit.org>

        Stop using PolicyCallback
        https://bugs.webkit.org/show_bug.cgi?id=176088

        Reviewed by Andy Estes.

        This is what lambdas are for. No change in behavior.
        Cancelling the callback is now the responsibility of the FrameLoaderClient, to whom we have given the lambda.
        That is why there are changes in WebKit and WebKitLegacy where the FrameLoaderClient::cancelPolicyCheck finds the lambda it has stored.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoaderClient.h:
        * loader/PolicyCallback.cpp: Removed.
        * loader/PolicyCallback.h: Removed.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::stopCheck):
        (WebCore::PolicyChecker::continueAfterNavigationPolicy): Deleted.
        * loader/PolicyChecker.h:
        (WebCore::PolicyChecker::setSuggestedFilename): Deleted.

2017-09-25  Youenn Fablet  <youenn@apple.com>

        MediaStreamTrack.getSettings should compute its deviceId/groupId like enumerateDevices
        https://bugs.webkit.org/show_bug.cgi?id=177433

        Reviewed by Jer Noble.

        Covered by improved test.

        Hash the deviceId returned by getSettings as done by enumerateDevices/getUserMedia.
        Do the same thing for groupId.
        Make sure mock sources have their deviceId set consistently with mock devices.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::getSettings const):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSource::createMuted):
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSource::createMuted):
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        * platform/mock/MockRealtimeVideoSource.h:

2017-09-25  Chris Dumez  <cdumez@apple.com>

        Make StoredCredentials an enum class and rename its header
        https://bugs.webkit.org/show_bug.cgi?id=177455

        Reviewed by Youenn Fablet.

        Make StoredCredentials an enum class and rename its header for clarity. This was error-prone because 0 meant
        "allow" and and 1 meant "do not allow". It was trivial to convert it to a boolean by mistake and get the
        opposite behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::updateRequestForAccessControl):
        (WebCore::createAccessControlPreflightRequest):
        (WebCore::passesAccessControlCheck):
        (WebCore::validatePreflightResponse):
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        (WebCore::CrossOriginPreflightChecker::doPreflight):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest const):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/CrossOriginPreflightResultCache.h:
        (WebCore::CrossOriginPreflightResultCacheItem::CrossOriginPreflightResultCacheItem):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::redirectReceived):
        (WebCore::DocumentThreadableLoader::preflightSuccess):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/LoaderStrategy.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::shouldUseCredentialStorage):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        * loader/ResourceLoaderOptions.h:
        (WebCore::ResourceLoaderOptions::ResourceLoaderOptions):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkResponseCrossOriginAccessControl):
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::isolatedCopy const):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::loadFrom):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin):
        (WebCore::CachedResourceRequest::updateForAccessControl):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::startLoading):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::loadBlobResourceSynchronously):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/ResourceHandle.h:
        * platform/network/StoredCredentialsPolicy.h: Renamed from Source/WebCore/platform/network/ResourceHandleTypes.h.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * style/StylePendingResources.cpp:
        (WebCore::Style::loadPendingImage):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

2017-09-25  Sam Weinig  <sam@webkit.org>

        Remove unnecessary userVisibleString EditorClient function
        https://bugs.webkit.org/show_bug.cgi?id=177456

        Reviewed by Dan Bernstein.

        The implementation of userVisibleString has been in WebCore for sometime (in WebCoreNSURLExtras)
        so there is no need to call through the EditorClient, just for it to call back to WebCore.

        * editing/Editor.h:

            Keep userVisibleString helper function but make it static, as it no longer needs
            any state. It is useful to have this helper, so non-ObjC code in Editor can get a
            userVisibleString.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::userVisibleString):

            Call through to the WebCoreNSURLExtras implementation.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::plainTextFromPasteboard):
        (WebCore::Editor::writeImageToPasteboard):
        (WebCore::Editor::userVisibleString): Deleted.
        * editing/mac/WebContentReaderMac.mm:
        (WebCore::WebContentReader::readFilenames):

            Replace client calls with direct calls.

        * loader/EmptyClients.cpp:
        * page/EditorClient.h:

            Remove client function.

        * testing/Internals.mm:
        (WebCore::Internals::userVisibleString):

            Replace client call with direct call.

2017-09-25  Timothy Horton  <timothy_horton@apple.com>

        Fix the build with <attachment> disabled

        * editing/mac/WebContentReaderMac.mm:

2017-09-25  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed Windows build fix.

        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::readNativeSampleBuffer):

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

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

        broke iOS build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Add WKContentRuleList notify action type"
        https://bugs.webkit.org/show_bug.cgi?id=177013
        http://trac.webkit.org/changeset/222455

2017-09-25  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Building release with -DLOG_DISABLED=0 fails
        https://bugs.webkit.org/show_bug.cgi?id=177441

        Reviewed by Michael Catanzaro.

        No new tests, it is a build fix.

        * Modules/indexeddb/IDBKeyPath.cpp:
        * Modules/indexeddb/IDBKeyPath.h:

2017-09-25  Brent Fulgham  <bfulgham@apple.com>

        Switch back to partitioning (rather than blocking) prevalent origins without interaction
        https://bugs.webkit.org/show_bug.cgi?id=177452
        <rdar://problem/34632618>

        Reviewed by Chris Dumez.

        Temporarily revert to "partition-only" behavior, due to site compatibility issues with
        full blocking.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setPrevalentDomainsToPartitionOrBlockCookies):

2017-09-25  Alex Christensen  <achristensen@webkit.org>

        Separate form submission from PolicyChecker infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=177396

        Reviewed by Geoffrey Garen.

        We used PolicyChecker for WillSubmitForm even though we just need a completion handler
        with no parameters.  That is what lambdas and WTF::Functions are for.

        No change in behavior.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchWillSubmitForm):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): Deleted.
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::continueLoadAfterWillSubmitForm): Deleted.
        * loader/PolicyChecker.h:

2017-09-25  Alex Christensen  <achristensen@webkit.org>

        Add WKContentRuleList notify action type
        https://bugs.webkit.org/show_bug.cgi?id=177013
        <rdar://problem/31073936>

        Reviewed by Darin Adler.

        Covered by new API tests.

        * contentextensions/ContentExtensionActions.h:
        (WebCore::ContentExtensions::hasStringArgument):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::resolvePendingDisplayNoneActions):
        (WebCore::ContentExtensions::serializeActions):
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        (WebCore::ContentExtensions::Action::deserializeType):
        (WebCore::ContentExtensions::Action::serializedLength):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForPingLoad):
        (WebCore::ContentExtensions::applyBlockedStatusToRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/PingLoader.cpp:
        (WebCore::processContentExtensionRulesForLoad):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::applyBlockedStatus):
        * loader/cache/CachedResourceRequest.h:
        * page/ChromeClient.h:

2017-09-25  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove GetterMayThrowException
        https://bugs.webkit.org/show_bug.cgi?id=177422

        Reviewed by Youenn Fablet.

        * bindings/js/JSDOMConvertBase.h:
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):

            Add overloads of toJS and toJSNewlyCreated that take ThrowScopes and a value that
            is not an ExceptionOr (keeping the existing overloads that take an ExceptionOr).
            This allows NativeToJSValue to not need to know of a conversion can throw, as the
            c++ type system will now make the determination for it.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateSerializerDefinition):
        (NativeToJSValueUsingReferences):
        (NativeToJSValueUsingPointers):
        (NativeToJSValue):

            Always assume an exception can be thrown for attributes now that the converters will
            do the right thing based on whether the value is an ExceptionOr or not. Also, remove 
            $suppressExceptionCheck and $excludeNullability, they were never being set.

        * bindings/scripts/IDLAttributes.json:

            Remove GetterMayThrowException from the list of supported extended attributes.

        * Modules/indexeddb/IDBRequest.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * dom/Document.idl:
        * html/HTMLInputElement.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * svg/SVGLength.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XPathResult.idl:
        
            Remove GetterMayThrowException extended attribute from IDL files.

        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.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/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.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/JSTestStringifierReadOnlyAttribute.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

            Update test results.

2017-09-25  Timothy Horton  <timothy_horton@apple.com>

        Make progress on getting Mac CMake building again
        https://bugs.webkit.org/show_bug.cgi?id=177443

        Unreviewed, just "fixing" the build.

        * PlatformMac.cmake:
        Add some missing files and include paths.

2017-09-25  Ms2ger  <Ms2ger@igalia.com>

        Update waitSync and the TIMEOUT_IGNORED constant to use signed integers.
        https://bugs.webkit.org/show_bug.cgi?id=177239

        Reviewed by Žan Doberšek.

        This matches the specification.

        Test: fast/canvas/webgl/webgl2/constants.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::waitSync):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-25  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        Align Media Source Extension IDL with spec
        https://bugs.webkit.org/show_bug.cgi?id=177369

        Reviewed by Sam Weinig.

        Align IDL as per specification:
         - https://www.w3.org/TR/media-source/

        * Modules/mediasource/AudioTrackMediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/TextTrackMediaSource.idl:
        * Modules/mediasource/VideoTrackMediaSource.idl:

2017-09-25  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Small refactoring adding RenderGrid::contentAlignment()
        https://bugs.webkit.org/show_bug.cgi?id=177130

        Reviewed by Sergio Villar Senin.

        As a follow-up of r221931, this patch does a small refactoring
        adding a new method RenderGrid::contentAlignment()
        that is used from RenderGrid and GridTrackSizingAlgorithm.

        No new tests, no change of behavior.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::stretchAutoTracks):
        * rendering/RenderGrid.cpp:
        (WebCore::contentAlignmentNormalBehaviorGrid):
        (WebCore::RenderGrid::contentAlignment const):
        (WebCore::RenderGrid::computeContentPositionAndDistributionOffset const):
        (WebCore::RenderGrid::contentAlignmentNormalBehaviorGrid): Deleted.
        * rendering/RenderGrid.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::resolvedContentAlignment):
        (WebCore::RenderStyle::resolvedAlignContent const):
        (WebCore::RenderStyle::resolvedJustifyContent const):
        * rendering/style/RenderStyle.h:

2017-09-25  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] fit-content() tracks shouldn't stretch
        https://bugs.webkit.org/show_bug.cgi?id=177300

        Reviewed by Sergio Villar Senin.

        The spec is pretty clear regarding this
        (https://drafts.csswg.org/css-grid/#algo-stretch):
          "This step sizes expands tracks that have an auto max track sizing
           function by dividing any remaining positive, definite free space
           equally amongst them."

        The fit-content() tracks don't have an auto max track sizing function,
        so they shouldn't be considered in this step of the algorithm.

        The patch modifies GridTrackSizingAlgorithm::initializeTrackSizes()
        so it doesn't consider fit-content() tracks as auto sized ones
        (which are the ones later stretched in the last step of the algorithm).

        Test: imported/w3c/web-platform-tests/css/css-grid-1/alignment/grid-fit-content-tracks-dont-stretch-001.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
        (WebCore::GridTrackSizingAlgorithm::stretchAutoTracks):
        (WebCore::GridTrackSizingAlgorithm::setup):
        (WebCore::GridTrackSizingAlgorithm::reset):
        * rendering/GridTrackSizingAlgorithm.h:

2017-09-24  Antti Koivisto  <antti@apple.com>

        Remove CSS regions related fields from RenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=177415

        Reviewed by Sam Weinig.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator RegionFragment const): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::avoidsFloats const): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout const):
        * rendering/style/RenderStyle.h:
        (WebCore::pseudoElementRendererIsNeeded):
        (WebCore::RenderStyle::hasFlowInto const): Deleted.
        (WebCore::RenderStyle::flowThread const): Deleted.
        (WebCore::RenderStyle::hasFlowFrom const): Deleted.
        (WebCore::RenderStyle::regionThread const): Deleted.
        (WebCore::RenderStyle::regionFragment const): Deleted.
        (WebCore::RenderStyle::setFlowThread): Deleted.
        (WebCore::RenderStyle::setRegionThread): Deleted.
        (WebCore::RenderStyle::setRegionFragment): Deleted.
        (WebCore::RenderStyle::initialFlowThread): Deleted.
        (WebCore::RenderStyle::initialRegionThread): Deleted.
        (WebCore::RenderStyle::initialRegionFragment): Deleted.
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2017-09-24  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] Object attributes are missing for ARIA live region roles
        https://bugs.webkit.org/show_bug.cgi?id=171174

        Reviewed by Chris Fleizach.

        Expose the values of aria-live, aria-atomic, and aria-relevant via AtkObject
        attributes on live region elements and their descendants. In order to accomplish
        exposure on descendants, add AccessibilityObject::ariaLiveRegionAncestor(). Add an
        optional argument, excludeIfOff, to AccessibilityObject::isInsideARIALiveRegion()
        and AccessibilityObject::supportsARIALiveRegion(). This is needed because we need
        to expose live region properties via ATK even in the case where the live region
        is disabled/off, but supportsARIALiveRegion() deliberately checks if the live
        region is enabled.

        Tests: accessibility/aria-liveregion-marquee-default.html
               accessibility/aria-liveregions-attributes.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isInsideARIALiveRegion const):
        (WebCore::AccessibilityObject::ariaLiveRegionAncestor const):
        (WebCore::AccessibilityObject::supportsARIALiveRegion const):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2017-09-23  Youenn Fablet  <youenn@apple.com>

        Remove SetterMayThrowException
        https://bugs.webkit.org/show_bug.cgi?id=177408

        Reviewed by Sam Weinig.

        No change of behavior.

        Updating IDLs to remove SetterMayThrowException as it is no longer needed.
        Updating AttributeSetter to compute the return type using Functor.

        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/websockets/WebSocket.idl:
        * bindings/js/JSDOMAttribute.h:
        (WebCore::AttributeSetter::call):
        (WebCore::AttributeSetter<ExceptionOr<void>>::call): Deleted.
        (WebCore::AttributeSetter<void>::call): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterBodyDefinition):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.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/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/DeprecatedCSSOMValue.idl:
        * css/FontFace.idl:
        * css/MediaList.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.idl:
        * dom/ShadowRoot.idl:
        * html/DOMURL.idl:
        * html/HTMLElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/MediaController.idl:
        * html/track/VTTCue.idl:
        * html/track/VTTRegion.idl:
        * page/History.idl:
        * page/Location.idl:
        * svg/SVGAltGlyphElement.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimatedBoolean.idl:
        * svg/SVGAnimatedEnumeration.idl:
        * svg/SVGAnimatedInteger.idl:
        * svg/SVGAnimatedNumber.idl:
        * svg/SVGAnimatedString.idl:
        * svg/SVGLength.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumber.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGRect.idl:
        * svg/SVGViewSpec.idl:
        * xml/XMLHttpRequest.idl:

2017-09-23  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Images may render partial frames even after loading all the encoded data
        https://bugs.webkit.org/show_bug.cgi?id=177406

        Reviewed by Simon Fraser.

        Because we do not want to block the main thread waiting for the image decoding
        thread to terminate, we let the decoding thread finish its work even it will
        be thrown away. If a new decoding thread is created and the SynchronizedFixedQueue
        is reopened, the terminating decoding thread might have the chance to process
        a new frame request. After it finishes decoding it, it realize that it is
        terminating so it will drop the decoded frame to the floor. So the new request
        was not processed by the new thread and because it was processed by the
        terminating thread, nothing will be reported to the BitmapImage object and
        the renderer will not be repainted.

        The fix is to create a new SynchronizedFixedQueue every time a decoding 
        thread is created. This will guarantee that the terminating thread won't
        have access to the new frame request and will shut down after being notified
        by the old SynchronizedFixedQueue that it has been closed.

        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::frameRequestQueue):
        (WebCore::ImageFrameCache::startAsyncDecodingQueue):
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex):
        (WebCore::ImageFrameCache::stopAsyncDecodingQueue):
        * platform/graphics/ImageFrameCache.h:

2017-09-22  Zalan Bujtas  <zalan@apple.com>

        WeakPtrFactory should populate m_ref lazily.
        https://bugs.webkit.org/show_bug.cgi?id=177375

        Reviewed by Geoffrey Garen.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::CDM):
        * Modules/encryptedmedia/CDM.h:
        (WebCore::CDM::createWeakPtr):
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::load):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::remove):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::MediaKeys):
        (WebCore::MediaKeys::createSession):
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices):
        * Modules/mediastream/MediaDevices.h:
        (WebCore::MediaDevices::createWeakPtr):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::createWeakPtr):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::createWeakPtr):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::WebAnimation):
        * animation/WebAnimation.h:
        * css/FontFace.cpp:
        (WebCore::FontFace::FontFace):
        (WebCore::FontFace::createWeakPtr):
        (WebCore::FontFace::createWeakPtr const): Deleted.
        * css/FontFace.h:
        * css/StyleSheetContents.h:
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::DataTransferItemList):
        (WebCore::DataTransferItemList::add):
        (WebCore::DataTransferItemList::ensureItems const):
        (WebCore::DataTransferItemList::didSetStringData):
        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * dom/Document.h:
        (WebCore::Document::createWeakPtr):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::createWeakPtr):
        * html/HTMLPictureElement.h:
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::HTMLResourcePreloader::HTMLResourcePreloader):
        (WebCore::HTMLResourcePreloader::createWeakPtr):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::LinkLoader):
        * loader/LinkLoader.h:
        (WebCore::LinkLoader::createWeakPtr):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        * loader/MediaResourceLoader.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        * page/DOMWindow.h:
        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::TaskDispatcher):
        (WebCore::TaskDispatcher<Timer>::postTask):
        * platform/GenericTaskQueue.h:
        (WebCore::GenericTaskQueue::GenericTaskQueue):
        (WebCore::GenericTaskQueue::enqueueTask):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::createWeakPtr):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::createWeakPtr):
        * platform/Widget.h:
        (WebCore::Widget::createWeakPtr):
        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::createWeakPtr const):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::createWeakPtr):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        (WebCore::CDMSessionAVFoundationObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::CDMSessionAVFoundationObjC):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::CDMSessionAVStreamSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeWillChangeAtTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::TextureCacheCV):
        (WebCore::TextureCacheCV::textureFromImage):
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
        * platform/ios/RemoteCommandListenerIOS.h:
        (WebCore::RemoteCommandListenerIOS::createWeakPtr):
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListenerIOS::RemoteCommandListenerIOS):
        * platform/mac/RemoteCommandListenerMac.h:
        (WebCore::RemoteCommandListenerMac::createWeakPtr):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivate::createWeakPtr):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mock/MockMediaEndpoint.cpp:
        (WebCore::MockMediaEndpoint::MockMediaEndpoint):
        (WebCore::MockMediaEndpoint::generateDtlsInfo):
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget):
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::createWeakPtr):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::createWeakPtr):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPathElement.h:
        * svg/properties/SVGMatrixTearOff.h:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::MockCDMFactory):
        (WebCore::MockCDMFactory::createCDM):
        (WebCore::MockCDM::MockCDM):
        (WebCore::MockCDM::createInstance):
        (WebCore::m_weakPtrFactory): Deleted.

2017-09-22  Tim Horton  <timothy_horton@apple.com>

        Add env() as an alias of constant()
        https://bugs.webkit.org/show_bug.cgi?id=177371

        Reviewed by Simon Fraser.

        * css/CSSValueKeywords.in:
        * css/CSSVariableData.cpp:
        (WebCore::CSSVariableData::checkVariablesForCyclesWithRange const):
        (WebCore::CSSVariableData::resolveTokenRange const):
        * css/parser/CSSVariableParser.cpp:
        (WebCore::classifyBlock):
        Add env() as an alias of constant() everywhere it is mentioned.

2017-09-22  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Use didReceiveBuffer instead of didReceiveData
        https://bugs.webkit.org/show_bug.cgi?id=177260

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::readCachedData):
        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::didReceiveData):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::didReceiveContentData):
        (WebCore::ResourceHandleCurlDelegate::handleDataURL):
        (WebCore::ResourceHandleCurlDelegate::didReceiveData):
        (WebCore::ResourceHandleCurlDelegate::didReceiveDataCallback):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-22  John Wilander  <wilander@apple.com>

        Non-prevalent resources should be allowed access to existing cookies in a third-party context
        https://bugs.webkit.org/show_bug.cgi?id=177336
        <rdar://problem/34578257>

        Reviewed by Brent Fulgham.

        No new tests. I will update existing tests and add at least
        one new test in a follow-up patch,
        see https://bugs.webkit.org/show_bug.cgi?id=177337. Need to
        land this to meet submission deadline and fix the regression.

        This patch restructures what is communicated to the network process,
        from two vectors - with user interaction and without user interaction -
        to three vectors - to partition, to block, to neither partition nor block.
        The previous two vectors did not allow proper categorization into which
        domains should be partitioned, blocked, or left alone. That was the cause
        of the regression where non-prevalent third-party domains erroneously had
        their cookies blocked when they should fall back to the old behavior of
        access but no new cookies allowed to be set.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
        * loader/ResourceLoadStatistics.h:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::shouldPartitionCookies const):
        (WebCore::NetworkStorageSession::shouldBlockThirdPartyCookies const):
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToPartitionOrBlockCookies):
        (WebCore::NetworkStorageSession::removePrevalentDomains):
        (WebCore::NetworkStorageSession::shouldAllowThirdPartyCookies const): Deleted.
        (WebCore::NetworkStorageSession::setPrevalentDomainsWithAndWithoutInteraction): Deleted.
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesInBlockedForURL):
        (WebCore::cookiesForURL):

2017-09-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][Win] EventTargetInterfaces.h are generated twice
        https://bugs.webkit.org/show_bug.cgi?id=177286

        Reviewed by Brent Fulgham.

        EventTargetInterfaces.h are generated twice in both
        WebCoreDerivedSources.vcxproj and WebCore.vcxproj. This causes
        unnecessary recompilation in CMake VisualStudio build.

        WebCore target already has a dependency to WebCoreDerivedSources
        target by calling add_dependencies. WebCore target doesn't need to
        generate it.

        * CMakeLists.txt: Don't ADD_SOURCE_WEBCORE_DERIVED_DEPENDENCIES with EventTargetInterfaces.h.

2017-09-22  Antti Koivisto  <antti@apple.com>

        Add asserts against layout time render tree mutations
        https://bugs.webkit.org/show_bug.cgi?id=177361

        Reviewed by Zalan Bujtas.

        We don't have any mutations left. Add asserts.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::removeChildInternal):

2017-09-22  Chris Dumez  <cdumez@apple.com>

        Use high resolution timestamp for event time
        https://bugs.webkit.org/show_bug.cgi?id=154246
        <rdar://problem/34333304>

        Reviewed by Ryosuke Niwa.

        Have event.timeStamp return a DOMHighResTimeStamp instead of a DOMResTimeStamp. It now
        has better precision, is monotonic and is relative to PerformanceTiming.navigationStart.

        This is as per:
        - https://dom.spec.whatwg.org/#interface-event

        Chrome, Firefox and Edge all already ship this so the compatibility risk should be low.

        Also use WallTime / MonotonicTime instead of double type for clarity.

        Test: imported/w3c/web-platform-tests/dom/events/Event-timestamp-high-resolution.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMHighResTimeStamp.h: Copied from Source/WebKit/Shared/WebTouchEvent.cpp.
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseForceWillBegin):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        (WebCore::Event::timeStampForBindings const):
        * dom/Event.h:
        (WebCore::Event::timeStamp const):
        * dom/Event.idl:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h:
        * dom/SimulatedClick.cpp:
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::UIEvent):
        * dom/UIEvent.h:
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * html/TypeAhead.cpp:
        (WebCore::TypeAhead::TypeAhead):
        (WebCore::TypeAhead::handleEvent):
        * html/TypeAhead.h:
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::AutoscrollController):
        (WebCore::AutoscrollController::updateDragAndDrop):
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/AutoscrollController.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenuAt):
        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/EventHandler.h:
        * page/Performance.cpp:
        (WebCore::Performance::now const):
        (WebCore::Performance::relativeTimeFromTimeOriginInReducedResolution const):
        * page/Performance.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tryToBeginDataInteractionAtPoint):
        * page/win/EventHandlerWin.cpp:
        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::timestamp const):
        (WebCore::PlatformEvent::PlatformEvent):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::handleWheelEvent):
        * platform/glib/EventHandlerGLib.cpp:
        * platform/gtk/ScrollAnimatorGtk.cpp:
        (WebCore::ScrollAnimatorGtk::computeVelocity):
        (WebCore::ScrollAnimatorGtk::handleWheelEvent):
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):
        (WebCore::PlatformTouchEventBuilder::PlatformTouchEventBuilder):
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::eventTimeStampSince1970):

2017-09-22  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        [GTK] HTMLMediaElement resize event not fired when video size changes
        https://bugs.webkit.org/show_bug.cgi?id=174582

        Reviewed by Xabier Rodriguez-Calvar.

        Modify AppendPipeline to notify MediaPlayerPrivateGStreamerMSE that a track is detected
        not only for the initial track detection but also for subsequent in particular when the
        video size has changed.

        Update test expectation for new passing tests.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkCapsChanged):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::reattachTrack):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h:

2017-09-22  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Couple of pasteboard related tests are failing after r222228
        https://bugs.webkit.org/show_bug.cgi?id=177295

        Reviewed by Michael Catanzaro.

        Call writeToClipboard() from Pasteboard::writeString() on GTK.

        When writePasteboard was replaced by commitToPasteboard in r222228,
        the call to writeToClipboard() did not make it into the
        platform-neutral code. This attempts to find another place in the
        GTK-specific code to make the call.

        Tests: editing/pasteboard/copy-without-selection.html
               editing/pasteboard/pasting-empty-html-falls-back-to-text.html

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeString):

2017-09-21  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r221017): iCloud mail logs me out after looking at a few messages
        https://bugs.webkit.org/show_bug.cgi?id=177328

        Reviewed by Daniel Bates.
        <rdar://problem/34288629>

        Reviewed by Dan Bates.

        This site was triggering a log-out because the page was loading insecure images. We don't treat that as a security
        issue for deciding to display mixed content since it can only affect pixels on screen, not trigger a change in
        program logic or persistent storage.

        Consequently, we can correct thsi compatibility problem without relaxing the security fix by not blocking Secure cookies
        when we have merely displayed mixed content (i.e., encountered 'Inactive' mixed content), as opposed to executing mixed
        content (i.e., loaded 'Active' mixed content).

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::shouldBlockGeolocationRequests): Revise for new API.
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::foundMixedContent const): Change to return an OptionSet of
        mixed content types.
        (WebCore::SecurityContext::setFoundMixedContent): Accept an enum stating the type of mixed content found.
        * loader/CookieJar.cpp:
        (WebCore::cookies): Only block Secure cookies for Active mixed content.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::canDisplayInsecureContent const): Mark the context as having found 'Inactive'
        mixed content.
        (WebCore::MixedContentChecker::canRunInsecureContent const): Mark the context as having found 'Active'
        mixed content.

2017-09-21  Simon Fraser  <simon.fraser@apple.com>

        Clean up RenderLayer z-order traversal code
        https://bugs.webkit.org/show_bug.cgi?id=177325

        Reviewed by Zalan Bujtas.

        Remove isStackingContainer() checks before accessing posZOrderList() or negZOrderList();
        we already have assertions in place to ensure that only stacking containers have non-null lists.

        Use more auto.

        No behavior change.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::update3DTransformedDescendantStatus):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::traverseVisibleNonCompositedDescendantLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayer):
        (WebCore::RenderLayerCompositor::layerHas3DContent const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):

2017-09-21  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed Windows build fix after r222360.

        * PlatformWin.cmake:

2017-09-21  Youenn Fablet  <youenn@apple.com>

        Remove the need for SetterMayThrowException
        https://bugs.webkit.org/show_bug.cgi?id=177099

        Reviewed by Sam Weinig.

        No change of behavior.
        Introducing AttributeSetter to handle exception raising attribute setters,
        based on the C++ class method instead of SetterMayThrowException.
        A follow-up patch should remove SetterMayThrowException from the IDLs

        * bindings/js/JSDOMAttribute.h:
        (WebCore::AttributeSetter<ExceptionOr<void>>::call):
        (WebCore::AttributeSetter<void>::call):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterBodyDefinition):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.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/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

2017-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        DataTransfer.items should contain text/html and text/uri-list
        https://bugs.webkit.org/show_bug.cgi?id=176772
        <rdar://problem/34386899>

        Reviewed by Darin Adler.

        Expose text/html and text/uri-list in dataTransfer.items.

        Tests: editing/pasteboard/datatransfer-items-copy-html.html
               editing/pasteboard/datatransfer-items-copy-url.html

        * dom/DataTransferItemList.cpp:
        (WebCore::isSupportedType): Added both MIME types.
        (WebCore::DataTransferItemList::add): Fixed the bug that new data transfer item was using
        the original type string instead of the lowercased one.

2017-09-21  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error, PALHeaderDetection.h not found.
        https://bugs.webkit.org/show_bug.cgi?id=177309

        Reviewed by Brent Fulgham.

        Copy PAL header files to WebCore forwarding headers folder.

        * PlatformWin.cmake:

2017-09-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove support for CSS Regions
        https://bugs.webkit.org/show_bug.cgi?id=177287

        Reviewed by Matt Baker.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getNamedFlowCollection): Deleted.
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        (WebCore::buildNodeHighlight):
        (WebCore::InspectorOverlay::getHighlight const):
        (WebCore::buildArrayForRendererFragments):
        (WebCore::buildQuadObjectForCSSRegionContentClip): Deleted.
        * inspector/InspectorOverlayPage.js:
        (_createElementTitle):
        (_drawElementTitle):
        (_drawFragmentHighlight):
        (drawNodeHighlight):
        (_drawRegionNumber): Deleted.
        (_quadMidPoint): Deleted.
        (_drawRegionLink): Deleted.
        (_drawRegionsHighlight): Deleted.

2017-09-21  Antti Koivisto  <antti@apple.com>

        Remove some more code from RenderFlowThread
        https://bugs.webkit.org/show_bug.cgi?id=177320

        Reviewed by David Hyatt.

        More dead code related to named flows.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::invalidateRegions):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        (WebCore::RenderFlowThread::offsetFromLogicalTopOfFirstRegion const):
        (WebCore::RenderFlowThread::hasCachedOffsetFromLogicalTopOfFirstRegion const): Deleted.
        (WebCore::RenderFlowThread::cachedOffsetFromLogicalTopOfFirstRegion const): Deleted.
        (WebCore::RenderFlowThread::setOffsetFromLogicalTopOfFirstRegion): Deleted.
        (WebCore::RenderFlowThread::clearOffsetFromLogicalTopOfFirstRegion): Deleted.
        (WebCore::RenderFlowThread::currentActiveRenderBox const): Deleted.
        (WebCore::RenderFlowThread::pushFlowThreadLayoutState): Deleted.
        (WebCore::RenderFlowThread::popFlowThreadLayoutState): Deleted.
        * rendering/RenderFlowThread.h:

2017-09-21  Chris Dumez  <cdumez@apple.com>

        eventInitDict parameter to GamepadEvent constructor should be optional
        https://bugs.webkit.org/show_bug.cgi?id=177308

        Reviewed by Sam Weinig.

        eventInitDict parameter to GamepadEvent constructor should be optional to match Firefox
        and Chrome. Having such dictionary parameter is also not valid Web IDL:
        """
        If the type of an argument is a dictionary type (or a union type that has a dictionary as one
        of its flattened member types), and that dictionary type and its ancestors have no required
        members, and the argument is either the final argument or is followed only by optional arguments,
        then the argument must be specified as optional. Such arguments are always considered to have a
        default value of an empty dictionary, unless otherwise specified.
        """

        Test: gamepad/gamepad-event.html

        * Modules/gamepad/GamepadEvent.idl:

2017-09-21  Brian Burg  <bburg@apple.com>

        Web Inspector: keyboard shortcut for "Reload page from origin" doesn't match Safari, and doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=177010
        <rdar://problem/33134548>

        Reviewed by Joseph Pecoraro.

        Use "reload from origin" nomenclature instead of "reload ignoring cache".

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        * inspector/InspectorPageAgent.h:

2017-09-21  Antti Koivisto  <antti@apple.com>

        Remove RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=177299

        Reviewed by David Hyatt.

        Remove the remaining named flow rendering code.

        The feature is already disabled, no functional changes.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertedIntoTree):
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::updateLogicalHeight):
        (WebCore::RenderBlockFlow::positionForPoint):
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded): Deleted.
        (WebCore::RenderBlockFlow::canHaveChildren const): Deleted.
        (WebCore::RenderBlockFlow::canHaveGeneratedChildren const): Deleted.
        (WebCore::RenderBlockFlow::namedFlowFragmentNeedsUpdate const): Deleted.
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment): Deleted.
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::renderNamedFlowFragment const): Deleted.
        (WebCore::RenderElement::isRenderNamedFlowFragmentContainer const): Deleted.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::mapLocalToContainer const):
        (WebCore::RenderBox::isUnsplittableForPagination const):
        (WebCore::RenderBox::overflowRectForPaintRejection const):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement const):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::invalidateRegions):
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant const): Deleted.
        (WebCore::RenderFlowThread::getLayerListForRegion const): Deleted.
        (WebCore::RenderFlowThread::regionForCompositedLayer const): Deleted.
        (WebCore::RenderFlowThread::cachedRegionForCompositedLayer const): Deleted.
        (WebCore::RenderFlowThread::updateLayerToRegionMappings): Deleted.
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings): Deleted.
        (WebCore::RenderFlowThread::collectsGraphicsLayersUnderRegions const): Deleted.
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent const): Deleted.
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight): Deleted.
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout): Deleted.
        (WebCore::RenderFlowThread::incrementAutoLogicalHeightRegions): Deleted.
        (WebCore::RenderFlowThread::decrementAutoLogicalHeightRegions): Deleted.
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintList):
        (WebCore::isHitCandidate):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::expandClipRectForRegionAndReflection): Deleted.
        (WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions const): Deleted.
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds const):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer const):
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread const): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        (WebCore::RenderLayerCompositor::styleChangeMayAffectIndirectCompositingReasons):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition const):
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements): Deleted.
        (WebCore::RenderLayerCompositor::rebuildRegionCompositingLayerTree): Deleted.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderNamedFlowFragment.cpp: Removed.
        * rendering/RenderNamedFlowFragment.h: Removed.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint const):
        (WebCore::RenderObject::fixedPositionedWithNamedFlowContainingBlock const): Deleted.
        (WebCore::hasFixedPosInNamedFlowContainingBlock): Deleted.
        (WebCore::RenderObject::currentRenderNamedFlowFragment const): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderRegion const):
        (WebCore::RenderObject::isAnonymousBlock const):
        (WebCore::RenderObject::isRenderNamedFlowFragment const): Deleted.
        * rendering/RenderRegion.cpp:
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::hasAutoLogicalHeight const): Deleted.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::overflowClipRect):
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::pushLayoutStateForPaginationIfNeeded):
        (WebCore::RenderView::layoutContentInAutoLogicalHeightRegions): Deleted.
        (WebCore::RenderView::checkTwoPassLayoutForAutoHeightRegions const): Deleted.
        (WebCore::RenderView::pushLayoutStateForCurrentFlowThread): Deleted.
        (WebCore::RenderView::popLayoutStateForCurrentFlowThread): Deleted.
        * rendering/RenderView.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):

2017-09-21  Alex Christensen  <achristensen@webkit.org>

        Fix all builds after r222325

        * loader/DocumentLoader.h:
        WebKit needs this, too.

2017-09-21  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

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

        Reviewed by Myles C. Maxfield.

        No new tests. No change in behavior..

        * Configurations/WebCore.unexp:
        * PlatformAppleWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pushSamples):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::process):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::readNativeSampleBuffer):
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformDuration const):
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformBufferedTimeRanges const):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMinTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeLoaded const):
        (WebCore::AVFWrapper::seekToTime):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::createImageForTimeInRect):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::readSampleMetadata):
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer):
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentMediaTime const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeWillChangeAtTime):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::calculateTimelineOffset):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::presentationTime const):
        (WebCore::MediaSampleAVFObjC::outputPresentationTime const):
        (WebCore::MediaSampleAVFObjC::decodeTime const):
        (WebCore::MediaSampleAVFObjC::duration const):
        (WebCore::MediaSampleAVFObjC::outputDuration const):
        (WebCore::MediaSampleAVFObjC::offsetTimestampsBy):
        (WebCore::MediaSampleAVFObjC::setTimestamps):
        (WebCore::MediaSampleAVFObjC::divide):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::automaticDequeue):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):
        (WebCore::WebCoreDecompressionSession::imageForTime):
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::setCurrentMediaTime):
        (PlatformClockCM::currentMediaTime const):
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::timeRangesToArray):
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::emitSampleBuffers):
        * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::OnData):
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:

2017-09-21  Alex Christensen  <achristensen@webkit.org>

        Fix ASAN build after r222306
        https://bugs.webkit.org/show_bug.cgi?id=177255

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setCustomHeaderFields):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomHeaderFields): Deleted.
        Moving a Vector of a type requires more than just a forward declaration of the type, but only in ASAN builds.  Weird.

2017-09-21  Zhifei FANG  <facetothefate@gmail.com>

        In regular block layout, the width of a child's margin box should always be equal to that of its containing block
        Merge from Blink https://bugs.chromium.org/p/chromium/issues/detail?id=708751
        https://bugs.webkit.org/show_bug.cgi?id=176620

        Reviewed by Zalan Bujtas.

        Test: fast/block/over-constrained-auto-margin.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion const):

2017-09-21  Javier Fernandez  <jfernandez@igalia.com>

        Unpredictable selection when dragging out of float elements children of in-flow block-level box
        https://bugs.webkit.org/show_bug.cgi?id=176096

        Reviewed by David Hyatt.

        In order to improve Selection across float elements we need to
        consider them as HitTest candidates.  Additionally, since
        out-of-flow elements must not affect how in-flow elements are
        rendered we have to deal with some special cases when implementing
        the positionForPoint logic.

        This patch addresses the issues caused by the fact that an in-flow
        box's logicalBottom does not consider the out-of-flow children, as
        they don't affect its height. Hence, we should add the lowest float
        logical bottom to figure out the box the point is actually hitting.

        Tests: editing/selection/select-out-of-floated-non-editable-01.html
               editing/selection/select-out-of-floated-non-editable-02.html
               editing/selection/select-out-of-floated-non-editable-03.html
               editing/selection/select-out-of-floated-non-editable-04.html
               editing/selection/select-out-of-floated-non-editable-05.html
               editing/selection/select-out-of-floated-non-editable-06.html
               editing/selection/select-out-of-floated-non-editable-07.html
               editing/selection/select-out-of-floated-non-editable-08.html
               editing/selection/select-out-of-floated-non-editable-09.html
               editing/selection/select-out-of-floated-non-editable-10.html
               editing/selection/select-out-of-floated-non-editable-11.html
               editing/selection/select-out-of-floated-non-editable-12.html

        * rendering/RenderBlock.cpp:
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::positionForPoint):

2017-09-21  Zan Dobersek  <zdobersek@igalia.com>

        [WebCrypto] Support Elliptic Curve P-521
        https://bugs.webkit.org/show_bug.cgi?id=169231
        <rdar://problem/30881703>

        Reviewed by Jiewen Tan.

        Add support for the P-521 elliptic curve to the CryptoKeyEC class, but
        allow the underlying platform-specific implementations to opt out of
        supporting this feature.

        This is achieved with the platformSupportedCurve() static function that
        each platform has to implement, returning true if the passed-in curve
        type is supported. The function is called at each CryptoKeyEC entrypoint,
        that is in each static function that could generate a new CryptoKeyEC
        object. These functions return a NotSupportedError exception in case the
        platformSupportedCurve() call returns false.

        While the libgcrypt-based implementation will support P-521 curves in
        the near future, the CommonCrypto-based implementation might not. The use
        of platformSupportedCurve() ensures that the implementations that don't
        support EC P-521 continue to return the NotSupportedError exception at
        these entrypoints, instead of the OperationError exception that's returned
        when the platform-specific extensions of these entrypoints fail due to the
        specified elliptic curve not being supported.

        Both libgcrypt-based and CommonCrypto-based implementations mark P-256 and
        P-384 curves as supported. Switch statements handling NamedCurve values
        must now also handle the NamedCurve::P521 value, but both implementations
        treat that as an unreachable case since support is not indicated in
        platformSupportedCurve(), and all CryptoKeyEC operations should have
        returned with an NotSupportedError exception before entering
        platform-specific code. The common CryptoKeyEC constructor similarly asserts
        that the specified curve is supported by the underlying implementation.

        CryptoAlgorithmECDSA is modified to now also support 'ES512' as the algorithm
        identifier, matching it against the 'P-521' curve value.

        No new tests -- tests covering EC P-521 already exist, but no platform
        runs them yet due to missing implementations.

        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::importKey):
        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::curveName):
        (WebCore::curveIdentifier):
        (WebCore::curveSize):
        (WebCore::curveUncompressedFieldElementSize):
        (WebCore::CryptoKeyEC::platformSupportedCurve):
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::toNamedCurve):
        (WebCore::CryptoKeyEC::CryptoKeyEC):
        (WebCore::CryptoKeyEC::generatePair):
        (WebCore::CryptoKeyEC::importRaw):
        (WebCore::CryptoKeyEC::importJwk):
        (WebCore::CryptoKeyEC::importSpki):
        (WebCore::CryptoKeyEC::importPkcs8):
        (WebCore::CryptoKeyEC::exportJwk const):
        (WebCore::CryptoKeyEC::namedCurveString const):
        (WebCore::CryptoKeyEC::algorithm const):
        * crypto/keys/CryptoKeyEC.h:
        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::doesUncompressedPointMatchNamedCurve):
        (WebCore::doesFieldElementMatchNamedCurve):
        (WebCore::getKeySizeFromNamedCurve):
        (WebCore::CryptoKeyEC::platformSupportedCurve):
        (WebCore::getOID):

2017-09-20  Antti Koivisto  <antti@apple.com>

        inspector/dom/content-node-region-info.html and inspector/dom/content-flow tests crashing
        https://bugs.webkit.org/show_bug.cgi?id=177249
        <rdar://problem/34559968>

        Unreviewed.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):

            Fix crashing by adding a few lines of removed code back.

2017-09-20  Zalan Bujtas  <zalan@apple.com>

        Remove redundant SelectionSubtreeData functions.
        https://bugs.webkit.org/show_bug.cgi?id=177288

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::SelectionSubtreeData):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionEndPos const):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionClear const): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionStart): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionStartPos): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionEnd): Deleted.
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionEndPos): Deleted.
        (): Deleted.

2017-09-20  Alex Christensen  <achristensen@webkit.org>

        Add infrastructure for adding custom headers to requests per website
        https://bugs.webkit.org/show_bug.cgi?id=177255

        Reviewed by Geoffrey Garen.

        Covered by API tests.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setCustomHeaderFields):
        * loader/HTTPHeaderField.cpp: Added.
        (WebCore::RFC7230::isTokenCharacter):
        (WebCore::RFC7230::isDelimiter):
        (WebCore::RFC7230::isVisibleCharacter):
        (WebCore::RFC7230::isWhitespace):
        (WebCore::RFC7230::isInRange):
        (WebCore::RFC7230::isOBSText):
        (WebCore::RFC7230::isQuotedTextCharacter):
        (WebCore::RFC7230::isQuotedPairSecondOctet):
        (WebCore::RFC7230::isCommentText):
        (WebCore::RFC7230::isValidName):
        (WebCore::RFC7230::isValidValue):
        (WebCore::HTTPHeaderField::HTTPHeaderField):
        * loader/HTTPHeaderField.h: Added.
        (WebCore::HTTPHeaderField::encode const):
        (WebCore::HTTPHeaderField::decode):

2017-09-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r191731): SVGPatternElement can only reference another SVGPatternElement in the same SVG document
        https://bugs.webkit.org/show_bug.cgi?id=176221

        Reviewed by Tim Horton.

        According to the specs:

        https://www.w3.org/TR/SVG11/filters.html#FilterElementHrefAttribute
        https://www.w3.org/TR/SVG11/pservers.html#LinearGradientElementHrefAttribute
        https://www.w3.org/TR/SVG11/pservers.html#RadialGradientElementHrefAttribute
        https://www.w3.org/TR/SVG11/pservers.html#PatternElementHrefAttribute

        The xlink:href attribute of the SVG filter, gradient and pattern elements
        must reference another element within the current SVG of the same type.

        In r191731, the code of SVGPatternElement::collectPatternAttributes() was
        removed and replaced by RenderSVGResourcePattern::collectPatternAttributes()
        to avoid cyclic reference in the pattern element. The problem is the old
        code used to check whether the referenced element is<SVGPatternElement>
        before casting it. This code was not copied to the new function. So we
        now allow the SVGPatternElement to reference any SVG resource element.

        To fix this issue, we need to prevent SVGResources from chaining an incorrect
        type of element to the SVG filter, gradient and pattern elements.

        We also need to use the SVGResources for getting the referenced element
        when collecting the attributes for the gradient elements. SVGResources solves
        the cyclic referencing issue so there is no need to repeat the same code
        in many places. Also, from now on the SVGResources will have valid linked
        resource only. So casting the referenced element should always be valid.

        Tests: svg/custom/pattern-invalid-content-inheritance.svg

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::collectPatternAttributes const): Asserts
        the linkedResource is of type RenderSVGResourcePattern.
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::SVGResources):
        (WebCore::isChainableResource): Ensure that an SVG resource can reference
        only an SVG resource with the valid type.
        (WebCore::SVGResources::buildCachedResources):
        * rendering/svg/SVGResources.h:

2017-09-20  Daniel Bates  <dabates@apple.com>

        Spelling and grammar dots should not overlap
        https://bugs.webkit.org/show_bug.cgi?id=177265
        <rdar://problem/34556424>

        Reviewed by David Hyatt.

        A line may contain both spelling and grammar errors such that these errors overlap.
        For example, "to mooof or not to mooof.". It is more pleasing aesthetically to
        paint spelling and grammar dots such that they do not overlap. This also matches
        AppKit's behavior.

        A side benefit of this change is that it adds support infrastructure towards
        implementing the CSS Pseudo-Elements Module Level 4 pseudo elements ::spelling-error
        and ::grammar-error (see <https://bugs.webkit.org/show_bug.cgi?id=175784>).
        It will also make it straightforward to add ::inactive-selection and allow us
        to make ::selection conform to CSS Pseudo-Elements Module Level 4.

        * CMakeLists.txt: Add file MarkerSubrange.cpp.
        * WebCore.xcodeproj/project.pbxproj: Add files MarkerSubrange.{cpp, h}.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarker): Modified to take a const MarkerSubrange&
        instead of a RenderedDocumentMarker&.
        (WebCore::InlineTextBox::paintTextMatchMarker): Modified to take a const MarkerSubrange&
        instead of a RenderedDocumentMarker& and take a boolean as to whether the text match is active.
        (WebCore::InlineTextBox::paintDocumentMarkers): Collect the subranges that need to be
        painted, subdivide them preserving only the frontmost subrange when two or more subranges
        overlap and paint the resulting subranges.
        (WebCore::lineStyleForMarkerType): Deleted; converted to a lambda function inlined
        in paintDocumentMarker() as this is the only place we made use of this function.
        * rendering/InlineTextBox.h:
        * rendering/MarkerSubrange.cpp: Added.
        (WebCore::subdivide): Subdivides the specified list of subranges and returns a list of non-overlapping
        subranges in paint order. The implementation of subdivide() is derived from an algorithm that
        Said Abou-Hallawa came up with.
        * rendering/MarkerSubrange.h: Added.
        (WebCore::MarkerSubrange::MarkerSubrange):

2017-09-20  Alex Christensen  <achristensen@webkit.org>

        Remove ActionType::CSSDisplayNoneStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=177275

        Reviewed by Andy Estes.

        It not a real action type anyways.  It was a fake action type
        that stored a String indicating which ContentRuleLists had not triggered
        an ignore-previous-rules action, so we should apply the default stylesheet,
        which is the css-display-none selectors that match everything.

        No change in behaviour.  Covered by existing tests.

        * contentextensions/ContentExtensionActions.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        (WebCore::ContentExtensions::Action::deserializeType):
        (WebCore::ContentExtensions::Action::serializedLength):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForPingLoad):
        * contentextensions/ContentExtensionsBackend.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/UserContentProvider.cpp:
        (WebCore::UserContentProvider::actionsForResourceLoad):
        * page/UserContentProvider.h:

2017-09-20  Zalan Bujtas  <zalan@apple.com>

        FloatingObject should not hold a raw pointer to RootInlineBox.
        https://bugs.webkit.org/show_bug.cgi?id=177266

        Reviewed by Simon Fraser.

        FloatingObject and RootInlineBox objects' lifetimes are very much independent from each other.

        Not testable.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::clearLineBoxTreePointers):
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::originatingLine const):
        (WebCore::FloatingObject::clearOriginatingLine):
        (WebCore::FloatingObject::setOriginatingLine):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::removeFloatingObject):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendFloatingObjectToLastLine):
        (WebCore::RenderBlockFlow::reattachCleanLineFloats):
        (WebCore::RenderBlockFlow::determineStartPosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::createWeakPtr):

2017-09-20  Chris Dumez  <cdumez@apple.com>

        Drop legacy DOMError type
        https://bugs.webkit.org/show_bug.cgi?id=177207

        Reviewed by Eric Carlson.

        Drop legacy DOMError type. It has been removed from the Web standards,
        is no longer used by our implementation and was not exposed to the
        Web in WebKit (i.e. marked as [NoInterfaceObject]).

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/mediastream/MediaEndpointSessionDescription.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMPromiseDeferred.cpp:
        * dom/DOMAllInOne.cpp:
        * dom/DOMError.cpp: Removed.
        * dom/DOMError.h: Removed.
        * dom/DOMError.idl: Removed.
        * platform/mock/RTCNotifiersMock.cpp:

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

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

        Caused fast/images/animated-gif-webkit-transform.html to time
        out, and possible perf regression (Requested by smfr on
        #webkit).

        Reverted changeset:

        "Simplify compositing layer updating"
        https://bugs.webkit.org/show_bug.cgi?id=176196
        http://trac.webkit.org/changeset/222254

2017-09-20  Alex Christensen  <achristensen@webkit.org>

        Remove ActionType::InvalidAction
        https://bugs.webkit.org/show_bug.cgi?id=177262

        Reviewed by Tim Horton.

        This was needed before r213322 because we needed to have a default constructor.
        With all these cool new C++14/17 types, we don't need this any more.

        No change in behaviour.

        * contentextensions/ContentExtensionActions.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        (WebCore::ContentExtensions::Action::deserializeType):
        (WebCore::ContentExtensions::Action::serializedLength):
        * contentextensions/ContentExtensionRule.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForPingLoad):

2017-09-20  Daniel Bates  <dabates@apple.com>

        RenderedDocumentMarker.h should include DocumentMarker.h
        https://bugs.webkit.org/show_bug.cgi?id=177263

        Reviewed by Andy Estes.

        RenderedDocumentMarker extends DocumentMarker. RenderedDocumentMarker.h should
        include DocumentMarker.h. Otherwise, both DocumentMarker.h and RenderedDocumentMarker.h
        must be explicitly included.

        * dom/RenderedDocumentMarker.h:
        * rendering/RenderText.cpp:
        * testing/Internals.cpp:

2017-09-20  Alex Christensen  <achristensen@webkit.org>

        Clean up content extensions code in preparation for more actions with string arguments
        https://bugs.webkit.org/show_bug.cgi?id=177258

        Reviewed by Tim Horton.

        No change in behaviour.  Covered by existing tests.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeString):
        (WebCore::ContentExtensions::resolvePendingDisplayNoneActions):
        (WebCore::ContentExtensions::serializeActions):
        (WebCore::ContentExtensions::serializeSelector): Deleted.
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::deserializeString):
        (WebCore::ContentExtensions::Action::deserialize):
        (WebCore::ContentExtensions::Action::deserializeType):
        (WebCore::ContentExtensions::Action::serializedLength):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):

2017-09-20  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] atk_table_get_n_rows() and atk_table_get_n_columns() should return values of aria-rowcount and aria-colcount, if present
        https://bugs.webkit.org/show_bug.cgi?id=171172

        Reviewed by Chris Fleizach.

        Modify webKitAccessibleTableGetNColumns() and webkitAccessibleTableGetNRows()
        to prefer the ARIA value over the DOM-based value.

        No new tests needed: We already have coverage through aria-table-attributes.html.
        Platform expectations for this test were updated.

        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetNColumns):
        (webkitAccessibleTableGetNRows):

2017-09-20  Youenn Fablet  <youenn@apple.com>

        Rename CacheStorage to DOMCacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=177025

        Reviewed by Chris Dumez.

        No change of behavior, just renaming CacheStorage class and files to DOMCacheStorage.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/cache/DOMCacheStorage.cpp: Renamed from Source/WebCore/Modules/cache/CacheStorage.cpp.
        (WebCore::DOMCacheStorage::DOMCacheStorage):
        (WebCore::DOMCacheStorage::origin const):
        (WebCore::doSequentialMatch):
        (WebCore::startSequentialMatch):
        (WebCore::copyCaches):
        (WebCore::DOMCacheStorage::match):
        (WebCore::DOMCacheStorage::has):
        (WebCore::DOMCacheStorage::retrieveCaches):
        (WebCore::logConsolePersistencyError):
        (WebCore::DOMCacheStorage::open):
        (WebCore::DOMCacheStorage::remove):
        (WebCore::DOMCacheStorage::keys):
        (WebCore::DOMCacheStorage::stop):
        (WebCore::DOMCacheStorage::activeDOMObjectName const):
        (WebCore::DOMCacheStorage::canSuspendForDocumentSuspension const):
        * Modules/cache/DOMCacheStorage.h: Renamed from Source/WebCore/Modules/cache/CacheStorage.h.
        (WebCore::DOMCacheStorage::create):
        * Modules/cache/DOMCacheStorage.idl: Renamed from Source/WebCore/Modules/cache/CacheStorage.idl.
        * Modules/cache/DOMWindowCaches.cpp:
        (WebCore::DOMWindowCaches::caches):
        (WebCore::DOMWindowCaches::caches const):
        * Modules/cache/DOMWindowCaches.h:
        * Modules/cache/DOMWindowCaches.idl:
        * Modules/cache/WorkerGlobalScopeCaches.cpp:
        (WebCore::WorkerGlobalScopeCaches::caches):
        (WebCore::WorkerGlobalScopeCaches::caches const):
        * Modules/cache/WorkerGlobalScopeCaches.h:
        * Modules/cache/WorkerGlobalScopeCaches.idl:
        * WebCore.xcodeproj/project.pbxproj:

2017-09-20  Eric Carlson  <eric.carlson@apple.com>

        Switch PeerConnection to release logging
        https://bugs.webkit.org/show_bug.cgi?id=177193
        <rdar://problem/34529014>

        Reviewed by Youenn Fablet.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::PeerConnectionBackend):
        (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):
        (WebCore::PeerConnectionBackend::logChannel const):
        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::PeerConnectionBackend): Deleted.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::~RTCPeerConnection):
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::removeTrack):
        (WebCore::RTCPeerConnection::addTransceiver):
        (WebCore::RTCPeerConnection::queuedCreateOffer):
        (WebCore::RTCPeerConnection::queuedCreateAnswer):
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        (WebCore::RTCPeerConnection::createDataChannel):
        (WebCore::RTCPeerConnection::setSignalingState):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::updateConnectionState):
        (WebCore::RTCPeerConnection::replaceTrack):
        (WebCore::RTCPeerConnection::dispatchEvent):
        (WebCore::RTCPeerConnection::logChannel const):
        (WebCore::rtcIceGatheringStateToString): Deleted.
        (WebCore::rtcIceConnectionStateToString): Deleted.
        * Modules/mediastream/RTCPeerConnection.h:

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered):
        (WebCore::LibWebRTCMediaEndpoint::startLoggingStats):
        (WebCore::LibWebRTCMediaEndpoint::logChannel const):
        (WebCore::LibWebRTCMediaEndpoint::statsLogInterval const):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (PAL::LogArgument<webrtc::RTCStats>::toString):

        * platform/mediastream/RTCIceConnectionState.h:
        (PAL::LogArgument<WebCore::RTCIceConnectionState>::toString):

        * platform/mediastream/RTCIceGatheringState.h:
        (PAL::LogArgument<WebCore::RTCIceGatheringState>::toString):

        * platform/mediastream/RTCPeerConnectionState.h:
        (PAL::LogArgument<WebCore::RTCPeerConnectionState>::toString):

        * platform/mediastream/RTCSignalingState.h:
        (PAL::LogArgument<WebCore::RTCSignalingState>::toString):

2017-09-20  Chris Dumez  <cdumez@apple.com>

        Video errors should be instances of Error
        https://bugs.webkit.org/show_bug.cgi?id=174573
        <rdar://problem/34445494>

        Reviewed by Youenn Fablet.

        Video errors should be instances of DOMException and Error as per:
        - https://html.spec.whatwg.org/multipage/media.html#reject-pending-play-promises
        - https://html.spec.whatwg.org/multipage/media.html#loading-the-media-resource:reject-pending-play-promises-2
        - https://html.spec.whatwg.org/multipage/media.html#loading-the-media-resource:reject-pending-play-promises-3
        - https://html.spec.whatwg.org/multipage/media.html#playing-the-media-resource:reject-pending-play-promises-3
        - https://html.spec.whatwg.org/multipage/media.html#playing-the-media-resource:reject-pending-play-promises

        No new tests, extended existing test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rejectPendingPlayPromises):
        (WebCore::HTMLMediaElement::noneSupported):
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks):
        (WebCore::HTMLMediaElement::pauseInternal):
        * html/HTMLMediaElement.h:

2017-09-20  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] improve the implementation of FormDataStream
        https://bugs.webkit.org/show_bug.cgi?id=177111

        Reviewed by Alex Christensen.

        * platform/network/curl/FormDataStreamCurl.cpp:
        (WebCore::FormDataStream::read):
        (WebCore::FormDataStream::hasMoreElements const):
        * platform/network/curl/FormDataStreamCurl.h:
        (WebCore::FormDataStream::setHTTPBody):
        (WebCore::FormDataStream::FormDataStream): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::prepareSendData):
        (WebCore::ResourceHandleCurlDelegate::didFinish):
        (WebCore::ResourceHandleCurlDelegate::didFail):
        (WebCore::ResourceHandleCurlDelegate::setupFormData):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-20  Miguel Gomez  <magomez@igalia.com>

        [GTK] Completely garbled display in GMail
        https://bugs.webkit.org/show_bug.cgi?id=168964

        Reviewed by Carlos Garcia Campos.

        Do not try to decode images that are bigger than 32768 pixels, as cairo won't be able to render them,
        and they will break the rendering of the rest of the page.

        Covered by existent tests.

        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::isOverSize):

2017-09-20  Antti Koivisto  <antti@apple.com>

        Remove RenderNamedFlowThread and FlowThreadController
        https://bugs.webkit.org/show_bug.cgi?id=177229

        Reviewed by Andreas Kling.

        Get rid of some parts of the rendering code for CSS Regions.

        The feature is disabled, no functional changes.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/FlowThreadController.cpp: Removed.
        * rendering/FlowThreadController.h: Removed.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        (WebCore::canComputeRegionRangeForBox):
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::logicalHeightForChildForFragmentation const):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion const):
        (WebCore::RenderBox::scroll):
        (WebCore::RenderBox::renderBoxRegionInfo const):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing const):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned const):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        (WebCore::RenderElement::hoverAncestor const):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent const):
        (WebCore::RenderFlowThread::incrementAutoLogicalHeightRegions):
        (WebCore::RenderFlowThread::decrementAutoLogicalHeightRegions):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows): Deleted.
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed): Deleted.
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed): Deleted.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread const): Deleted.
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp: Removed.
        * rendering/RenderNamedFlowThread.h: Removed.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionRoot const):
        (WebCore::RenderObject::offsetParent const):
        (WebCore::RenderObject::currentRenderNamedFlowFragment const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderGrid const):
        (WebCore::RenderObject::isRenderNamedFlowThread const): Deleted.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::attachRegion):
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::parentNamedFlowThread const): Deleted.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        (WebCore::writeRenderRegionList): Deleted.
        (WebCore::writeRenderNamedFlowThreads): Deleted.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layoutContent):
        (WebCore::RenderView::layoutContentInAutoLogicalHeightRegions):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::selectionBounds const):
        (WebCore::RenderView::repaintSelection const):
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::updateSelectionForSubtrees):
        (WebCore::RenderView::styleDidChange):
        (WebCore::RenderView::checkTwoPassLayoutForAutoHeightRegions const):
        (WebCore::RenderView::pushLayoutStateForCurrentFlowThread):
        (WebCore::RenderView::popLayoutStateForCurrentFlowThread):
        (WebCore::RenderView::layoutContentToComputeOverflowInRegions): Deleted.
        (WebCore::RenderView::splitSelectionBetweenSubtrees): Deleted.
        (WebCore::RenderView::hasRenderNamedFlowThreads const): Deleted.
        (WebCore::RenderView::flowThreadController): Deleted.
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::adjustForVisibleSelection): Deleted.
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::setSelectionData):

2017-09-20  Antti Koivisto  <antti@apple.com>

        Remove DOM and styling support for CSS Regions
        https://bugs.webkit.org/show_bug.cgi?id=177221

        Reviewed by Andreas Kling.

        This patch removes all CSS Regions (aka "named flow") related code excluding rendering.

        The feature is already disabled so no functional changes.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::convertToRegionBreak): Deleted.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator BreakBetween const):
        * css/CSSProperties.json:
        * css/CSSRule.cpp:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchUserRules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForRegion): Deleted.
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::setSameOriginOnly):
        (WebCore::ElementRuleCollector::setRegionForStyling): Deleted.
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):
        * css/RuleSet.cpp:
        (WebCore::determinePropertyWhitelistType):
        (WebCore::RuleData::RuleData):
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::shrinkToFit):
        (WebCore::RuleSet::addRegionRule): Deleted.
        * css/RuleSet.h:
        (WebCore::RuleSet:: const):
        (WebCore::RuleSet::regionSelectorsAndRuleSets const): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertRegionBreakBetween): Deleted.
        (WebCore::StyleBuilderConverter::convertRegionBreakInside): Deleted.
        * css/StyleProperties.cpp:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::State::State):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::CascadedProperties::addMatch):
        (WebCore::StyleResolver::checkRegionStyle): Deleted.
        (WebCore::isValidRegionStyleProperty): Deleted.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::regionForStyling const): Deleted.
        (WebCore::checkRegionSelector): Deleted.
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy const):
        (WebCore::StyleRuleBase::createCSSOMWrapper const):
        (WebCore::StyleRuleRegion::StyleRuleRegion): Deleted.
        * css/StyleRule.h:
        (WebCore::StyleRuleBase::isStyleRule const):
        (WebCore::StyleRuleBase::isRegionRule const): Deleted.
        * css/StyleSheetContents.cpp:
        (WebCore::traverseSubresourcesInRules):
        * css/WebKitCSSRegionRule.cpp: Removed.
        * css/WebKitCSSRegionRule.h: Removed.
        * css/WebKitCSSRegionRule.idl: Removed.
        * css/parser/CSSAtRuleID.cpp:
        (WebCore::cssAtRuleID):
        * css/parser/CSSAtRuleID.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeAtRule):
        (WebCore::CSSParserImpl::consumeRegionRule): Deleted.
        * css/parser/CSSParserImpl.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isLegacyBreakProperty):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::mapFromLegacyBreakProperty):
        (WebCore::CSSPropertyParser::consumeLegacyBreakProperty):
        (WebCore::consumeFlowProperty): Deleted.
        (WebCore::mapFromRegionBreakBetween): Deleted.
        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        * dom/DOMNamedFlowCollection.cpp: Removed.
        * dom/DOMNamedFlowCollection.h: Removed.
        * dom/DOMNamedFlowCollection.idl: Removed.
        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        (WebCore::Document::webkitGetNamedFlows): Deleted.
        (WebCore::Document::namedFlows): Deleted.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::clearStyleDerivedDataBeforeDetachingRenderer):
        (WebCore::Element::unregisterNamedFlowContentElement): Deleted.
        (WebCore::Element::setIsNamedFlowContentElement): Deleted.
        (WebCore::Element::clearIsNamedFlowContentElement): Deleted.
        (WebCore::Element::rareDataIsNamedFlowContentElement const): Deleted.
        (WebCore::Element::setRegionOversetState): Deleted.
        (WebCore::Element::regionOversetState const): Deleted.
        (WebCore::Element::renderNamedFlowFragment const): Deleted.
        (WebCore::Element::shouldMoveToFlowThread const): Deleted.
        (WebCore::Element::webkitRegionOverset const): Deleted.
        (WebCore::Element::webkitGetRegionFlowRanges const): Deleted.
        * dom/Element.h:
        (WebCore::Element::isNamedFlowContentElement const): Deleted.
        * dom/Element.idl:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::regionOversetState const): Deleted.
        (WebCore::ElementRareData::setRegionOversetState): Deleted.
        (WebCore::ElementRareData::isNamedFlowContentElement const): Deleted.
        (WebCore::ElementRareData::setIsNamedFlowContentElement): Deleted.
        * dom/EventTargetFactory.in:
        * dom/NamedFlowCollection.cpp: Removed.
        * dom/NamedFlowCollection.h: Removed.
        * dom/PseudoElement.h:
        * dom/WebKitNamedFlow.cpp: Removed.
        * dom/WebKitNamedFlow.h: Removed.
        * dom/WebKitNamedFlow.idl: Removed.
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::resetNonPersistentData):
        (WebCore::ChangeRegionOversetTask::ChangeRegionOversetTask): Deleted.
        (WebCore::ChangeRegionOversetTask::scheduleFor): Deleted.
        (WebCore::ChangeRegionOversetTask::unschedule): Deleted.
        (WebCore::ChangeRegionOversetTask::reset): Deleted.
        (WebCore::ChangeRegionOversetTask::timerFired): Deleted.
        (WebCore::InspectorCSSAgent::didCreateNamedFlow): Deleted.
        (WebCore::InspectorCSSAgent::willRemoveNamedFlow): Deleted.
        (WebCore::InspectorCSSAgent::didChangeRegionOverset): Deleted.
        (WebCore::InspectorCSSAgent::regionOversetChanged): Deleted.
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement): Deleted.
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement): Deleted.
        (WebCore::InspectorCSSAgent::getNamedFlowCollection): Deleted.
        (WebCore::InspectorCSSAgent::documentNodeWithRequestedFlowsId): Deleted.
        (WebCore::InspectorCSSAgent::buildArrayForRegions): Deleted.
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow): Deleted.
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateNamedFlowImpl): Deleted.
        (WebCore::InspectorInstrumentation::willRemoveNamedFlowImpl): Deleted.
        (WebCore::InspectorInstrumentation::didChangeRegionOversetImpl): Deleted.
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElementImpl): Deleted.
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl): Deleted.
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        (WebCore::buildObjectForElementData):
        (WebCore::buildObjectForRegion): Deleted.
        (WebCore::buildObjectForFlowRegions): Deleted.
        * page/EventHandler.cpp:
        (WebCore::handleWheelEventInAppropriateEnclosingBox):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName): Deleted.
        * rendering/FlowThreadController.h:
        * rendering/RegionOversetState.h: Removed.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::getRanges const):
        (WebCore::RenderNamedFlowFragment::layoutBlock):
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion const):
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        (WebCore::RenderNamedFlowFragment::setRegionOversetState): Deleted.
        (WebCore::RenderNamedFlowFragment::regionOversetState const): Deleted.
        (WebCore::RenderNamedFlowFragment::updateOversetState): Deleted.
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::clearContentElements):
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::hasContentElement const):
        (WebCore::RenderNamedFlowThread::flowThreadName const):
        (WebCore::RenderNamedFlowThread::dispatchRegionOversetChangeEventIfNeeded):
        (WebCore::RenderNamedFlowThread::regionOversetChangeEventTimerFired):
        (WebCore::RenderNamedFlowThread::setMarkForDestruction):
        (WebCore::RenderNamedFlowThread::resetMarkForDestruction):
        (WebCore::RenderNamedFlowThread::isMarkedForDestruction const):
        (WebCore::nextNodeInsideContentElement):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::installFlowThread):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/WillChangeData.cpp:
        (WebCore::WillChangeData::propertyCreatesStackingContext):
        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::previousSiblingRenderer const):
        (WebCore::RenderTreePosition::nextSiblingRenderer const):
        (WebCore::RenderTreePosition::insertionPositionForFlowThread): Deleted.
        (WebCore::RenderTreePosition::isRendererReparented): Deleted.
        * style/RenderTreePosition.h:
        (WebCore::RenderTreePosition::RenderTreePosition):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::RenderTreeUpdater::createRenderer):
        (WebCore::RenderTreeUpdater::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        (WebCore::registerElementForFlowThreadIfNeeded): Deleted.
        * style/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::createContentRenderers):
        * style/StyleChange.cpp:
        (WebCore::Style::determineChange):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::styleForElement):
        (WebCore::Style::affectsRenderedSubtree):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::shouldMoveToFlowThread const): Deleted.
        * svg/SVGElement.h:

2017-09-20  Ms2ger  <Ms2ger@igalia.com>

        Add bindings for optional arguments to some WebGL2 methods.
        https://bugs.webkit.org/show_bug.cgi?id=177067

        Reviewed by Antti Koivisto.

        Add bindings for optional arguments to some WebGL2 methods.

        No new tests: not much point in adding tests now; these methods don't
        do anything anyway.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::uniform1uiv):
        (WebCore::WebGL2RenderingContext::uniform2uiv):
        (WebCore::WebGL2RenderingContext::uniform3uiv):
        (WebCore::WebGL2RenderingContext::uniform4uiv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x3fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x3fv):
        (WebCore::WebGL2RenderingContext::clearBufferiv):
        (WebCore::WebGL2RenderingContext::clearBufferuiv):
        (WebCore::WebGL2RenderingContext::clearBufferfv):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        On Mac, dataTransfer claims to contain URL list when dropping files
        https://bugs.webkit.org/show_bug.cgi?id=177219

        Reviewed by Wenson Hsieh.

        Fixed the bug by removing code which was specifically adding local filenames as URLs in "text/uri-list"
        when pasting or dropping files. Neither Chrome nor Firefox exhibit this behavior, and exposing local
        filenames reveal sensitive information such as username.

        Test: editing/pasteboard/datatransfer-types-dropping-text-file.html

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::readString):
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::absoluteURLsFromPasteboard): Deleted.

2017-09-19  Simon Fraser  <simon.fraser@apple.com>

        Simplify compositing layer updating
        https://bugs.webkit.org/show_bug.cgi?id=176196

        Reviewed by Zalan Bujtas.

        Remove compositing layer updating from the updateLayerPositions() code path, which
        was problematic because it wasn't pre-order. Instead, just rely on post-layout
        compositing updates, which now need to do geometry updates. Micro benchmarking shows
        this to be no slower.

        We can remove the 'OnHitTest' update type, since we always ensure that layout is updated
        before hit testing now.

        Also remove a code path that could trigger updateGeometry() during a style change, and
        in response to images loads, which were bad because layout may not be up-to-date at this time.

        Tested by existing compositing tests. Rebaselined two tests after confirming they are progressions.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::contentChanged):
        (WebCore::RenderLayerBacking::updateAfterLayout): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        (WebCore::operator<<):
        * rendering/RenderLayerCompositor.h:

2017-09-19  Simon Fraser  <simon.fraser@apple.com>

        Do more math in terms of FloatSizes and FloatPoints
        https://bugs.webkit.org/show_bug.cgi?id=177217

        Reviewed by Zalan Bujtas.
        
        Add operator/(const FloatSize&, const FloatSize&), GraphicsContext::translate(const FloatPoint&),
        FloatRect.scale(FloatSize) and AffineTransform::translate(const FloatSize&)
        and use them in lots of places to do math in terms of points and sizes.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):
        * platform/Theme.cpp:
        (WebCore::Theme::drawNamedImage const):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::drawCrossfadeSubimage):
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::center const):
        (WebCore::FloatRect::scale):
        * platform/graphics/FloatSize.h:
        (WebCore::operator/):
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::scaleFactorForDrawing const):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::translate):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::clampedSize):
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/LayoutSize.h:
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::transformContextForPainting):
        (WebCore::applyRotationForPainting):
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::translate):
        (WebCore::makeMapBetweenRects):
        * platform/graphics/transforms/AffineTransform.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton):
        (WebCore::paintButton):
        (WebCore::paintStepper):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderMediaControls.cpp:
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::RenderSVGForeignObject):
        (WebCore::RenderSVGForeignObject::localToParentTransform const):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::markerTransformation const):
        (WebCore::RenderSVGResourceMarker::markerContentTransformation const):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::createTileImage const):
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::buildTransformForProgress):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform const):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2017-09-19  Chris Dumez  <cdumez@apple.com>

        IDBRequest and IDBTransaction error properties should be DOMExceptions
        https://bugs.webkit.org/show_bug.cgi?id=177201

        Reviewed by Alex Christensen.

        IDBRequest and IDBTransaction error properties should be DOMExceptions:
        - https://w3c.github.io/IndexedDB/#idbrequest
        - https://w3c.github.io/IndexedDB/#transaction

        Previously, we used a DOMError type, which is obsolete.

        No new tests, rebaselined existing test.

        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onError):
        (WebCore::IDBOpenDBRequest::fireErrorAfterVersionChangeCompletion):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore:: const):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        (WebCore::IDBRequest::onError):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::error const):
        (WebCore::IDBTransaction::abortDueToFailedRequest):
        (WebCore::IDBTransaction::didCreateIndexOnServer):
        (WebCore::IDBTransaction::connectionClosedFromServer):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::IDBError::toDOMException const):
        * Modules/indexeddb/shared/IDBError.h:

2017-09-19  Daewoong Jang  <daewoong.jang@naverlabs.com>

        [Curl] Fix r222147
        https://bugs.webkit.org/show_bug.cgi?id=177128

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlSSLHandle.h:
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::certVerifyCallback):
        * platform/network/curl/CurlSSLVerifier.h:

2017-09-19  Simon Fraser  <simon.fraser@apple.com>

        Image subclasses should support is<> and downcast<>
        https://bugs.webkit.org/show_bug.cgi?id=177209

        Reviewed by Tim Horton.

        Add SPECIALIZE_TYPE_TRAITS_IMAGE() for Image subclasses.

        Also use #pragma once in these headers.

        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/NamedImageGeneratedImage.h:

2017-09-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r215613): Incorrect corners clipping with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=176498
        <rdar://problem/34112607>

        Reviewed by Tim Horton.

        http://trac.webkit.org/r215613 introduced an optimization to bail out of repainting borders if the invalidated
        rect to paint is fully contained within the inner rounded rect of the border. However, due to issues with
        coordinate and intersection math in RoundedRect::contains() and ellipseContainsPoint(), this causes
        RenderBoxModelObject::paintBorder to return early even in circumstances where the border requires a repaint.
        This patch fixes the contains() helper in RoundedRect and adds a new API test suite for RoundedRect that covers
        these changes.

        Test: WebCore.RoundedRectContainsRect

        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::ellipseContainsPoint):

        This function attempts to return early if the Manhattan distance of the transformed point is less than the
        radius of the circle that results from applying the same transformation to the ellipse. However, this bails and
        returns true if `x + y <= R`, but this means that if x and y are negative, we'll always end up returning true.
        We fix this by adding the absolute values instead, so the check becomes: |x| + |y| <= R.

        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::contains const):

        Before this patch, otherRect's upper left location was being used to hit-test against the ellipses formed from
        each of the 4 corners of the rounded rect. Instead, this should use (x, y), (maxX, y), (x, maxY), (maxX, maxY)
        for the top left, top right, bottom left, and bottom right corners, respectively.

        Additionally, the checks for the bottom left and bottom right to determine whether the rect corner should be
        checked for intersection against the ellipse's corner are incorrect. In the bottom left corner, the check for
        `otherRect.maxX() >= center.x()` should instead be `otherRect.x() <= center.x()`, and the check for
        `otherRect.x() <= center.x()` should instead be `otherRect.maxX() >= center.x()`.

        * platform/graphics/RoundedRect.h:

2017-09-19  Alexey Proskuryakov  <ap@apple.com>

        Layering violation in Editor::createFragment
        https://bugs.webkit.org/show_bug.cgi?id=176123

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/WebArchiveResourceFromNSAttributedString.h: Added.
        * editing/cocoa/WebArchiveResourceFromNSAttributedString.mm: Added.
        Added a wrapper class for ArchiveResource, suitable for use as a WebResourceHandler.

        * editing/cocoa/WebArchiveResourceWebResourceHandler.h: Added.
        * editing/cocoa/WebArchiveResourceWebResourceHandler.mm: Added.
        Objects of this class can be passed as "WebResourceHandler", and created instances
        of the above class.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attributesForAttributedStringConversion):
        (WebCore::createFragment):
        On newer OS versions, don't use WebKitLegacy to convert NSAttributedString to a
        document fragment. We now only use system frameworks to convert the attributed
        string to HTML source, and parse HTML into a fragment directly in WebCore.

        * platform/URL.h: Exported fakeURLWithRelativePart.

2017-09-19  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to use any class that is iterable and has a size getter
        https://bugs.webkit.org/show_bug.cgi?id=177026

        Reviewed by Darin Adler.

        No change of behavior.
        Using WTF::map to go from maps to vectors.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::resourceList):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):

2017-09-19  Eric Carlson  <eric.carlson@apple.com>

        Quiet media player private logging
        https://bugs.webkit.org/show_bug.cgi?id=177199

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2017-09-19  Alex Christensen  <achristensen@webkit.org>

        Allow modern decoding of Vectors
        https://bugs.webkit.org/show_bug.cgi?id=177102

        Reviewed by Andy Estes.

        * Modules/cache/DOMCacheEngine.h:
        (WebCore::DOMCacheEngine::CacheInfos::decode):
        (WebCore::DOMCacheEngine::CacheIdentifierOperationResult::decode):
        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::decode):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBGetAllResult.h:
        (WebCore::IDBGetAllResult::decode):
        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::decode):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/IDBKeyRangeData.h:
        (WebCore::IDBKeyRangeData::decode):
        * Modules/indexeddb/IDBValue.h:
        (WebCore::IDBValue::decode):
        * Modules/indexeddb/shared/IDBError.h:
        * Modules/indexeddb/shared/IDBIterateCursorData.h:
        (WebCore::IDBIterateCursorData::decode):
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::decode):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::decode):
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::decode):
        * platform/Cookie.h:
        (WebCore::Cookie::decode):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaTrackConstraintSetMap::decode):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::decode):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/ServiceWorkerRegistrationData.h:
        (WebCore::ServiceWorkerRegistrationData::decode):
        * workers/service/ServiceWorkerRegistrationKey.h:
        (WebCore::ServiceWorkerRegistrationKey::decode):

2017-09-19  Ryosuke Niwa  <rniwa@webkit.org>

        On iOS, getData can't get text set by setData during copy event
        https://bugs.webkit.org/show_bug.cgi?id=176980
        <rdar://problem/34453915>

        Reviewed by Darin Adler.

        The bug was caused by iOS port not implementing Pasteboard::createPrivate(). Rather than implementing this in iOS,
        replace its use for copy & paste events by StaticPasteboard Wenson added for input events. This makes read-write
        pasteboard platform agnostic and paves the way to make writing to pasteboard in a single IPC in WebKit2.

        Also fixed a bug that iOS port's Pasteboard::types returned the list of all supported types instead of ones
        actually present in the pasteboard.

        This patch also adds a vector of types to StaticPasteboard to maintain the type order.

        Tests: editing/pasteboard/dataTransfer-types-is-initially-empty-on-copy.html
               editing/pasteboard/dataTransfer-types-pasting-plaintext.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createForCopyAndPaste): Make StaticPasteboard instead of a private pasteboard.
        (WebCore::DataTransfer::createForInputEvent):
        * editing/Editor.cpp:
        (WebCore::dispatchClipboardEvent): Call newly added commitToPasteboard on StaticPasteboard.
        * platform/Pasteboard.h:
        (WebCore::Pasteboard::isStatic const):
        * platform/PasteboardStrategy.h:
        * platform/StaticPasteboard.cpp:
        (WebCore::StaticPasteboard::create): Deleted.
        (WebCore::StaticPasteboard::StaticPasteboard):
        (WebCore::StaticPasteboard::hasData):
        (WebCore::StaticPasteboard::types): Deleted. Now simply returns m_type.
        (WebCore::StaticPasteboard::readString): Added.
        (WebCore::StaticPasteboard::writeString): Added.
        (WebCore::StaticPasteboard::clear): Added.
        (WebCore::StaticPasteboard::commitToPasteboard): Added.
        (isType): Added.
        * platform/StaticPasteboard.h:
        (WebCore::Pasteboard::isStatic const): Added.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::createPrivate): Deleted.
        (WebCore::Pasteboard::writePasteboard): Deleted.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::createPrivate): Deleted.
        (WebCore::Pasteboard::writePasteboard): Deleted.
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::Pasteboard::types): Return the actual list of types in the pasteboard.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::createPrivate): Deleted.
        (WebCore::Pasteboard::writePasteboard): Deleted.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::createPrivate): Deleted.
        (WebCore::Pasteboard::writePasteboard): Deleted.
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::createPrivate): Deleted.
        (WebCore::Pasteboard::writePasteboard): Deleted.

2017-09-19  Zalan Bujtas  <zalan@apple.com>

        AXObjectCache::performDeferredCacheUpdate is called recursively through FrameView::layout. 
        https://bugs.webkit.org/show_bug.cgi?id=176218
        <rdar://problem/34205612>

        Reviewed by Simon Fraser.

        There are certain cases when we might re-enter performDeferredCacheUpdate through recursive
        layout calls (see webkit.org/b/177176) and mutate m_deferredTextChangedList multiple times.

        Test: accessibility/crash-table-recursive-layout.html

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

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

        [Cocoa] Add an ImageDecoder subclass backed by AVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=176825

        Reviewed by Eric Carlson.

        Add a new concrete subclass of ImageDecoder which uses AVFoundation to parse and decode
        image data.

        AVFoundation APIs require prior knowledge of the media data's mime type to determine whether
        the media data is decodable, so the mime type information must be passed through from the
        CachedResource -> CachedImage -> ImageFrameCache -> ImageSource so as to be available when
        creating the ImageDecoder:

        (Drive-by fix: the createFrameImageAtIndex() method will mutate internal state, so make it
        non-const.)

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::mimeType const):
        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::mimeType const):
        (WebCore::Image::expectedContentSize const):
        * platform/graphics/Image.h:
        * platform/graphics/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/graphics/ImageDecoder.h:
        (WebCore::ImageDecoder::setExpectedContentSize):
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::mimeType const):
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageObserver.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ensureDecoderAvailable):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::createFrameImageAtIndex):
        * platform/graphics/cg/ImageDecoderCG.h:

        Add the new class, ImageDecoderAVFObjC:

        AVFoundation expects to load all the media data for an AVURLAsset itself. To map between the
        provided SharedData and AVURLAsset's requirements, create a delegate object
        WebCoreSharedBufferResourceLoaderDelegate, which responds to requests from the AVURLAsset by
        extracting data from the SharedData object. Ensure AVURLAsset doesn't load any data outside
        this delegate by passing the AVURLAssetReferenceRestrictionsKey /
        AVAssetReferenceRestrictionForbidAll key and value in the AVURLAsset creation options.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h: Added.
        (WebCore::ImageDecoderAVFObjC::create):
        (WebCore::ImageDecoderAVFObjC::mimeType const):
        (WebCore::ImageDecoderAVFObjC::RotationProperties::isIdentity const):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm: Added.
        (SOFT_LINK_CONSTANT):
        (-[WebCoreSharedBufferResourceLoaderDelegate initWithParent:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate setExpectedContentSize:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate updateData:complete:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate canFulfillRequest:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate enqueueRequest:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate fulfillPendingRequests]):
        (-[WebCoreSharedBufferResourceLoaderDelegate fulfillRequest:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:didCancelLoadingRequest:]):
        (WebCore::customSchemeURL):
        (WebCore::imageDecoderAssetOptions):
        (WebCore::transformToRotationProperties):
        (WebCore::ImageDecoderAVFObjC::ImageDecoderAVFObjC):
        (WebCore::ImageDecoderAVFObjC::canDecodeType):
        (WebCore::ImageDecoderAVFObjC::firstEnabledTrack):
        (WebCore::ImageDecoderAVFObjC::readSampleMetadata): Parses the media data using AVSampleCursor to walk
            the media sample table, extracting frame presentation time, decode time, and duration.
        (WebCore::ImageDecoderAVFObjC::readTrackMetadata): Reads the affine transform and size information from
            the AVAssetTrack, and transforms the transform into a rotation value.
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer): Decompress the incoming sample data, optionally rotate
            the output, and store the results in the sample data vector.
        (WebCore::ImageDecoderAVFObjC::advanceCursor): Wrap around the end of the sample table.
        (WebCore::ImageDecoderAVFObjC::setTrack): Reset all sample and track metadata.
        (WebCore::ImageDecoderAVFObjC::encodedDataStatus const): Retrieve from sample data.
        (WebCore::ImageDecoderAVFObjC::frameCount const): Ditto.
        (WebCore::ImageDecoderAVFObjC::repetitionCount const): Ditto.
        (WebCore::ImageDecoderAVFObjC::uti const): Ditto.
        (WebCore::ImageDecoderAVFObjC::filenameExtension const): Ditto.
        (WebCore::ImageDecoderAVFObjC::frameSizeAtIndex const): Ditto.
        (WebCore::ImageDecoderAVFObjC::frameIsCompleteAtIndex const): Ditto.
        (WebCore::ImageDecoderAVFObjC::frameOrientationAtIndex const): Ditto.
        (WebCore::ImageDecoderAVFObjC::frameDurationAtIndex const): Ditto.
        (WebCore::ImageDecoderAVFObjC::frameHasAlphaAtIndex const): Ditto.
        (WebCore::ImageDecoderAVFObjC::frameAllowSubsamplingAtIndex const): Ditto.
        (WebCore::ImageDecoderAVFObjC::frameBytesAtIndex const): Ditto.
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex): If the sample data has already been
            decompressed, return it. Otherwise, walk through the sample table decompressing frames
            until the desired frame is decoded.
        (WebCore::ImageDecoderAVFObjC::setData):
        (WebCore::ImageDecoderAVFObjC::clearFrameBufferCache):

        Modify WebCoreDecompressionSession so that it can emit frames which have been converted from
        YUV -> RGB as part of the decode operation. Also, add a synchronous decoding operation
        method, for use in ImageDecoderAVFObjC.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureDecompressionSession):
        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        (WebCore::WebCoreDecompressionSession::createOpenGL):
        (WebCore::WebCoreDecompressionSession::createRGB):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::WebCoreDecompressionSession):
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):
        (WebCore::WebCoreDecompressionSession::decodeSample):
        (WebCore::WebCoreDecompressionSession::decodeSampleSync):

        Other changes:

        * WebCore.xcodeproj/project.pbxproj: Add new files to project.
        * platform/cocoa/VideoToolboxSoftLink.cpp: Add newly referenced methods.
        * platform/cocoa/VideoToolboxSoftLink.h: Ditto.


2017-09-19  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Move Authentication related tasks into AuthenticationChallenge class
        https://bugs.webkit.org/show_bug.cgi?id=177105

        Currently those codes are in ResourceHandle or related companion. It will
        be reused with NetworkLoadTask so that it should be separated from them.

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/curl/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Deleted.
        (WebCore::AuthenticationChallenge::authenticationClient const): Deleted.
        (WebCore::AuthenticationChallenge::setAuthenticationClient): Deleted.
        * platform/network/curl/AuthenticationChallengeCurl.cpp: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::protectionSpaceServerTypeFromURI):
        (WebCore::AuthenticationChallenge::protectionSpaceFromHandle):
        (WebCore::AuthenticationChallenge::removeLeadingAndTrailingQuotes):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::didReceiveAllHeaders):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):
        (WebCore::removeLeadingAndTrailingQuotes): Deleted.
        (WebCore::ResourceHandleCurlDelegate::getProtectionSpace): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-19  Zalan Bujtas  <zalan@apple.com>

        Do not mutate RenderText content during layout.
        https://bugs.webkit.org/show_bug.cgi?id=176219
        <rdar://problem/34205724>

        Reviewed by David Hyatt.

        Update combined text when the style/content change as opposed to lazily, during layout.
        -content mutation during layout might make the inline tree go out of sync.

        Test: fast/text/international/dynamic-text-combine-crash.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):
        (WebCore::RenderCombineText::setRenderedText):
        (WebCore::RenderCombineText::combineTextIfNeeded):
        (WebCore::RenderCombineText::combineText): Deleted.
        * rendering/RenderCombineText.h:
        * rendering/RenderText.h:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):

2017-09-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        createMarkupInternal should protect its pointer to the Range's common ancestor
        https://bugs.webkit.org/show_bug.cgi?id=177033
        <rdar://problem/34265390>

        Reviewed by Tim Horton.

        Adds basic safeguarding to codepaths hit while executing an outdent command.

        Test: editing/execCommand/outdent-with-media-query-listener-in-iframe.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentRegion):

        Avoid an infinite loop if endOfCurrentParagraph is a null position.

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

        Protect the raw pointer to the Range's common ancestor node.

2017-09-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222217 and r222214.
        This change introduced two LayoutTest failures.
        https://bugs.webkit.org/show_bug.cgi?id=177026

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):
        (WebCore::RenderCombineText::setRenderedText):
        (WebCore::RenderCombineText::combineText):
        (WebCore::RenderCombineText::combineTextIfNeeded): Deleted.
        * rendering/RenderCombineText.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):

2017-09-19  Zalan Bujtas  <zalan@apple.com>

        Attempt to fix Linux build.

        * rendering/RenderText.cpp:

2017-09-19  Zalan Bujtas  <zalan@apple.com>

        Do not mutate RenderText content during layout.
        https://bugs.webkit.org/show_bug.cgi?id=176219
        <rdar://problem/34205724>

        Reviewed by David Hyatt.

        Update combined text when the style/content change as opposed to lazily, during layout.
        -content mutation during layout might make the inline tree go out of sync.

        Test: fast/text/international/dynamic-text-combine-crash.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):
        (WebCore::RenderCombineText::setRenderedText):
        (WebCore::RenderCombineText::combineTextIfNeeded):
        (WebCore::RenderCombineText::combineText): Deleted.
        * rendering/RenderCombineText.h:
        * rendering/RenderText.h:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):

2017-09-19  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>

        [GTK] The binding code of Media Source Extension of AudioTrack, VideoTrack and TextTrack is not generated
        https://bugs.webkit.org/show_bug.cgi?id=174620

        Reviewed by Michael Catanzaro.

        Add AudioTrackMediaSource, VideoTrackMediaSource and TextTrackMediaSource IDL files in CMakeLists. Fix WPT test
        that checks MSE interfaces. This test failed since webm is not supported for MSE in GTK port. PR already merged
        in WPT repository.

        Remove skipped test that is now passing in TestExpectation. Modify expected file for GTK (same as mac).

        * CMakeLists.txt:

2017-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Harfbuzz] adjustSelectionRectForComplexText() should also pass the character range when shaping
        https://bugs.webkit.org/show_bug.cgi?id=177049

        Reviewed by Michael Catanzaro.

        Now that the shaper support receiving a range we should use that also in
        adjustSelectionRectForComplexText(). This will ensure consistent results with
        getGlyphsAndAdvancesForComplexText().

        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::adjustSelectionRectForComplexText const):

2017-09-19  Dean Jackson  <dino@apple.com>

        [WebGL] VideoTextureCopierCV doesn't correctly restore vertex attribute state
        https://bugs.webkit.org/show_bug.cgi?id=176771
        <rdar://problem/34386621>

        Reviewed by Antoine Quint.

        The OpenGL context in VideoTextureCopierCV wasn't being restored to
        the state it had before rendering a video to a texture. Specifically
        the vertex attribute values were never recorded by the state saver.

        Update the existing test of VideoTextureCopierCV so that it is
        explicitly doing something different from the WebCore code, which
        means that state will have to be correctly restored for the test
        to pass.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture): Make sure
        to record the vertex attribute state once we know the location of the position attribute.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::GC3DStateSaver):
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::~GC3DStateSaver):
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::saveVertexAttribState): Save all the
        applicable vertex attribute state information.
        * platform/graphics/cv/VideoTextureCopierCV.h: GC3DStateSaver can use a reference
        to the GC3D rather than a pointer.

2017-09-19  Dean Jackson  <dino@apple.com>

        [WebGL] accelerated texImage2D for video doesn't respect flipY
        https://bugs.webkit.org/show_bug.cgi?id=176491
        <rdar://problem/33833511>

        Reviewed by Jer Noble.

        (Take 3 - this was rolled out due to a test failure)

        Previously, if UNPACK_FLIP_Y_WEBGL was set to true, we'd either fall
        back to software or fail to upload texture data. Fix this by intercepting
        the texImage2D call, checking the orientation of the video, and running
        a small shader program to flip it if necessary.

        While there, implement UNPACK_PREMULTIPLY_ALPHA_WEBGL as well, although
        none of our media decoders support video with alpha, so unfortunately
        this will have no visible change.

        Tests: fast/canvas/webgl/texImage2D-video-flipY-false.html
               fast/canvas/webgl/texImage2D-video-flipY-true.html

        * platform/cocoa/CoreVideoSoftLink.cpp: Add link to CVOpenGL(ES)TextureGetCleanTexCoords,
        which is used to check the orientation of the source video.
        * platform/cocoa/CoreVideoSoftLink.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::copyVideoTextureToPlatformTexture): We can
        now handle flipped or premultiplied requests.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::copyVideoTextureToPlatformTexture): Ditto.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::VideoTextureCopierCV): Rename readFramebuffer to
        simply framebuffer.
        (WebCore::VideoTextureCopierCV::~VideoTextureCopierCV): Delete the program and buffer
        if they were created.
        (WebCore::VideoTextureCopierCV::initializeContextObjects): Sets up the shader program
        and the vertex buffer for drawing. Also records the location of the uniforms.
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture): Create a new
        framebuffer object, and render the video texture into that framebuffer using a
        shader that can flip the coordinates.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::GC3DStateSaver): Helper to restore
        the state of the user's GraphicsContext3D while we're intercepting calls.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::~GC3DStateSaver):
        * platform/graphics/cv/VideoTextureCopierCV.h:

        * platform/graphics/GraphicsContext3D.h: Add two new entry points, for direct shader
        compilation and attribute access. This avoids going through ANGLE.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::compileShaderDirect):
        (WebCore::GraphicsContext3D::getAttribLocationDirect):

2017-09-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Make ImageFrame::duration() return Seconds instead of float
        https://bugs.webkit.org/show_bug.cgi?id=177103

        Reviewed by Simon Fraser.

        ScalableImageDecoder stores milliseconds for the duration of its ImageFrames.
        But ImageFrameCache store seconds for the duration of its ImageFrames.
        To fix this issue use Seconds for the ImageFrame duration.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageDecoder.h:
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::setDuration):
        (WebCore::ImageFrame::duration const):
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::frameDurationAtIndex):
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::frameDurationAtIndex const):
        * platform/graphics/cg/ImageDecoderCG.h:
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameComplete):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::readChunks):
        (WebCore::PNGImageDecoder::frameHeader): Deleted.
        (WebCore::PNGImageDecoder::init): Deleted.
        (WebCore::PNGImageDecoder::clearFrameBufferCache): Deleted.
        (WebCore::PNGImageDecoder::initFrameBuffer): Deleted.
        (WebCore::PNGImageDecoder::frameComplete): Deleted.
        (WebCore::PNGImageDecoder::processingStart): Deleted.
        (WebCore::PNGImageDecoder::processingFinish): Deleted.
        (WebCore::PNGImageDecoder::fallbackNotAnimated): Deleted.

2017-09-18  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error in InbandTextTrackPrivateAVCF::readNativeSampleBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=177108

        Reviewed by Brent Fulgham.

        The InbandTextTrackPrivateAVF::m_sampleInputBuffer is private and not accessible in this method.
 
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

2017-09-18  Tim Horton  <timothy_horton@apple.com>

        Support min() and max() in calc()
        https://bugs.webkit.org/show_bug.cgi?id=167000
        <rdar://problem/30153481>

        Reviewed by David Hyatt.
        Patch originally by Myles Maxfield.

        Add two new toplevel functions to CSS, min() and max(), which take an
        arbirary number of arguments and resolve to the minimum and maximum of
        the resolved value of the arguments, respectively. It is also possible
        to use min() and max() inside calc(), and to use calc()-like math
        inside min() and max().

        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory):
        min and max operators don't use determineCategory; we have a specific
        implementation for them in createMinOrMax.

        (WebCore::resolvedTypeForMinOrMax):
        The spec says that min() and max() should be marked as invalid if they
        have values of more than one type, but that percentages should resolve
        against the destination type before making this determination. So,
        if the destination type is length, percent turns into percent-length,
        and similarly for number.

        (WebCore::isIntegerResult):
        Add an n-way implementation of isIntegerResult.

        (WebCore::isSamePair):
        (WebCore::CSSCalcOperation::createMinOrMax): Create a min() or max()
        operation, as long as the types of arguments are all the same. Allow
        lengths to upgrade the whole operation to percent-length, and numbers
        to percent-number, which will cause us to use CalculationValue and friends
        in order to do proper resolution of all of the parameters instead of
        just comparing their numeric values.

        (WebCore::CSSCalcOperation::createCalcExpression):
        (WebCore::CSSCalcOperation::doubleValue):
        (WebCore::CSSCalcOperation::computeLengthPx):
        (WebCore::CSSCalcOperation::customCSSText):
        (WebCore::CSSCalcOperation::primitiveType):
        (WebCore::CSSCalcOperation::CSSCalcOperation):
        (WebCore::CSSCalcOperation::evaluate):
        (WebCore::CSSCalcOperation::evaluateOperator):
        Adapt to child counts greater than two.

        (WebCore::CSSCalcOperation::buildCssText):
        Add support for min() and max().

        (WebCore::CSSCalcExpressionNodeParser::parseCalc):
        parseCalc now accepts a CSSValueID parameter indicating which calc function
        it should parse (calc, webkit-calc, min, or max), and delegates to either
        parseValueExpression or parseMinMaxExpression.

        (WebCore::CSSCalcExpressionNodeParser::operatorValue):
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        If min() or max() are found while parsing a value (i.e. nested inside
        either calc or themselves), use parseMinMaxExpression on that subtree.

        (WebCore::CSSCalcExpressionNodeParser::parseValueTerm):
        (WebCore::CSSCalcExpressionNodeParser::parseValueMultiplicativeExpression):
        (WebCore::CSSCalcExpressionNodeParser::parseAdditiveValueExpression):
        Adjust to the CSSCalcBinaryOperation->CSSCalcOperation rename.

        (WebCore::CSSCalcExpressionNodeParser::parseMinMaxExpression):
        Added. Parse an arbitrary number of comma-and-whitespace-separated children.

        (WebCore::createBlendHalf):
        Adjust to the CSSCalcBinaryOperation->CSSCalcOperation rename.

        (WebCore::createCSS):
        Build the CSSCalcOperation for the platform-independent min and max operations.

        (WebCore::CSSCalcValue::create):
        Pass the function being parsed and the destination calc category for the
        property being parsed for into create, and then into the parser so that
        it can know which function it is parsing for, and what kind of result it
        needs (as previously mentioned above in resolvedTypeForMinOrMax).

        * css/CSSCalculationValue.h:
        * css/CSSValueKeywords.in:
        Add min and max functions as CSS keywords.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLength):
        (WebCore::StyleBuilderConverter::convertTo100PercentMinusLength):
        * platform/Length.cpp:
        (WebCore::convertTo100PercentMinusLength):
        Adapt to the CalcExpressionOperation constructor taking a vector of
        arguments instead of two.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::CalcParser):
        Store and pass the specific function being parsed down into CSSCalcValue.

        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeTime):
        Pass the destination type into each calc parser.

        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionOperation::evaluate const):
        (WebCore::CalcExpressionOperation::operator== const):
        (WebCore::CalcExpressionOperation::dump const):
        (WebCore::operator<<):
        (WebCore::CalcExpressionBinaryOperation::evaluate const): Deleted.
        (WebCore::CalcExpressionBinaryOperation::operator== const): Deleted.
        (WebCore::CalcExpressionBinaryOperation::dump const): Deleted.
        * platform/CalculationValue.h:
        (WebCore::CalcExpressionOperation::CalcExpressionOperation):
        (WebCore::operator==):
        (WebCore::toCalcExpressionOperation):
        (WebCore::CalcExpressionBinaryOperation::CalcExpressionBinaryOperation): Deleted.
        (WebCore::toCalcExpressionBinaryOperation): Deleted.
        Adjust to the CSSCalcBinaryOperation->CSSCalcOperation rename.
        Adjust to having n>2 children.
        Support min() and max() operators in various places.
        

2017-09-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Move error generation task into ResourceError
        https://bugs.webkit.org/show_bug.cgi?id=176963

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::errorDescription):
        (WebCore::CurlHandle::errorDescription const):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::setSslErrors):
        (WebCore::ResourceError::hasSSLConnectError const): Deleted.
        (WebCore::ResourceError::doPlatformIsolatedCopy): Deleted.
        * platform/network/curl/ResourceErrorCurl.cpp: Added.
        (WebCore::ResourceError::httpError):
        (WebCore::ResourceError::sslError):
        (WebCore::ResourceError::hasSSLConnectError const):
        (WebCore::ResourceError::doPlatformIsolatedCopy):
        (WebCore::ResourceError::platformCompare):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::notifyFail):
        (WebCore::ResourceHandleCurlDelegate::didFail):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222170.

        The API test added with this change is failing.

        Reverted changeset:

        "Allow WTF::map to use any class that is iterable and has a
        size getter"
        https://bugs.webkit.org/show_bug.cgi?id=177026
        http://trac.webkit.org/changeset/222170

2017-09-18  Don Olmstead  <don.olmstead@sony.com>

        [Curl] Forward declare SSL context

        Unreviewed build fix after r222147. OpenSSL's SHA1 declaration conflicts with WTF's.

        No new tests. No change in behavior.

        * platform/network/curl/CurlSSLHandle.h:
        * platform/network/curl/CurlSSLVerifier.cpp:
        * platform/network/curl/CurlSSLVerifier.h:

2017-09-18  Ryosuke Niwa  <rniwa@webkit.org>

        getData('text/plain') doesn't work on iOS 10
        https://bugs.webkit.org/show_bug.cgi?id=177034

        Reviewed by Wenson Hsieh.

        The bug was caused by the mispatch of UTI between reading & writing plain text.
        Use kUTTypeText (instead of kUTTypePlainText) to read from UIPasteboard on iOS 10.

        Re-enabled tests were passing on iOS 11 and continues to pass after this code change.

        Tests: editing/pasteboard/clipboard-event.html
               editing/pasteboard/datatransfer-items-paste-plaintext.html
               editing/pasteboard/get-data-text-plain-paste.html

        * platform/ios/PasteboardIOS.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):

2017-09-18  Youenn Fablet  <youenn@apple.com>

        Allow WTF::map to use any class that is iterable and has a size getter
        https://bugs.webkit.org/show_bug.cgi?id=177026

        Reviewed by Darin Adler.

        No change of behavior.
        Using WTF::map to go from maps to vectors.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::resourceList):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):

2017-09-18  Emilio Cobos Álvarez  <emilio@crisal.io>

        Always update display: contents styles in RenderTreeUpdater.
        https://bugs.webkit.org/show_bug.cgi?id=177065

        Reviewed by Antti Koivisto.

        Otherwise we keep an old style around, making following style updates wrong.

        Test: fast/css/display-contents-style-update.html

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

2017-09-18  Antti Koivisto  <antti@apple.com>

        Avoid style resolution when clearing focused element.
        https://bugs.webkit.org/show_bug.cgi?id=176224
        <rdar://problem/34206409>

        Reviewed by Zalan Bujtas.

        Test: fast/dom/focus-style-resolution.html

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

            Don't do synchronous style resolution with FocusRemovalEventsMode::DoNotDispatch.
            Style resolution may dispatch events.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didBlur):

            Move resolveStyleIfNeeded call to setFocusedElement. It is the only client for didBlur.

2017-09-18  Antti Koivisto  <antti@apple.com>

        Rolling out the previous to land again with a test.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didBlur):

2017-09-18  Antti Koivisto  <antti@apple.com>

        Avoid style resolution when clearing focused element.
        https://bugs.webkit.org/show_bug.cgi?id=176224
        <rdar://problem/34206409>

        Reviewed by Zalan Bujtas.

        Test: fast/dom/focus-style-resolution.html

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

            Don't do synchronous style resolution with FocusRemovalEventsMode::DoNotDispatch.
            Style resolution may dispatch events.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didBlur):

            Move resolveStyleIfNeeded call to setFocusedElement. It is the only client for didBlur.

2017-09-18  Per Arne Vollan  <pvollan@apple.com>

        [WK1] Layout Test fast/events/beforeunload-dom-manipulation-crash.html is crashing.
        https://bugs.webkit.org/show_bug.cgi?id=177071

        Reviewed by Brent Fulgham.

        The Page pointer in the history controller's frame is null. Add a null pointer check before
        accessing the page. 

        No new tests, covered by exiting tests.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForClientRedirect):

2017-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r221974): [Harfbuzz] Test fast/text/international/hebrew-selection.html is failing since r221974
        https://bugs.webkit.org/show_bug.cgi?id=177036

        Reviewed by Michael Catanzaro.

        In r221974 I rewrote the characterIndexForXPosition implementation without taking into account that there can be
        multiple glyphs for the same character, so we can't simply do index++ and index-- to get the next and previous
        character index.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::characterIndexForXPosition): Always get the character index from
        m_glyphToCharacterIndexes array.

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

        Virtualize ImageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=176118

        Reviewed by Eric Carlson.

        Add an explicit, abstract base class ImageDecoder, and convert ImageDecoderCG to a true
        subclass. This will allow multiple ImageDecoder subclasses to exist simultaneously at
        runtime.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ImageDecoders.cmake:
        * platform/graphics/ImageDecoder.cpp: Added.
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoder::bytesDecodedToDetermineProperties):
        * platform/graphics/ImageDecoder.h: Added.
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::isAllDataReceived const):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::ImageDecoderCG):
        (WebCore::ImageDecoderCG::bytesDecodedToDetermineProperties):
        (WebCore::ImageDecoderCG::uti const):
        (WebCore::ImageDecoderCG::filenameExtension const):
        (WebCore::ImageDecoderCG::encodedDataStatus const):
        (WebCore::ImageDecoderCG::frameCount const):
        (WebCore::ImageDecoderCG::repetitionCount const):
        (WebCore::ImageDecoderCG::hotSpot const):
        (WebCore::ImageDecoderCG::frameSizeAtIndex const):
        (WebCore::ImageDecoderCG::frameIsCompleteAtIndex const):
        (WebCore::ImageDecoderCG::frameOrientationAtIndex const):
        (WebCore::ImageDecoderCG::frameDurationAtIndex const):
        (WebCore::ImageDecoderCG::frameAllowSubsamplingAtIndex const):
        (WebCore::ImageDecoderCG::frameHasAlphaAtIndex const):
        (WebCore::ImageDecoderCG::frameBytesAtIndex const):
        (WebCore::ImageDecoderCG::createFrameImageAtIndex const):
        (WebCore::ImageDecoderCG::setData):
        (WebCore::ImageDecoder::ImageDecoder): Deleted.
        (WebCore::ImageDecoder::bytesDecodedToDetermineProperties): Deleted.
        (WebCore::ImageDecoder::uti const): Deleted.
        (WebCore::ImageDecoder::filenameExtension const): Deleted.
        (WebCore::ImageDecoder::encodedDataStatus const): Deleted.
        (WebCore::ImageDecoder::frameCount const): Deleted.
        (WebCore::ImageDecoder::repetitionCount const): Deleted.
        (WebCore::ImageDecoder::hotSpot const): Deleted.
        (WebCore::ImageDecoder::frameSizeAtIndex const): Deleted.
        (WebCore::ImageDecoder::frameIsCompleteAtIndex const): Deleted.
        (WebCore::ImageDecoder::frameOrientationAtIndex const): Deleted.
        (WebCore::ImageDecoder::frameDurationAtIndex const): Deleted.
        (WebCore::ImageDecoder::frameAllowSubsamplingAtIndex const): Deleted.
        (WebCore::ImageDecoder::frameHasAlphaAtIndex const): Deleted.
        (WebCore::ImageDecoder::frameBytesAtIndex const): Deleted.
        (WebCore::ImageDecoder::createFrameImageAtIndex const): Deleted.
        (WebCore::ImageDecoder::setData): Deleted.
        * platform/graphics/cg/ImageDecoderCG.h:
        (WebCore::ImageDecoderCG::create):
        (WebCore::ImageDecoder::create): Deleted.
        (WebCore::ImageDecoder::isSizeAvailable): Deleted.
        (WebCore::ImageDecoder::isAllDataReceived const): Deleted.
        (WebCore::ImageDecoder::clearFrameBufferCache): Deleted.
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::ImageDecoderDirect2D):
        (WebCore::ImageDecoderDirect2D::systemImagingFactory):
        (WebCore::ImageDecoderDirect2D::bytesDecodedToDetermineProperties):
        (WebCore::ImageDecoderDirect2D::filenameExtension const):
        (WebCore::ImageDecoderDirect2D::isSizeAvailable const):
        (WebCore::ImageDecoderDirect2D::encodedDataStatus const):
        (WebCore::ImageDecoderDirect2D::size const):
        (WebCore::ImageDecoderDirect2D::frameCount const):
        (WebCore::ImageDecoderDirect2D::repetitionCount const):
        (WebCore::ImageDecoderDirect2D::hotSpot const):
        (WebCore::ImageDecoderDirect2D::frameSizeAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameIsCompleteAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameOrientationAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameDurationAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameAllowSubsamplingAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameHasAlphaAtIndex const):
        (WebCore::ImageDecoderDirect2D::frameBytesAtIndex const):
        (WebCore::ImageDecoderDirect2D::setTargetContext):
        (WebCore::ImageDecoderDirect2D::createFrameImageAtIndex const):
        (WebCore::ImageDecoderDirect2D::setData):
        * platform/graphics/win/ImageDecoderDirect2D.h:
        (WebCore::ImageDecoderDirect2D::create):
        (WebCore::ImageDecoder::create): Deleted.
        (WebCore::ImageDecoder::isAllDataReceived const): Deleted.
        (WebCore::ImageDecoder::clearFrameBufferCache): Deleted.
        * platform/image-decoders/ScalableImageDecoder.cpp: Renamed from Source/WebCore/platform/image-decoders/ImageDecoder.cpp.
        (WebCore::ScalableImageDecoder::create):
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const):
        (WebCore::ScalableImageDecoder::frameHasAlphaAtIndex const):
        (WebCore::ScalableImageDecoder::frameBytesAtIndex const):
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):
        (WebCore::ScalableImageDecoder::createFrameImageAtIndex):
        (WebCore::ScalableImageDecoder::prepareScaleDataIfNecessary):
        (WebCore::ScalableImageDecoder::upperBoundScaledX):
        (WebCore::ScalableImageDecoder::lowerBoundScaledX):
        (WebCore::ScalableImageDecoder::upperBoundScaledY):
        (WebCore::ScalableImageDecoder::lowerBoundScaledY):
        (WebCore::ScalableImageDecoder::scaledY):
        * platform/image-decoders/ScalableImageDecoder.h: Renamed from Source/WebCore/platform/image-decoders/ImageDecoder.h.
        (WebCore::ScalableImageDecoder::ScalableImageDecoder):
        (WebCore::ScalableImageDecoder::~ScalableImageDecoder):
        (WebCore::ScalableImageDecoder::premultiplyAlpha const):
        (WebCore::ScalableImageDecoder::isAllDataReceived const):
        (WebCore::ScalableImageDecoder::size const):
        (WebCore::ScalableImageDecoder::scaledSize):
        (WebCore::ScalableImageDecoder::setSize):
        (WebCore::ScalableImageDecoder::setIgnoreGammaAndColorProfile):
        (WebCore::ScalableImageDecoder::ignoresGammaAndColorProfile const):
        (WebCore::ScalableImageDecoder::rgbColorProfile):
        (WebCore::ScalableImageDecoder::subsamplingLevelForScale):
        (WebCore::ScalableImageDecoder::inputDeviceColorProfile):
        (WebCore::ScalableImageDecoder::setFailed):
        (WebCore::ScalableImageDecoder::failed const):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::setData):
        (WebCore::BMPImageDecoder::setFailed):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/bmp/BMPImageReader.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::setSize):
        (WebCore::GIFImageDecoder::setFailed):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::setData):
        (WebCore::ICOImageDecoder::size):
        (WebCore::ICOImageDecoder::setSize):
        (WebCore::ICOImageDecoder::setFailed):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::JPEGImageDecoder):
        (WebCore::JPEGImageDecoder::setSize):
        (WebCore::JPEGImageDecoder::setFailed):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::setSize):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::setFailed):
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2017-09-18  Andy Estes  <aestes@apple.com>

        [Mac] Upstream miscellaneous WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=177029

        Reviewed by Alex Christensen.

        * Configurations/WebCore.xcconfig: Used -force_load of libPAL instead of -ObjC. This forces
        the linker to load both Objective-C and C PAL symbols in WebCore. This change is needed for
        PAL::popUpMenu(), which is used by WebKit and WebKitLegacy but not WebCore.
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::contextMenuItemTagSearchWeb):
        * platform/cocoa/ScrollController.mm:
        (WebCore::elasticDeltaForTimeDelta):
        (WebCore::elasticDeltaForReboundDelta):
        (WebCore::reboundDeltaForElasticDelta):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/mac/CursorMac.mm:
        (WebCore::WKCoreCursor_coreCursorType):
        (WebCore::createCoreCursorClass):
        (WebCore::coreCursorClass):
        (WebCore::cursor):
        (WebCore::Cursor::ensurePlatformCursor const):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextArea):

2017-09-18  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [Win][PAL] Move WebCoreHeaderDetection.h to PAL
        https://bugs.webkit.org/show_bug.cgi?id=176990

        Reviewed by Alex Christensen.

        * PlatformWin.cmake:
        Stop generating WebCoreHeaderDetection.h in WebCore.

        * config.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        Include PALHeaderDetection.h instead of WebCoreHeaderDetection.h

2017-09-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Create classes dedicated to handle SSL related tasks
        and separate verifier and certificate management.
        https://bugs.webkit.org/show_bug.cgi?id=176910

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::CurlContext):
        (WebCore::CurlHandle::setCACertPath):
        (WebCore::certificatePath): Deleted.
        (WebCore::CurlHandle::enableCAInfoIfExists): Deleted.
        (WebCore::CurlHandle::setSslErrors): Deleted.
        (WebCore::CurlHandle::getSslErrors): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::sslHandle):
        (WebCore::CurlContext::getCertificatePath const): Deleted.
        (WebCore::CurlContext::shouldIgnoreSSLErrors const): Deleted.
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::setupRequest):
        * platform/network/curl/CurlSSLHandle.cpp: Added.
        (WebCore::CurlSSLHandle::CurlSSLHandle):
        (WebCore::CurlSSLHandle::getCACertPathEnv):
        (WebCore::CurlSSLHandle::setHostAllowsAnyHTTPSCertificate):
        (WebCore::CurlSSLHandle::isAllowedHTTPSCertificateHost):
        (WebCore::CurlSSLHandle::canIgnoredHTTPSCertificate):
        (WebCore::CurlSSLHandle::setClientCertificateInfo):
        (WebCore::CurlSSLHandle::getSSLClientCertificate):
        * platform/network/curl/CurlSSLHandle.h: Renamed from Source/WebCore/platform/network/curl/SSLHandle.h.
        (WebCore::CurlSSLHandle::shouldIgnoreSSLErrors const):
        (WebCore::CurlSSLHandle::getCACertPath const):
        * platform/network/curl/CurlSSLVerifier.cpp: Renamed from Source/WebCore/platform/network/curl/SSLHandle.cpp.
        (WebCore::CurlSSLVerifier::setSslCtx):
        (WebCore::CurlSSLVerifier::certVerifyCallback):
        (WebCore::CurlSSLVerifier::getPemDataFromCtx):
        (WebCore::CurlSSLVerifier::convertToSSLCertificateFlags):
        * platform/network/curl/CurlSSLVerifier.h: Added.
        (WebCore::CurlSSLVerifier::setCurlHandle):
        (WebCore::CurlSSLVerifier::setHostName):
        (WebCore::CurlSSLVerifier::sslErrors):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):
        (WebCore::ResourceHandle::setClientCertificateInfo):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::setupRequest):
        (WebCore::ResourceHandleCurlDelegate::notifyFail):
        (WebCore::ResourceHandleCurlDelegate::willSetupSslCtx):
        (WebCore::ResourceHandleCurlDelegate::willSetupSslCtxCallback):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2017-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r221974): [Harfbuzz] Test fast/text/international/hebrew-selection.html is failing since r221974
        https://bugs.webkit.org/show_bug.cgi?id=177036

        Reviewed by Michael Catanzaro.

        In r221974 I rewrote the characterIndexForXPosition implementation without taking into account that there can be
        multiple glyphs for the same character, so we can't simply do index++ and index-- to get the next and previous
        character index.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::characterIndexForXPosition): Always get the character index from
        m_glyphToCharacterIndexes array.

2017-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Harfbuzz] Test fast/text/complex-text-selection.html is failing since r222090
        https://bugs.webkit.org/show_bug.cgi?id=177035

        Reviewed by Michael Catanzaro.

        The problem was not actually introduced in r222090, but revelaed by that change. The bug was added in r222086,
        when adding the support for shaping a range of characters. We are not correctly filtering the characters in case
        of rtl in some cases.

        Fixes: fast/text/complex-text-selection.html

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun): When checking if the current character is inside
        the given range, continue or break the loop depending on whether text is rtl or not.

2017-09-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Build failure with enchant-2.1.1
        https://bugs.webkit.org/show_bug.cgi?id=176877

        Unreviewed build fix for enchant 2.1.1.

        enchant_dict_free_suggestions() has been deprecated since at least 2005. Use its
        replacement, enchant_dict_free_string_list(), instead. That's also been around since at
        least 2005.

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::getGuessesForWord):

2017-09-16  Antti Koivisto  <antti@apple.com>

        Computing animated style should not require renderers
        https://bugs.webkit.org/show_bug.cgi?id=171926
        <rdar://problem/34428035>

        Reviewed by Sam Weinig.

        CSS animation system is now element rather than renderer based. This allows cleaning up
        style resolution and render tree update code.

        This also fixes bug animation doesn't run if display property is animated from one rendered type
        to another. Added a test case for this.

        Test: transitions/transition-display-property-2.html

        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationController::updateAnimations):

            Pass in the old style instead of getting it from the renderer.
            Factor to return the animated style as a return value.

        * page/animation/CSSAnimationController.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::willBeDestroyed):

            Animation are now canceled by RenderTreeUpdater::tearDownRenderers.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasInitialAnimatedStyle const): Deleted.
        (WebCore::RenderElement::setHasInitialAnimatedStyle): Deleted.

            We no longer need to this concept.

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::RenderTreeUpdater::createRenderer):

            We now get correct animated style from style resolution in all cases so we don't need to compute
            it separately for new renderers.

        (WebCore::RenderTreeUpdater::tearDownRenderers):

            Cancel animations when render tree is fully torn down. Keep them when updating style.

        * style/RenderTreeUpdater.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

            We can now compute animated style without renderer. Special cases dealing with rendererless case
            can be removed.

2017-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Harbuzz] Test fast/text/international/harfbuzz-runs-with-no-glyph.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=177005

        Reviewed by Michael Catanzaro.

        Fixes: fast/text/international/harfbuzz-runs-with-no-glyph.html

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::xPositionForOffset): Return early if there aren't glyphs.

2017-09-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Avoid calling String::format() in PlatformCAFilters::setFiltersOnLayer()
        https://bugs.webkit.org/show_bug.cgi?id=177028

        Reviewed by Tim Horton.

        String::format() is a bigger hammer for what we need to do in this function.

        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:

2017-09-15  Ryosuke Niwa  <rniwa@webkit.org>

        iOS: Use blob URL instead of a WebKit fake URL when pasting an image
        https://bugs.webkit.org/show_bug.cgi?id=176986
        <rdar://problem/34455052>

        Reviewed by Wenson Hsieh.

        Fixed the bug that pasting an image on iOS resulted in an img element with src attribute
        set to a WebKit fake URL so that the Web content could never save it.

        Like r208451 on Mac, use a Blob URL instead.

        This patch also removes createFragmentForImageResourceAndAddResource since it's no longer used.

        Tests: LayoutTests/editing/pasteboard/paste-image-as-blob-url.html

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readImage): Moved the code here from WebContentReaderMac.mm.
        * editing/ios/WebContentReaderIOS.mm:
        (WebCore::WebContentReader::readImage): Deleted. This is the code 
        * editing/mac/WebContentReaderMac.mm:
        (WebCore::WebContentReader::readImage): Moved to WebContentReaderCocoa.mm. Note that
        typeAsFilenameWithExtension was dead code after r208451
        * editing/markup.cpp:
        (WebCore::createFragmentForImageResourceAndAddResource): Deleted.
        * editing/markup.h:

2017-09-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Avoid style recomputation when forwarding a focus event to an text field's input type
        https://bugs.webkit.org/show_bug.cgi?id=176160
        <rdar://problem/34184820>

        Reviewed by Ryosuke Niwa.

        Currently, TextFieldInputType::forwardEvent synchronously triggers style recomputation, for the purpose of
        scrolling to the origin upon handling a blur event, and also for updating caps lock state after a blur or focus.
        In synchronously triggering style recomputation, we may end up running arbitrary JavaScript, which may change
        the HTMLInputElement's type and cause the current TextFieldInputType to be destroyed.

        To mitigate this, we only update caps lock state when forwarding a focus or blur event to the InputType, and
        instead scroll blurred text fields to the origin later, in HTMLInputElement::didBlur (invoked from
        Document::setFocusedElement after blur and focusout events have fired). Instead of having the InputType update
        style, lift the call to Document::updateStyleIfNeeded up into HTMLInputElement so that we gracefully handle the
        case where the page destroys and sets a new InputType within the scope of this style update.

        Test: fast/forms/change-input-type-in-focus-handler.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didBlur):
        * html/HTMLInputElement.h:
        * html/InputType.h:
        (WebCore::InputType::elementDidBlur):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::elementDidBlur):
        * html/TextFieldInputType.h:

2017-09-15  JF Bastien  <jfbastien@apple.com>

        WTF: use Forward.h when appropriate instead of Vector.h
        https://bugs.webkit.org/show_bug.cgi?id=176984

        Reviewed by Saam Barati.

        There's no need to include Vector.h when Forward.h will suffice. All we need is to move the template default parameters from Vector, and then the forward declaration can be used in so many new places: if a header only takes Vector by reference, rvalue reference, pointer, returns any of these, or has them as members then the header doesn't need to see the definition because the declaration will suffice.

        * Modules/entriesapi/FileSystemEntriesCallback.h:
        * Modules/indexeddb/IDBEventDispatcher.h:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/websockets/WebSocketChannelClient.h:
        * contentextensions/CombinedURLFilters.h:
        * crypto/SerializedCryptoKeyWrap.h:
        * css/InspectorCSSOMWrappers.h:
        * css/PageRuleCollector.h:
        * css/parser/CSSParserTokenRange.h:
        * dom/DocumentTouch.h:
        * dom/MutationCallback.h:
        * editing/EditingStyle.h:
        * editing/SpellChecker.h:
        * editing/markup.h:
        * fileapi/ThreadableBlobRegistry.h:
        * html/FileListCreator.h:
        * inspector/WebHeapAgent.h:
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::ContentFilter):
        * loader/ContentFilter.h:
        * loader/CookieJar.h:
        * loader/FrameLoaderClient.h:
        * loader/LoaderStrategy.h:
        * loader/SubframeLoader.h:
        * page/ChromeClient.h:
        * page/FrameSnapshotting.h:
        * page/IntersectionObserverCallback.h:
        * page/PageSerializer.h:
        * page/UserContentURLPattern.h:
        * page/scrolling/AxisScrollSnapOffsets.h:
        * page/win/FrameWin.h:
        * platform/CookiesStrategy.h:
        * platform/KeyedCoding.h:
        * platform/PasteboardStrategy.h:
        * platform/SSLKeyGenerator.h:
        * platform/ScrollableArea.h:
        * platform/encryptedmedia/CDMFactory.h:
        * platform/gamepad/EmptyGamepadProvider.cpp:
        * platform/gamepad/GamepadProvider.h:
        * platform/gamepad/GamepadProviderClient.h:
        * platform/gamepad/PlatformGamepad.h:
        * platform/graphics/GeometryUtilities.cpp:
        * platform/graphics/GeometryUtilities.h:
        * platform/graphics/Icon.h:
        * platform/graphics/LayoutRect.h:
        * platform/graphics/Path.h:
        * platform/graphics/WOFFFileFormat.h:
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h:
        * platform/graphics/opentype/OpenTypeMathData.h:
        * platform/image-encoders/JPEGImageEncoder.h:
        * platform/image-encoders/PNGImageEncoder.h:
        * platform/network/BlobRegistry.h:
        * platform/network/HTTPParsers.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/DownloadBundle.h:
        * platform/network/curl/CurlCacheEntry.h:
        * platform/network/curl/DownloadBundle.h:
        * platform/text/LineEnding.h:
        * platform/text/QuotedPrintable.cpp:
        * platform/text/QuotedPrintable.h:
        * rendering/FlexibleBoxAlgorithm.h:
        * rendering/style/QuotesData.h:
        * rendering/svg/SVGSubpathData.h:
        * storage/StorageEventDispatcher.h:
        * style/StyleInvalidator.h:
        * style/StyleRelations.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphItemElement.h:

2017-09-15  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: writtenAudioDuration >= readAudioDuration in com.apple.WebCore:WebCore::RealtimeOutgoingAudioSource::isReachingBufferedAudioDataHighLimit() + 222
        https://bugs.webkit.org/show_bug.cgi?id=175164
        <rdar://problem/33712305>

        Reviewed by Eric Carlson.

        No observable change of behavior.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::hasBufferedEngouhData):
        (WebCore::RealtimeOutgoingAudioSource::audioSamplesAvailable): Calling pullData only if there is at least 0.01 seconds of available data.
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:

2017-09-15  Youenn Fablet  <youenn@apple.com>

        Move code using Vector::map to WTF:map
        https://bugs.webkit.org/show_bug.cgi?id=176860

        Reviewed by Jer Noble.

        No change of behavior.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create): Moving to WTF::map.
        * page/Settings.cpp:
        (WebCore::Settings::setMediaContentTypesRequiringHardwareSupport): Using iterator split to not create a temporary vector.
        * platform/ContentType.cpp:
        (WebCore::ContentType::ContentType):
        (WebCore::splitParameters):
        (WebCore::ContentType::codecs const): Ditto.
        (WebCore::ContentType::profiles const): Ditto.
        (WebCore::stripHTMLWhiteSpace): Deleted.
        * platform/ContentType.h:
        (WebCore::ContentType::create): Deleted.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Minor count churning change.

2017-09-15  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForVideoData should enqueue data if still useful
        https://bugs.webkit.org/show_bug.cgi?id=177016

        Reviewed by Jer Noble.

        No change of behavior.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForVideoData): exciting early in block to prevent enqueueing.

2017-09-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222040.

        The LayoutTest added with this change is a flaky image failure
        on mac-wk1 debug bots.

        Reverted changeset:

        "Computing animated style should not require renderers"
        https://bugs.webkit.org/show_bug.cgi?id=171926
        http://trac.webkit.org/changeset/222040

2017-09-15  Tim Horton  <timothy_horton@apple.com>

        Fix the macOS CMake build
        https://bugs.webkit.org/show_bug.cgi?id=177015

        Reviewed by Andy Estes.

        * CMakeLists.txt:
        Add Payment Request files.

        * PlatformMac.cmake:
        Add the CoreServices umbrella framework to the framework search path.
        Add service workers directories to the forwarding headers path.
        Add Modules/cache directory to the forwarding headers path.

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::resolveLengthAttributeForSVG): Deleted unused function.

2017-09-15  John Wilander  <wilander@apple.com>

        Storage Access API: Deny access to nested iframes
        https://bugs.webkit.org/show_bug.cgi?id=176939
        <rdar://problem/34439609>

        Reviewed by Brent Fulgham.

        Test: http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-nested-iframe.html

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

2017-09-15  Antti Koivisto  <antti@apple.com>

        AnimationBase should ref the element
        https://bugs.webkit.org/show_bug.cgi?id=176993

        Reviewed by Simon Fraser.

        We now longer have renderer pointer. Element can be reffed for safety.

        This doesn't create reference cycle as the element pointer is cleared when render tree is
        torn down. This happens at the latest when the element is removed from the tree.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::~AnimationBase):
        (WebCore::AnimationBase::clear):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::~AnimationBase): Deleted.
        (WebCore::AnimationBase::clear): Deleted.
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::pauseAnimation):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        (WebCore::ImplicitAnimation::reset):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        (WebCore::KeyframeAnimation::resolveKeyframeStyles):

2017-09-15  Brent Fulgham  <bfulgham@apple.com>

        Make DocumentLoader a FrameDestructionObserver
        https://bugs.webkit.org/show_bug.cgi?id=176364
        <rdar://problem/34254780>

        Reviewed by Alex Christensen.

        The DocumentLoader needs to know when its Frame is destroyed so that it can
        perform properly cleanup.

        Test: fast/events/beforeunload-dom-manipulation-crash.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader): Call FrameDestructionObserver constructor.
        (WebCore::DocumentLoader::responseReceived): Drive-by fix. Make sure the current
        object is valid during the callback.
        (WebCore::DocumentLoader::attachToFrame): Use FrameDestructionObserver::observerFrame rather
        than setting the m_frame variable directly.
        (WebCore::DocumentLoader::detachFromFrame): Ditto.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::frame const): Deleted, as this is provided by the FrameDestructionObserver.

2017-09-15  Ms2ger  <Ms2ger@igalia.com>

        Update some WebGL2 return types to match the specification.
        https://bugs.webkit.org/show_bug.cgi?id=176996

        Reviewed by Alex Christensen.

        This should not change the behavior in any way, but it makes it simpler
        to compare our IDL with the specification's.

        No new tests because there is no behavior change.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getUniformIndices):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-15  Antti Koivisto  <antti@apple.com>

        Remove FilterOperation::blendingNeedsRendererSize()
        https://bugs.webkit.org/show_bug.cgi?id=176994

        Reviewed by Simon Fraser.

        It is not used.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::blend):
        (WebCore::FilterOperation::shouldBeRestrictedBySecurityOrigin const):
        (WebCore::FilterOperation::blendingNeedsRendererSize const): Deleted.

2017-09-15  Youenn Fablet  <youenn@apple.com>

        Add an URL method to remove both query string and fragment identifier
        https://bugs.webkit.org/show_bug.cgi?id=176911

        Reviewed by Alex Christensen.

        Covered by existing tests and new API tests.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::retrieveRecords): Using new helper method.
        * platform/URL.cpp:
        (WebCore::URL::removeQueryAndFragmentIdentifier):
        * platform/URL.h:

2017-09-15  Andy Estes  <aestes@apple.com>

        [Cocoa] Upstream MediaRemote and VideoToolbox WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176953

        Reviewed by Eric Carlson.

        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::queryDecoderAvailability):
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystem):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType const):
        (WebCore::exernalDeviceDisplayNameForPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName const):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/MediaRemoteSoftLink.cpp:
        * platform/mac/MediaRemoteSoftLink.h:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2017-09-15  Eric Carlson  <eric.carlson@apple.com>

        Switch text tracks to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176809
        <rdar://problem/34397605>

        Reviewed by Jer Noble.

        Make all track objects use the same logger and log identifier as the media element they
        "belong" to. Convert all track logging from debug-only to release logging.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        * html/HTMLMediaElement.h:
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack):
        (WebCore::AudioTrack::setPrivate):
        (WebCore::AudioTrack::setMediaElement):
        * html/track/AudioTrack.h:
        * html/track/DataCue.cpp:
        (WebCore::DataCue::toString const):
        * html/track/DataCue.h:
        (PAL::LogArgument<WebCore::DataCue>::toString):
        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::addDataCue):
        (WebCore::InbandDataTextTrack::updateDataCue):
        (WebCore::InbandDataTextTrack::removeDataCue):
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue):
        (WebCore::InbandGenericTextTrack::removeGenericCue):
        (WebCore::InbandGenericTextTrack::newCuesParsed):
        (WebCore::InbandGenericTextTrack::fileFailedToParse):
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack):
        (WebCore::InbandTextTrack::setMediaElement):
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed):
        (WebCore::InbandWebVTTTextTrack::fileFailedToParse):
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::cueLoadingCompleted):
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::addCue):
        (WebCore::TextTrack::removeCue):
        (WebCore::TextTrack::setLanguage):
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::toString const):
        * html/track/TextTrackCue.h:
        (PAL::LogArgument<WebCore::TextTrackCue>::toString):
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::setFontSize):
        (WebCore::TextTrackCueGeneric::toString const):
        * html/track/TextTrackCueGeneric.h:
        (PAL::LogArgument<WebCore::TextTrackCueGeneric>::toString):
        * html/track/TrackBase.cpp:
        (WebCore::nextLogIdentifier):
        (WebCore::nullLogger):
        (WebCore::TrackBase::TrackBase):
        (WebCore::TrackBase::setMediaElement):
        (WebCore::TrackBase::logChannel const):
        (WebCore::TrackBase::~TrackBase): Deleted.
        * html/track/TrackBase.h:
        (WebCore::TrackBase::setMediaElement): Deleted.
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::setFontSize):
        (WebCore::VTTCue::toString const):
        * html/track/VTTCue.h:
        (PAL::LogArgument<WebCore::VTTCue>::toString):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::setPrivate):
        (WebCore::VideoTrack::setMediaElement):
        * html/track/VideoTrack.h:
        * platform/graphics/AudioTrackPrivate.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::setClient):
        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::toString const):
        (PAL::LogArgument<WebCore::GenericCueData>::toString):
        * platform/graphics/TrackPrivateBase.cpp: Added.
        (WebCore::TrackPrivateBase::setLogger):
        (WebCore::TrackPrivateBase::logChannel const):
        * platform/graphics/TrackPrivateBase.h:
        * platform/graphics/VideoTrackPrivate.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
        (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings):
        (WebCore::InbandTextTrackPrivateAVF::removeCompletedCues):
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues):
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples):
        (WebCore::InbandTextTrackPrivateAVF::readNativeSampleBuffer):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::createAudioUnit):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:

2017-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Harfbuzz] Material icons not rendered correctly when using the web font
        https://bugs.webkit.org/show_bug.cgi?id=176995

        Reviewed by Michael Catanzaro.

        Only a few of them are correctly rendered and some others are wrong. We only render correctly the ones that
        don't have an underscore in their name (or that start with a number like 3d_rotation). In the cases where the
        name before the underscore is also an icon, we render that icon instead, that's why some of them are wrong. This
        is happening because the underscore is causing the HarfbuffShaper to split the text in 3 runs, one for the word
        before the underscore, another one for the underscore and another for the word after the underscore. So, we
        end up trying to shape the 3 runs independently and we fail when the icon doesn't exist, or when it exists but
        it's not the one we are looking for. The cause of this is that the underscore has a different script (Common)
        than the rest of characters (Latin) which is a condition in HarfbuffShaper to create a different run. The
        unicode spec says that characters with Common script should be handled differently, but we are just ignoring
        it. The spec proposes to use an heuristic based on simply inheriting the script of the previous character, which
        should work in most of the cases. We could take a more conservative approach and do that only if both characters
        are ASCII. We should also consider handling other cases mentioned by the spec like brackets and quotation marks,
        but that belongs to a different bug/commit.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::scriptsAreCompatibleForCharacters): Helper function to check if the current and previous scripts are
        compatible,
        (WebCore::HarfBuzzShaper::collectHarfBuzzRuns): Use scriptsAreCompatibleForCharacters() to decided whether to
        finish the current run or not. In case of Common script, inherit also the script from the previous character.

2017-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Harfbuzz] Fix incorrect font rendering when selecting texts in pages which specifies text-rendering: optimizeLegibility
        https://bugs.webkit.org/show_bug.cgi?id=148220

        Reviewed by Michael Catanzaro.

        Add support for shaping a range of characters and return the advance to the first glyph in the range.

        Covered by existing tests.

        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText const): Pass "from" and "to" parameters to
        HarfBuzzShaper::shape and return the x position of the selection rect.
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::shape): Forward "from" and "to" parameters to fillGlyphBuffer().
        (WebCore::HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun): Only add glyphs for the given character range.
        (WebCore::HarfBuzzShaper::fillGlyphBuffer): Only consider runs in the given character range.
        * platform/graphics/harfbuzz/HarfBuzzShaper.h:

2017-09-15  Zan Dobersek  <zdobersek@igalia.com>

        [EME] ClearKey: list 'persistent-license' sessions as supported
        https://bugs.webkit.org/show_bug.cgi?id=176985

        Reviewed by Xabier Rodriguez-Calvar.

        The ClearKey implementation should support the 'persistent-license'
        session type for testing purposes. Methods in the CDMPrivateClearKey
        class have been updated to handle that session type as supported:
        - supportsSessionTypeWithConfiguration() returns true for the
          'persistent-license' session type values,
        - supportsConfiguration() allows persistent state as required in
          case of the configured session type being 'persistent-license',
        - supportsConfigurationWithRestrictions() as well allows persistent
        state as required for 'persistent-license' session types.

        No new tests -- affected tests have their baselines updated.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMPrivateClearKey::supportsConfiguration const):
        (WebCore::CDMPrivateClearKey::supportsConfigurationWithRestrictions const):
        (WebCore::CDMPrivateClearKey::supportsSessionTypeWithConfiguration const):

2017-09-15  Ms2ger  <Ms2ger@igalia.com>

        Disallow passing a null program to getFragDataLocation.
        https://bugs.webkit.org/show_bug.cgi?id=176895

        Reviewed by Sam Weinig.

        This matches the specification as well as Gecko and Chromium.

        Test: fast/canvas/webgl/webgl2/bindings.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getFragDataLocation):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Complex text is enabled too often after r221909
        https://bugs.webkit.org/show_bug.cgi?id=176907

        Reviewed by Sergio Villar Senin.

        In r221909 we enabled complex text by default following the same cocoa ifdefs, but I forgot another ifdef in the
        cpp file.

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

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

        Unreviewed, rolling out r221932 and r221933.
        https://bugs.webkit.org/show_bug.cgi?id=176969

        This change did not fix the webgl test flakiness. (Requested
        by ryanhaddad on #webkit).

        Reverted changesets:

        "[WebGL] accelerated texImage2D for video doesn't respect
        flipY"
        https://bugs.webkit.org/show_bug.cgi?id=176491
        http://trac.webkit.org/changeset/221932

        "[WebGL] VideoTextureCopierCV doesn't correctly restore vertex
        attribute state"
        https://bugs.webkit.org/show_bug.cgi?id=176771
        http://trac.webkit.org/changeset/221933

2017-09-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Replace the implementation with NetworkLoadMetrics
        https://bugs.webkit.org/show_bug.cgi?id=176906

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getEffectiveURL):
        (WebCore::CurlHandle::getPrimaryPort):
        (WebCore::CurlHandle::getResponseCode):
        (WebCore::CurlHandle::getContentLenghtDownload):
        (WebCore::CurlHandle::getHttpAuthAvail):
        (WebCore::CurlHandle::getTimes):
        (WebCore::CurlHandle::getEffectiveURL const): Deleted.
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::didReceiveHeader):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::dispatchSynchronousJob):
        (WebCore::ResourceHandleCurlDelegate::notifyFinish):
        (WebCore::ResourceHandleCurlDelegate::getProtectionSpace):
        (WebCore::ResourceHandleCurlDelegate::didReceiveAllHeaders):
        (WebCore::ResourceHandleCurlDelegate::handleLocalReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::didFinish):
        (WebCore::ResourceHandleCurlDelegate::getNetworkLoadMetrics):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):
        (WebCore::ResourceHandleCurlDelegate::didReceiveData):
        (WebCore::ResourceHandleCurlDelegate::setWebTimings): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.h:
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::setDeprecatedNetworkLoadMetrics):

2017-09-14  Daniel Bates  <dabates@apple.com>

        [Mac] Spelling, grammar and correction dots are painted upside down
        https://bugs.webkit.org/show_bug.cgi?id=176949
        <rdar://problem/34441098>

        Reviewed by Simon Fraser.

        Painting occurs in a vertically flipped context. Vertically flip the context ("unflip" it)
        before painting the document markers on macOS so that they are painted right-side. This makes
        the appearance of spelling, grammar and correction dots in WebKit match the AppKit appearance
        of these dots.

        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Flip the context as described above.
        Also make use of RAII object CGContextStateSaver instead of manually saving and restoring
        the state of the context.

2017-09-14  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout r222036.
        
        The LayoutTests added with this change is flaky.

        Reverted changeset
        Web Inspector: Timeline should show when events preventDefault() was called on an event or not
        https://bugs.webkit.org/show_bug.cgi?id=176824
        http://trac.webkit.org/changeset/222036

2017-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        WebContentReader::readWebArchive doesn't need to handle image MIME type
        https://bugs.webkit.org/show_bug.cgi?id=176884

        Reviewed by Sam Weinig.

        Remove the code to handle image MIME types in the web archive on macOS since we have a separate code path
        to handle images in the pasteboard directly. As far as I can tell, this code is never used in practice.

        This allows merging iOS and macOS code to read web archive from the pasteboard. Also merged member functions
        for handling RTFD and RTF in iOS and macOS in WebContentReaderCocoa.mm.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/WebContentReader.cpp: Added.
        (WebCore::WebContentReader::addFragment): Moved from WebContentReaderIOS.mm and simplified since appendChild
        knows how to add a DocumentFragment.
        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentAndAddResources):
        (WebCore::WebContentReader::readWebArchive): Merged iOS / macOS code here.
        (WebCore::WebContentReader::readRTFD): Ditto.
        (WebCore::WebContentReader::readRTF): Ditto.
        (WebCore::WebContentReader::readPlainText): Ditto.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::pasteWithPasteboard):
        * editing/ios/WebContentReaderIOS.mm:
        (WebCore::WebContentReader::readImage):
        (WebCore::WebContentReader::readURL):
        (WebCore::WebContentReader::readWebArchive): Moved to WebContentReaderCocoa.mm.
        (WebCore::WebContentReader::readRTFD): Ditto.
        (WebCore::WebContentReader::readRTF): Ditto.
        (WebCore::WebContentReader::readPlainText): Ditto.
        * editing/mac/WebContentReaderMac.mm:
        (WebCore::WebContentReader::readWebArchive): Ditto.
        (WebCore::WebContentReader::readRTFD): Ditto.
        (WebCore::WebContentReader::readRTF): Ditto.

2017-09-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: make recording swizzle async
        https://bugs.webkit.org/show_bug.cgi?id=176936

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        (WebCore::InspectorCanvas::buildAction):
        For objects that are not able to be stringified (e.g. elements), send a deduplicated string
        with the name of the object as a placeholder value (e.g. "Element").

2017-09-14  Andy Estes  <aestes@apple.com>

        [Mac] Upstream SpeechSynthesis-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176931

        Reviewed by Joseph Pecoraro.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::speechSynthesisGetVoiceIdentifiers):
        (WebCore::speechSynthesisGetDefaultVoiceIdentifierForLocale):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2017-09-14  Youenn Fablet  <youenn@apple.com>

        RTCDataChannel connectivity issues in Safari 11
        https://bugs.webkit.org/show_bug.cgi?id=173052
        <rdar://problem/32712143>

        Reviewed by Alex Christensen.

        Covered by updated test.

        Before the patch, when sending an ArrayBufferView, RTCDataChannel was sending the whole ArrayBuffer backing the ArrayBufferView.
        With this patch, RTCDataChannel will now send only the bytes the ArrayBufferView is exposing.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::send): Correctly handling sending of ArrayBufferView.
        (WebCore::RTCDataChannel::sendRawData): Helper routine for raw data sending.
        * Modules/mediastream/RTCDataChannel.h:

2017-09-14  Antti Koivisto  <antti@apple.com>

        Computing animated style should not require renderers
        https://bugs.webkit.org/show_bug.cgi?id=171926
        <rdar://problem/34428035>

        Reviewed by Sam Weinig.

        CSS animation system is now element rather than renderer based. This allows cleaning up
        style resolution and render tree update code.

        This also fixes bug animation doesn't run if display property is animated from one rendered type
        to another. Added a test case for this.

        Test: transitions/transition-display-property-2.html

        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationController::updateAnimations):

            Pass in the old style instead of getting it from the renderer.
            Factor to return the animated style as a return value.

        * page/animation/CSSAnimationController.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::willBeDestroyed):

            Animation are now canceled by RenderTreeUpdater::tearDownRenderers.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasInitialAnimatedStyle const): Deleted.
        (WebCore::RenderElement::setHasInitialAnimatedStyle): Deleted.

            We no longer need to this concept.

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::RenderTreeUpdater::createRenderer):

            We now get correct animated style from style resolution in all cases so we don't need to compute
            it separately for new renderers.

        (WebCore::RenderTreeUpdater::tearDownRenderers):

            Cancel animations when render tree is fully torn down. Keep them when updating style.

        * style/RenderTreeUpdater.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

            We can now compute animated style without renderer. Special cases dealing with rendererless case
            can be removed.

2017-09-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline should show when events preventDefault() was called on an event or not
        https://bugs.webkit.org/show_bug.cgi?id=176824
        <rdar://problem/34290931>

        Reviewed by Devin Rousso.

        Test: inspector/timeline/timeline-event-EventDispatch.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):
        Include defaultPrevented when notifying inspector.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didDispatchEventImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindowImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        Pass defaultPrevented on to agent.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::didPaint):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::appendLayoutRoot):
        (WebCore::TimelineRecordFactory::appendDidDispatchEventData):
        * inspector/TimelineRecordFactory.h:
        Append a boolean defaultPrevented property on the EventDispatch timeline record's data.

2017-09-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r222015.

        The LayoutTests added with this change are flaky.

        Reverted changeset:

        "Web Inspector: Timeline should show when events
        preventDefault() was called on an event or not"
        https://bugs.webkit.org/show_bug.cgi?id=176824
        http://trac.webkit.org/changeset/222015

2017-09-14  Ms2ger  <Ms2ger@igalia.com>

        Allow passing sequences to various WebGL2 methods.
        https://bugs.webkit.org/show_bug.cgi?id=176892

        Reviewed by Sam Weinig.

        This matches the specification as well as Gecko and Chromium.

        Test: fast/canvas/webgl/webgl2/sequences.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::uniform1uiv):
        (WebCore::WebGL2RenderingContext::uniform2uiv):
        (WebCore::WebGL2RenderingContext::uniform3uiv):
        (WebCore::WebGL2RenderingContext::uniform4uiv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x3fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x3fv):
        (WebCore::WebGL2RenderingContext::vertexAttribI4iv):
        (WebCore::WebGL2RenderingContext::vertexAttribI4uiv):
        (WebCore::WebGL2RenderingContext::clearBufferiv):
        (WebCore::WebGL2RenderingContext::clearBufferuiv):
        (WebCore::WebGL2RenderingContext::clearBufferfv):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-14  Sam Weinig  <sam@webkit.org>

        [Cleanup] Cleanup uses of the FileList class
        https://bugs.webkit.org/show_bug.cgi?id=176800

        Reviewed by Alex Christensen.

        * fileapi/FileList.cpp:
        * fileapi/FileList.h:

            Store list of files as Refs, rather than RefPtrs.
            Add direct accessor to the underlying Vector for faster iteration.
            Add file(unsigned) function to allow direct indexing, rather than using
            the DOM exposed item function which always does a length check.

        * Modules/entriesapi/HTMLInputElementEntriesAPI.cpp:
        
            Remove unused RuntimeEnabledFeatures.h #include.
            Use modern for loop and the new direct file vector access. 
        
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        
            Remove unnecessary #includes, adopt auto, and use modern for-loop
            for FileList.
        
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::files const):
        (WebCore::DataTransfer::hasFileOfType):
        
            Use auto.
        
        (WebCore::DataTransfer::createForInputEvent):
        
            Use initializer list for the typeToStringMap.
        
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::ensureItems const):
        
            Use auto and modern for-loop for FileList.
        
        * html/FileInputType.cpp:
        (WebCore::FileInputType::filesFromFormControlState):
        (WebCore::FileInputType::saveFormControlState const):
        (WebCore::FileInputType::appendFormData const):
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::getTypeSpecificValue):
        (WebCore::FileInputType::disabledAttributeChanged):
        (WebCore::FileInputType::multipleAttributeChanged):
        (WebCore::FileInputType::setFiles):
        (WebCore::FileInputType::receiveDroppedFiles):
        (WebCore::FileInputType::defaultToolTip const):

            Adopt auto, brace-initialization, and modern for-loops.

        * html/FileListCreator.cpp:
        (WebCore::appendDirectoryFiles):
        (WebCore::FileListCreator::createFileList):
        
            Update to work in terms of Vector<Ref<File>>.

        * html/FormController.h:
        (WebCore::FormControlState::FormControlState):
        
            Re-format existing constructors and add one that takes an r-value
            Vector<String> to allow construction from a pre-created list (used 
            in FileInputType::saveFormControlState)
        
        * platform/DragData.h:
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::asFilenames const):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asFilenames const):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::asFilenames const):
        
            Convert asFilenames to return, rather than take, a Vector<String>.

2017-09-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Harfbuzz] Wrong offset returned by HarfBuzzShaper::offsetForPosition() when target point is at the middle of a character
        https://bugs.webkit.org/show_bug.cgi?id=176897

        Reviewed by Michael Catanzaro.

        We should include the character when the point is greater than the center of the character.

        Fixes: fast/multicol/hit-test-end-of-column-with-line-height.html
               fast/multicol/newmulticol/compare-with-old-impl/hit-test-end-of-column-with-line-height.html

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::characterIndexForXPosition):

2017-09-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add PrivateSymbolMode::{Include,Exclude} for PropertyNameArray
        https://bugs.webkit.org/show_bug.cgi?id=176867

        Reviewed by Sam Weinig.

        * bindings/js/JSDOMConvertRecord.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):

2017-09-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline should show when events preventDefault() was called on an event or not
        https://bugs.webkit.org/show_bug.cgi?id=176824
        <rdar://problem/34290931>

        Reviewed by Devin Rousso.

        Tests: inspector/timeline/timeline-event-CancelAnimationFrame.html
               inspector/timeline/timeline-event-EventDispatch.html
               inspector/timeline/timeline-event-FireAnimationFrame.html
               inspector/timeline/timeline-event-RequestAnimationFrame.html
               inspector/timeline/timeline-event-TimerFire.html
               inspector/timeline/timeline-event-TimerInstall.html
               inspector/timeline/timeline-event-TimerRemove.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):
        Include defaultPrevented when notifying inspector.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didDispatchEventImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindowImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        Pass defaultPrevented on to agent.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::didPaint):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::appendLayoutRoot):
        (WebCore::TimelineRecordFactory::appendDidDispatchEventData):
        * inspector/TimelineRecordFactory.h:
        Append a boolean defaultPrevented property on the EventDispatch timeline record's data.

2017-09-14  Maureen Daum  <mdaum@apple.com>

        Introduce the option to mark an HTML element as having AutoFill available.
        https://bugs.webkit.org/show_bug.cgi?id=176710

        Reviewed by Alex Christensen.

        Introduce the option to mark an HTML element as having AutoFill available. Accessibility
        can use this property when deciding whether to announce that the focused field offers
        AutoFill.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isValueAutofillAvailable const):
        Check if the field is explicitly marked as having AutoFill available.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isAutoFillAvailable const):
        (WebCore::HTMLInputElement::setAutoFillAvailable):

2017-09-13  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Move response related features into ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=174654

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::didReceiveAllHeaders):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):
        (WebCore::isHttpRedirect): Deleted.
        (WebCore::isHttpAuthentication): Deleted.
        (WebCore::isHttpNotModified): Deleted.
        (WebCore::isAppendableHeader): Deleted.
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeaderLine): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.h:
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::platformSuggestedFilename const): Deleted.
        * platform/network/curl/ResourceResponseCurl.cpp: Added.
        (WebCore::ResourceResponse::isAppendableHeader):
        (WebCore::ResourceResponse::appendHTTPHeaderField):
        (WebCore::ResourceResponse::setStatusLine):
        (WebCore::ResourceResponse::platformSuggestedFilename const):
        (WebCore::ResourceResponse::isRedirection const):
        (WebCore::ResourceResponse::isNotModified const):
        (WebCore::ResourceResponse::isUnauthorized const):

2017-09-13  Zalan Bujtas  <zalan@apple.com>

        Switch multicolumn's spanner map from raw over to weak pointers.
        https://bugs.webkit.org/show_bug.cgi?id=176367
        <rdar://problem/34254896>

        Reviewed by Antti Koivisto.

        Test: fast/multicol/spanner-crash-when-adding-summary.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::evacuateAndDestroy):
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        (WebCore::RenderMultiColumnFlowThread::handleSpannerRemoval):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::firstRendererInFlowThread const):
        (WebCore::RenderMultiColumnSet::lastRendererInFlowThread const):
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:

2017-09-13  John Wilander  <wilander@apple.com>

        Introduce Storage Access API (document parts) as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=175759
        <rdar://problem/34414107>

        Reviewed by Alex Christensen.

        Storage Access API is an experimental feature which allows cross-origin,
        sandboxed iframes to request access to their first-party storage (as
        opposed to partitioned storage). This might be restricted to cookies or
        might cover all stateful mechanisms.

        It introduces the following three developer-facing things:
        - A new readonly attribute, document.hasStorageAccess.
        - A new function, document.requestStorageAccess().
        - A new iframe sandbox token, allow-storage-access-by-user-activation.

        Tests: http/tests/storageAccess/request-and-deny-storage-access-cross-origin-iframe.html
               http/tests/storageAccess/request-and-deny-storage-access-cross-origin-sandboxed-iframe.html
               http/tests/storageAccess/request-and-grant-storage-access-cross-origin-iframe.html
               http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe.html
               http/tests/storageAccess/request-storage-access-cross-origin-sandboxed-iframe-with-unique-origin.html
               http/tests/storageAccess/request-storage-access-cross-origin-sandboxed-iframe-without-allow-token.html
               http/tests/storageAccess/request-storage-access-same-origin-iframe.html
               http/tests/storageAccess/request-storage-access-same-origin-sandboxed-iframe-without-allow-token.html
               http/tests/storageAccess/request-storage-access-same-origin-sandboxed-iframe.html
               http/tests/storageAccess/request-storage-access-top-frame.html

        * dom/Document.cpp:
        (WebCore::Document::requestStorageAccess):
        * dom/Document.h:
        (WebCore::Document::hasStorageAccess const):
        (WebCore::Document::setUserGrantsStorageAccessOverride):
            See comments on WebCore::Internals below.
        * dom/Document.idl:
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSupportedSandboxPolicy):
        (WebCore::SecurityContext::parseSandboxPolicy):
            Support for allow-storage-access-by-user-activation.
        * dom/SecurityContext.h:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::registerStorageAccess):
            Newly granted storage access is reported to 
            WebCore::ResourceLoadObserver.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::encodeHashSet):
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::decodeHashSet):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::appendHashSet):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::mergeHashSet):
        (WebCore::ResourceLoadStatistics::merge):
            Storage of the new type of data.
        * loader/ResourceLoadStatistics.h:
        * page/Settings.in:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setUserGrantsStorageAccess):
        * testing/Internals.h:
        * testing/Internals.idl:
            Added setUserGrantsStorageAccess(). It is used to
            override the eventSender's keyboard input which
            always results in a cancel action on the confirm()
            dialog.

2017-09-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        Submitting a form can cause HTMLFormElement's associated elements vector to be mutated during iteration
        https://bugs.webkit.org/show_bug.cgi?id=176368
        <rdar://problem/34254998>

        Reviewed by Ryosuke Niwa.

        In the process of iterating over form.associatedElements() during form submission in FormSubmission::create, the
        page may cause us to clobber the vector of FormAssociatedElements* we're currently iterating over by inserting
        new form controls beneath the form element we're in the process of submitting. This happens because
        FormSubmission::create calls HTMLTextAreaElement::appendFormData, which requires layout to be up to date, which
        in turn makes us updateLayout() and set focus, which fires a `change` event, upon which the page's JavaScript
        inserts additonal DOM nodes into the form, modifying the vector of associated elements.

        To mitigate this, instead of iterating over HTMLFormElement::associatedElements(), which returns a reference to
        the HTMLFormElement's actual m_associatedElements vector, we iterate over a new vector of
        Ref<FormAssociatedElement>s created from m_associatedElements.

        This patch also removes an event dispatch assertion added in r212026. This assertion was added to catch any
        other events dispatched in this scope, since dispatching events there would have had security implications, but
        after making iteration over associated elements robust, this NoEventDispatchAssertion is no longer useful.

        Test: fast/forms/append-children-during-form-submission.html

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2017-09-13  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Event Listeners section does not update when listeners are added/removed
        https://bugs.webkit.org/show_bug.cgi?id=170570
        <rdar://problem/31501645>

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/event-listener-add-remove.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::setAttributeEventListener):
        Fire willRemoveEventListener/didAddEventListener events when an attribute event listener is
        replaced by another event listener.

        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didAddEventListener):
        (WebCore::InspectorDOMAgent::willRemoveEventListener):
        Dispatch an event to the inspector frontend whenever an event listener is added/removed.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didAddEventListenerImpl):
        (WebCore::InspectorInstrumentation::willRemoveEventListenerImpl):
        Tie into existing instrumentation points for adding/removing event listeners.

2017-09-13  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Bug fix for synchronous transfer
        https://bugs.webkit.org/show_bug.cgi?id=176552

        Reviewed by Alex Christensen.

        ResourceHandleInternal::m_delegate is null when transfer is synchronous. It should be set ResourceHandleCurlDelegate.
        Also the callback functions called when transfer is completed is wrong.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::dispatchSynchronousJob):
        (WebCore::ResourceHandleCurlDelegate::notifyFinish):
        (WebCore::ResourceHandleCurlDelegate::notifyFail):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):
        (WebCore::ResourceHandleCurlDelegate::didReceiveData):
        (WebCore::ResourceHandleCurlDelegate::willSendData):

2017-09-13  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221976.

        The test introduced was flaky from point of addition.

        Reverted changeset:

        "Introduce Storage Access API (document parts) as an
        experimental feature"
        https://bugs.webkit.org/show_bug.cgi?id=175759
        http://trac.webkit.org/changeset/221976

2017-09-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Followup (r221805): Address comments and add more tests
        https://bugs.webkit.org/show_bug.cgi?id=176732

        Reviewed by Darin Adler.

        Test: http/tests/images/decode-slow-load-static-image.html

        Code clean up and adding a new test to ensure multiple decode() promises
        can be resolved or rejected simultaneously without any issues.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::decode):
        (WebCore::ImageLoader::decodeError):
        * loader/ImageLoader.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::decode):
        (WebCore::BitmapImage::callDecodingCallbacks):
        * platform/graphics/BitmapImage.h:

2017-09-13  Youenn Fablet  <youenn@apple.com>

        Internals clearCacheStorageMemoryRepresentation should return a Promise
        https://bugs.webkit.org/show_bug.cgi?id=176818

        Reviewed by Alex Christensen.

        No observable change of behavior.

        * Modules/cache/DOMCacheEngine.h:
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation): Returning a promise when clearing is completed.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-09-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Frontend should be made to expect and handle disabled properties
        https://bugs.webkit.org/show_bug.cgi?id=166787
        <rdar://problem/34379593>

        Reviewed by Joseph Pecoraro.

        Include disabled (commented out) CSS properties in the payload.

        Tests: inspector/css/css-property.html
               inspector/css/matched-style-properties.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateAllProperties const):
        (WebCore::InspectorStyle::styleWithProperties const):

2017-09-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Fails to build because 'Float32Array' has not been declared in AudioContext.h
        https://bugs.webkit.org/show_bug.cgi?id=176870

        Reviewed by Konstantin Tokarev.

        Add missing include of Float32Array.h

        No new tests, its a build fix.

        * Modules/webaudio/AudioContext.h:

2017-09-13  Andy Estes  <aestes@apple.com>

        [CF] Upstream CFNetwork-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176729

        Reviewed by Alex Christensen.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::isPublicSuffix):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::setCONNECTProxyForStream):
        (WebCore::SocketStreamHandleImpl::createStreams):
        (WebCore::setCONNECTProxyAuthorizationForStream):
        (WebCore::SocketStreamHandleImpl::addCONNECTCredentials):
        (WebCore::copyCONNECTProxyResponse):
        (WebCore::SocketStreamHandleImpl::readStreamCallback):
        (WebCore::SocketStreamHandleImpl::writeStreamCallback):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2017-09-13  Antti Koivisto  <antti@apple.com>

        Make more of the CSS animation system internals element based
        https://bugs.webkit.org/show_bug.cgi?id=176832

        Reviewed by Zalan Bujtas.

        CSS animations animate element style. Continue moving away from renderers in the animation code.

        Also do some general modernization.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        * page/animation/AnimationBase.h:
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::ensureCompositeAnimation):
        (WebCore::CSSAnimationControllerPrivate::clear):
        (WebCore::CSSAnimationControllerPrivate::updateAnimations):
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimerForElement):
        (WebCore::CSSAnimationControllerPrivate::isRunningAnimationOnRenderer const):
        (WebCore::CSSAnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer const):
        (WebCore::CSSAnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::CSSAnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::CSSAnimationControllerPrivate::animatedStyleForElement):
        (WebCore::CSSAnimationControllerPrivate::computeExtentOfAnimation const):
        (WebCore::CSSAnimationController::cancelAnimations):
        (WebCore::CSSAnimationController::updateAnimations):
        (WebCore::CSSAnimationController::animatedStyleForRenderer):
        (WebCore::CSSAnimationController::computeExtentOfAnimation const):
        (WebCore::CSSAnimationController::pauseAnimationAtTime):
        (WebCore::CSSAnimationController::pauseTransitionAtTime):
        (WebCore::CSSAnimationControllerPrivate::updateAnimationTimerForRenderer): Deleted.
        (WebCore::CSSAnimationControllerPrivate::getAnimatedStyleForRenderer): Deleted.
        (WebCore::CSSAnimationController::getAnimatedStyleForRenderer): Deleted.
        * page/animation/CSSAnimationController.h:
        * page/animation/CSSAnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::~CompositeAnimation):
        (WebCore::CompositeAnimation::clearElement):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::clearRenderer): Deleted.
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::animate):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::create):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::animate):
        * page/animation/KeyframeAnimation.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform const):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createRenderer):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        * testing/Internals.cpp:
        (WebCore::Internals::pauseAnimationAtTimeOnElement):
        (WebCore::Internals::pauseAnimationAtTimeOnPseudoElement):
        (WebCore::Internals::pauseTransitionAtTimeOnElement):
        (WebCore::Internals::pauseTransitionAtTimeOnPseudoElement):

2017-09-13  Daniel Bates  <dabates@apple.com>

        Make history.pushState()/replaceState() more closely aligned to the HTML standard
        https://bugs.webkit.org/show_bug.cgi?id=176730
        <rdar://problem/33839265>

        Reviewed by Alex Christensen.

        Update history.pushState()/replaceState() to more closely align with the algorithm
        specified in <https://html.spec.whatwg.org/multipage/history.html#dom-history-pushstate-2> (9 September 2017).

        Test: http/tests/security/history-pushState-replaceState-from-sandboxed-iframe.html

        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::extractInnerURL): Use URL constructor that takes a base URL as opposed
        to using the special ParsedURLString-variant because the latter can only be used to parse a string
        returned from URL::string(). And the extracted inner URL does not meet this criterion. Using the
        ParsedURLString-variant of the URL constructor with a string that is not the result of URL::string()
        will cause an assertion failure in a debug build.

2017-09-13  John Wilander  <wilander@apple.com>

        Introduce Storage Access API (document parts) as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=175759
        <rdar://problem/33666847>

        Reviewed by Alex Christensen.

        Storage Access API is an experimental feature which allows cross-origin,
        sandboxed iframes to request access to their first-party storage (as
        opposed to partitioned storage). This might be restricted to cookies or
        might cover all stateful mechanisms.

        It introduces the following three developer-facing things:
        - A new readonly attribute, document.hasStorageAccess.
        - A new function, document.requestStorageAccess().
        - A new iframe sandbox token, allow-storage-access-by-user-activation.

        Tests: http/tests/loading/resourceLoadStatistics/request-and-deny-storage-access-cross-origin-iframe.html
               http/tests/loading/resourceLoadStatistics/request-and-deny-storage-access-cross-origin-sandboxed-iframe.html
               http/tests/loading/resourceLoadStatistics/request-and-grant-storage-access-cross-origin-iframe.html
               http/tests/loading/resourceLoadStatistics/request-and-grant-storage-access-cross-origin-sandboxed-iframe.html
               http/tests/loading/resourceLoadStatistics/request-storage-access-cross-origin-sandboxed-iframe-with-unique-origin.html
               http/tests/loading/resourceLoadStatistics/request-storage-access-cross-origin-sandboxed-iframe-without-allow-token.html
               http/tests/loading/resourceLoadStatistics/request-storage-access-same-origin-iframe.html
               http/tests/loading/resourceLoadStatistics/request-storage-access-same-origin-sandboxed-iframe-without-allow-token.html
               http/tests/loading/resourceLoadStatistics/request-storage-access-same-origin-sandboxed-iframe.html
               http/tests/loading/resourceLoadStatistics/request-storage-access-top-frame.html

        * dom/Document.cpp:
        (WebCore::Document::requestStorageAccess):
        * dom/Document.h:
        (WebCore::Document::hasStorageAccess const):
        (WebCore::Document::setUserGrantsStorageAccessOverride):
            See comments on WebCore::Internals below.
        * dom/Document.idl:
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSupportedSandboxPolicy):
        (WebCore::SecurityContext::parseSandboxPolicy):
            Support for allow-storage-access-by-user-activation.
        * dom/SecurityContext.h:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::registerStorageAccess):
            Newly granted storage access is reported to 
            WebCore::ResourceLoadObserver.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::encodeHashSet):
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::decodeHashSet):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::appendHashSet):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::mergeHashSet):
        (WebCore::ResourceLoadStatistics::merge):
            Storage of the new type of data.
        * loader/ResourceLoadStatistics.h:
        * page/Settings.in:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setUserGrantsStorageAccess):
        * testing/Internals.h:
        * testing/Internals.idl:
            Added setUserGrantsStorageAccess(). It is used to
            override the eventSender's keyboard input which
            always results in a cancel action on the confirm()
            dialog.

2017-09-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [HarfBuzz] Wrong offset returned by HarfBuzzShaper::offsetForPosition in some cases
        https://bugs.webkit.org/show_bug.cgi?id=176848

        Reviewed by Michael Catanzaro.

        This patch rewrites HarfBuzzShaper::HarfBuzzRun::characterIndexForXPosition() to make it simpler and ensure we
        return the right offset in all the cases, also honoring now the includePartialGlyphs parameter that we were
        ignoring in FontCascade::offsetForPositionForComplexText().

        Fixes several tests that started to fail after r221909.

        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::offsetForPositionForComplexText const):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::characterIndexForXPosition):
        (WebCore::HarfBuzzShaper::offsetForPosition):
        * platform/graphics/harfbuzz/HarfBuzzShaper.h:

2017-09-13  Per Arne Vollan  <pvollan@apple.com>

        Initialize InternalSettings member variable.
        https://bugs.webkit.org/show_bug.cgi?id=176838

        Reviewed by Brent Fulgham.

        Initialize the m_webVREnabled member in the constructor.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):

2017-09-13  Ms2ger  <Ms2ger@igalia.com>

        Make WebGLRenderingContextBase::TypedList::data() const-correct.
        https://bugs.webkit.org/show_bug.cgi?id=176833

        Reviewed by Sam Weinig.

        No change of behavior.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateUniformMatrixParameters):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::TypedList::data const):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):

2017-09-13  Sam Weinig  <sam@webkit.org>

        Remove CanvasRenderingContext2D.commit(), it is a no-op and not part the standard
        https://bugs.webkit.org/show_bug.cgi?id=176821

        Reviewed by Darin Adler.

        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:
        
            Remove the commit operation. It is no longer part the standard (it was
            moved to OffscreenCanvasRenderingContext2D) and it was a no-op.

2017-09-12  Matt Rajca  <mrajca@apple.com>

        Ensure the user interacted with the page before setting m_userHasInteractedWithMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=176816

        Reviewed by Eric Carlson.

        Currently, when the user presses a keyboard shortcut in the client to reload a page, that may
        get registered as a user gesture on the reloaded page. Before setting the
        m_userHasInteractedWithMediaElement flag, we should check if a user gesture was actually handled
        by checking the userDidInteractWithPage flag. In case of key events that aren't handled by the
        page, this will be set to false by EventHandler:

            // If the key event was not handled, do not treat it as user interaction with the page.
            if (topDocument && !wasHandled)
                topDocument->setUserDidInteractWithPage(savedUserDidInteractWithPage);

        We need to revisit this in the future in webkit.org/b/176817 and ensure user gesture tokens
        don't carry over across reloads of the page.

        Tests: I wasn't able to trigger the pathological scenario this aims to fix with a test that calls
        window.location.reload() from a synthetic keyDown event.

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

2017-09-13  Ms2ger  <Ms2ger@igalia.com>

        Disallow passing null values to various WebGL2 methods.
        https://bugs.webkit.org/show_bug.cgi?id=176829

        Reviewed by Yusuke Suzuki.

        This matches the specification as well as Gecko and Chromium.

        Test: fast/canvas/webgl/webgl2/bindings.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::beginQuery):
        (WebCore::WebGL2RenderingContext::getQueryParameter):
        (WebCore::WebGL2RenderingContext::samplerParameteri):
        (WebCore::WebGL2RenderingContext::samplerParameterf):
        (WebCore::WebGL2RenderingContext::getSamplerParameter):
        (WebCore::WebGL2RenderingContext::clientWaitSync):
        (WebCore::WebGL2RenderingContext::waitSync):
        (WebCore::WebGL2RenderingContext::getSyncParameter):
        (WebCore::WebGL2RenderingContext::transformFeedbackVaryings):
        (WebCore::WebGL2RenderingContext::getTransformFeedbackVarying):
        (WebCore::WebGL2RenderingContext::getUniformIndices):
        (WebCore::WebGL2RenderingContext::getUniformBlockIndex):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockParameter):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockName):
        (WebCore::WebGL2RenderingContext::uniformBlockBinding):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-13  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Add IDLs and stubs
        https://bugs.webkit.org/show_bug.cgi?id=174202

        Reviewed by Dean Jackson.

        Adding the complete set of IDLs for the WebVR 1.1 spec including the interface stubs which
        currently do nothing.

        Tests: webvr/webvr-disabled.html
               webvr/webvr-enabled.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webvr/DOMWindowWebVR.idl: Added.
        * Modules/webvr/GamepadWebVR.cpp: Added.
        (WebCore::GamepadWebVR::GamepadWebVR):
        (WebCore::GamepadWebVR::~GamepadWebVR):
        (WebCore::GamepadWebVR::displayId):
        * Modules/webvr/GamepadWebVR.h: Added.
        * Modules/webvr/GamepadWebVR.idl: Added.
        * Modules/webvr/NavigatorWebVR.cpp: Added.
        (WebCore::NavigatorWebVR::getVRDisplays):
        (WebCore::NavigatorWebVR::activeVRDisplays):
        (WebCore::NavigatorWebVR::vrEnabled):
        * Modules/webvr/NavigatorWebVR.h: Added.
        * Modules/webvr/NavigatorWebVR.idl: Added.
        * Modules/webvr/VRDisplay.cpp: Added.
        (WebCore::VRDisplay::create):
        (WebCore::VRDisplay::VRDisplay):
        (WebCore::VRDisplay::isConnected const):
        (WebCore::VRDisplay::isPresenting const):
        (WebCore::VRDisplay::capabilities const):
        (WebCore::VRDisplay::stageParameters const):
        (WebCore::VRDisplay::getEyeParameters const):
        (WebCore::VRDisplay::displayId const):
        (WebCore::VRDisplay::displayName const):
        (WebCore::VRDisplay::getFrameData const):
        (WebCore::VRDisplay::getPose const):
        (WebCore::VRDisplay::resetPose):
        (WebCore::VRDisplay::depthNear const):
        (WebCore::VRDisplay::setDepthNear):
        (WebCore::VRDisplay::depthFar const):
        (WebCore::VRDisplay::setDepthFar):
        (WebCore::VRDisplay::requestAnimationFrame):
        (WebCore::VRDisplay::cancelAnimationFrame):
        (WebCore::VRDisplay::requestPresent):
        (WebCore::VRDisplay::exitPresent):
        (WebCore::VRDisplay::getLayers const):
        (WebCore::VRDisplay::submitFrame):
        (WebCore::VRDisplay::hasPendingActivity const):
        (WebCore::VRDisplay::activeDOMObjectName const):
        (WebCore::VRDisplay::canSuspendForDocumentSuspension const):
        (WebCore::VRDisplay::stop):
        * Modules/webvr/VRDisplay.h: Added.
        * Modules/webvr/VRDisplay.idl: Added.
        * Modules/webvr/VRDisplayCapabilities.cpp: Added.
        (WebCore::VRDisplayCapabilities::hasPosition const):
        (WebCore::VRDisplayCapabilities::hasOrientation const):
        (WebCore::VRDisplayCapabilities::hasExternalDisplay const):
        (WebCore::VRDisplayCapabilities::canPresent const):
        (WebCore::VRDisplayCapabilities::maxLayer const):
        * Modules/webvr/VRDisplayCapabilities.h: Added.
        (WebCore::VRDisplayCapabilities::create):
        * Modules/webvr/VRDisplayCapabilities.idl: Added.
        * Modules/webvr/VRDisplayEvent.cpp: Added.
        (WebCore::VRDisplayEvent::VRDisplayEvent):
        (WebCore::VRDisplayEvent::display const):
        (WebCore::VRDisplayEvent::reason const):
        (WebCore::VRDisplayEvent::eventInterface const):
        * Modules/webvr/VRDisplayEvent.h: Added.
        * Modules/webvr/VRDisplayEvent.idl: Added.
        * Modules/webvr/VRDisplayEventReason.h: Added.
        * Modules/webvr/VRDisplayEventReason.idl: Added.
        * Modules/webvr/VREye.h: Added.
        * Modules/webvr/VREye.idl: Added.
        * Modules/webvr/VREyeParameters.cpp: Added.
        (WebCore::VREyeParameters::VREyeParameters):
        (WebCore::VREyeParameters::offset const):
        (WebCore::VREyeParameters::fieldOfView const):
        (WebCore::VREyeParameters::renderWidth const):
        (WebCore::VREyeParameters::renderHeight const):
        * Modules/webvr/VREyeParameters.h: Added.
        (WebCore::VREyeParameters::create):
        * Modules/webvr/VREyeParameters.idl: Added.
        * Modules/webvr/VRFieldOfView.cpp: Added.
        (WebCore::VRFieldOfView::upDegrees const):
        (WebCore::VRFieldOfView::rightDegrees const):
        (WebCore::VRFieldOfView::downDegrees const):
        (WebCore::VRFieldOfView::leftDegrees const):
        * Modules/webvr/VRFieldOfView.h: Added.
        (WebCore::VRFieldOfView::create):
        * Modules/webvr/VRFieldOfView.idl: Added.
        * Modules/webvr/VRFrameData.cpp: Added.
        (WebCore::VRFrameData::VRFrameData):
        (WebCore::VRFrameData::timestamp const):
        (WebCore::VRFrameData::leftProjectionMatrix const):
        (WebCore::VRFrameData::leftViewMatrix const):
        (WebCore::VRFrameData::rightProjectionMatrix const):
        (WebCore::VRFrameData::rightViewMatrix const):
        (WebCore::VRFrameData::pose const):
        * Modules/webvr/VRFrameData.h: Added.
        (WebCore::VRFrameData::create):
        * Modules/webvr/VRFrameData.idl: Added.
        * Modules/webvr/VRLayerInit.h: Added.
        * Modules/webvr/VRLayerInit.idl: Added.
        * Modules/webvr/VRPose.cpp: Added.
        (WebCore::VRPose::position const):
        (WebCore::VRPose::linearVelocity const):
        (WebCore::VRPose::linearAcceleration const):
        (WebCore::VRPose::orientation const):
        (WebCore::VRPose::angularVelocity const):
        (WebCore::VRPose::angularAcceleration const):
        * Modules/webvr/VRPose.h: Added.
        (WebCore::VRPose::create):
        * Modules/webvr/VRPose.idl: Added.
        * Modules/webvr/VRStageParameters.cpp: Added.
        (WebCore::VRStageParameters::sittingToStandingTransform const):
        (WebCore::VRStageParameters::sizeX const):
        (WebCore::VRStageParameters::sizeZ const):
        * Modules/webvr/VRStageParameters.h: Added.
        (WebCore::VRStageParameters::create):
        * Modules/webvr/VRStageParameters.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * features.json:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebVREnabled):
        (WebCore::RuntimeEnabledFeatures::webVREnabled const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setWebVREnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2017-09-13  Ms2ger  <Ms2ger@igalia.com>

        Update the type of the texture argument to framebufferTextureLayer().
        https://bugs.webkit.org/show_bug.cgi?id=176785

        Reviewed by Yusuke Suzuki.

        This matches the specification as well as Gecko and Chromium.

        Also move getInternalformatParameter() to the position it has in the
        specification, for easier comparison.

        Test: fast/canvas/webgl/webgl2/bindings.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::framebufferTextureLayer):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:

2017-09-13  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement CDMInstanceClearKey::updateLicense()
        https://bugs.webkit.org/show_bug.cgi?id=176791

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the updateLicense() method for CDMInstanceClearKey.
        The response data is parsed as JSON, matching that agains either
        'license' or 'license release acknowledgement' formats (depending
        on either 'keys' or 'kids' object keys being present). If any
        format is recognized, appropriate steps are taken.

        In case of the 'license' format, the passed-in keys are matched
        against existing ones. If some keys have changed or have been
        newly introduced, the key information is sorted by key ID size
        and data to enforce order. After that the KeyStatusVector object
        is constructed, containing key ID and status information for all
        the keys associated with this session. Finally callback is
        dispatched, signalling a successful operation and passing the
        KeyStatusVector, if any, back to the caller.

        In case of the 'license release acknowledgement' format, the
        session data for this session ID is removed from the ClearKey state
        singleton. The callback is dispatched signalling the session closure
        and successfull completion of the operation.

        Finally, if no format is deduced, the callback is again dispatched,
        but now signalling an operation failure.

        No new tests -- expectations for the relevant tests are updated
        to reflect the introduced changes.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::ClearKeyState::keys):
        (WebCore::ClearKeyState::singleton):
        (WebCore::parseLicenseFormat):
        (WebCore::parseLicenseReleaseAcknowledgementFormat):
        (WebCore::CDMInstanceClearKey::updateLicense):

2017-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Refactor WebContentReader out of EditorMac and EditorIOS
        https://bugs.webkit.org/show_bug.cgi?id=176770

        Reviewed by Sam Weinig.

        Extracted WebContentReader.h, WebContentReaderMac.mm, and WebContentIOS.mm from Pasteboard.h,
        EditorMac.mm, and EditorIOS.mm respectively.

        Also moved createFragmentAndAddResources from EditorCocoa.mm to WebContentReaderCocoa.mm
        and createFragmentForImageAndURL and createFragmentForImageResourceAndAddResource to markup.cpp.

        * Configurations/WebCore.xcconfig:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::createFragmentForImageAndURL): Deleted.
        * editing/Editor.h:
        * editing/WebContentReader.h: Added.
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::replaceSelectionWithAttributedString):
        (WebCore::Editor::createFragment): Deleted.
        (WebCore::Editor::createFragmentForImageResourceAndAddResource): Deleted.
        (WebCore::Editor::createFragmentAndAddResources): Deleted.
        * editing/cocoa/WebContentReaderCocoa.mm: Added.
        (WebCore::createFragmentForImageResourceAndAddResource):
        (WebCore::createFragment):
        (WebCore::createFragmentAndAddResources):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader): Moved to WebContentReaderIOS.mm.
        * editing/ios/WebContentReaderIOS.mm: Added.
        (WebCore::WebContentReader::addFragment):
        (WebCore::WebContentReader::readWebArchive):
        (WebCore::WebContentReader::readFilenames):
        (WebCore::WebContentReader::readHTML):
        (WebCore::WebContentReader::readRTFD):
        (WebCore::WebContentReader::readRTF):
        (WebCore::WebContentReader::readImage):
        (WebCore::WebContentReader::readURL):
        (WebCore::WebContentReader::readPlainText):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader): Moved to WebContentReaderMac.mm.
        * editing/mac/WebContentReaderMac.mm: Added.
        (WebCore::WebContentReader::readWebArchive):
        (WebCore::WebContentReader::readFilenames):
        (WebCore::WebContentReader::readHTML):
        (WebCore::WebContentReader::readRTFD):
        (WebCore::WebContentReader::readRTF):
        (WebCore::WebContentReader::readImage):
        (WebCore::WebContentReader::readURL):
        (WebCore::WebContentReader::readPlainText):
        * editing/markup.cpp:
        (WebCore::createFragmentForImageAndURL):
        (WebCore::createFragmentForImageResourceAndAddResource):
        * editing/markup.h:

2017-09-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DFG] Optimize WeakMap::get by adding intrinsic and fixup
        https://bugs.webkit.org/show_bug.cgi?id=176010

        Reviewed by Filip Pizlo.

        * platform/network/curl/CurlJobManager.cpp:
        (WebCore::CurlJobList::finishJobs):

2017-09-12  Frederic Wang  <fwang@igalia.com>

        Rename isRootLayer to isRenderViewLayer
        https://bugs.webkit.org/show_bug.cgi?id=176684

        Reviewed by Darin Adler.

        This patch was generated with the help of do-webcore-rename with some coding style adjustment.

        No new tests, behavior unchanged.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::enclosingTransformedAncestor const):
        (WebCore::RenderLayer::enclosingFilterRepaintLayer const):
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::clippingRootForPainting const):
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::shouldSuppressPaintingLayer):
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        (WebCore::RenderLayerBacking::paintsIntoWindow const):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::needsCompositingUpdateForStyleChangeOnNonCompositedLayer const):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::repaintInCompositedAncestor):
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::needsToBeComposited const):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const): Also move the IOS condition
        up to avoid that check-webkit-style complains.
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::useCoordinatedScrollingForLayer const):
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer const):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2017-09-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Support DataTransfer.getData and DataTransfer.setData when dragging or dropping
        https://bugs.webkit.org/show_bug.cgi?id=176672
        <rdar://problem/34353723>

        Reviewed by Ryosuke Niwa.

        Makes several tweaks to support DataTransfer.getData and DataTransfer.setData when dragging and dropping on iOS.
        See per-method changes below for more details. This patch also renames some old variable and property names
        along the way, so they no longer reference "data interaction", and instead refer to the feature by its post-WWDC
        name.

        New test: DataInteractionTests.ExternalSourceInlineTextToFileInput
        Modified: DataInteractionTests.CanStartDragOnDivWithDraggableAttribute
                  DataInteractionTests.SinglePlainTextURLTypeIdentifiers
                  DataInteractionTests.SinglePlainTextWordTypeIdentifiers

        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):

        In cocoaTypeFromHTMLClipboardType, map the "text/plain" MIME type to the "public.plain-text" UTI. Previously,
        this corresponded to "public.text", which is incorrect, since "public.text" also includes non-plain-text types
        such as "public.html", thereby confusing NSItemProviders. Importantly, this makes it so that plain text strings
        written via DataTransfer.setData() can actually be read back as a cocoa value, since "public.plain-text" is one
        of the UTIs in +[NSString readableTypeIdentifiersForItemProvider].

        (WebCore::Pasteboard::writeString):

        Instead of writing { type : data } to the pasteboard, write { cocoaType : data }. It appears that this was
        changed unintentionally in r156588 when upstreaming the iOS pasteboard implementation. This is made apparent by
        how Pasteboard::readString() requests the cocoa UTI from the platform pasteboard, but Pasteboard::writeString()
        sends the MIME type.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::filenamesForDataInteraction):
        (WebCore::PlatformPasteboard::write):

        When writing plain text or a URL, specify that the item wants inline style representation. This prevents odd and
        unexpected behaviors (for instance, being able to drag plain text into the Files app as a file), but it also
        makes getData() not bail and return the null string on drop, due to forFileDrag() being true in
        DataTransfer::getData().

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList init]):
        (uiPreferredPresentationStyle):
        (-[WebItemProviderRegistrationInfoList itemProvider]):

        Set the preferred presentation style when generating an item provider from a registration list.

        (+[WebItemProviderLoadResult emptyLoadResult]):
        (+[WebItemProviderLoadResult loadResultWithFileURLMap:presentationStyle:]):
        (-[WebItemProviderLoadResult initWithFileURLMap:presentationStyle:]):
        (-[WebItemProviderLoadResult fileURLForType:]):
        (-[WebItemProviderLoadResult loadedFileURLs]):
        (-[WebItemProviderLoadResult loadedTypeIdentifiers]):

        Introduce WebItemProviderLoadResult, an object that encapsulates information needed to represent the contents of
        an NSItemProvider dropped in web content. Previously, WebItemProviderPasteboard maintained an array of
        dictionaries of UTI => file URL, where each dictionary represents where the dropped data for a given item
        provider lives. Now that we additionally need to remember (for each item provider) whether we should consider
        its data as a file upload, it's more helpful to have a separate object representing the "load results" of a
        dropped item provider.

        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard pasteboardTypes]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard _preLoadedDataConformingToType:forItemProviderAtIndex:]):
        (-[WebItemProviderPasteboard droppedFileURLs]):

        Respect item provider load results that should not be exposed as a file to the page.

        (-[WebItemProviderPasteboard numberOfFiles]):

        Respect item providers with UIPreferredPresentationStyleInline by not counting them towards the number of files.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):

        Adjust for the transition from an array of dictionaries representing loaded item providers to an array of
        WebItemProviderLoadResults.

        (-[WebItemProviderPasteboard fileURLsForDataInteraction]): Deleted.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsFiles const):

        DragData::containsFiles previously only considered whether or not particular UTIs appear in the pasteboard. In
        the case of Mac, this is NSFilesPromisePboardType and NSFilenamesPboardType, but in the case of iOS, this is a
        much broader category (anything conforming to "public.content"), since files are not exposed explicitly as
        "promise" or "file" types in the list of registered UTIs. This caused us to always bail in
        DataTransfer.getData() on drop on iOS, since we will always believe there's a file on the pasteboard if there's
        anything conforming to "public.content" at all.

        To fix this and simplify the code at the same time, we simply replace the currently implementation of
        DragData::containsFiles to return true iff the number of files is nonzero. On Mac, DragData::numberOfFiles
        checks the same UTIs as DragData::containsFiles (NSFilesPromisePboardType and NSFilenamesPboardType), but
        additionally counts the number of file URLs corresponding to those UTIs.

        On iOS, the implementation of numberOfFiles is new to iOS 11, and relevant only in the drag and drop flow.
        Previously, we would consider an item provider to "contain" a file if it had a UTI conforming to one of the UTIs
        acceptable for drag and drop (at the time of writing, these are ["public.content", "public.zip",
        "public.folder"]). With this patch, anything conforming to these UTIs will continue to be represented as files,
        but importantly, if an item provider indicates that it should be represented inline (i.e. a plain text
        selection), then we don't consider that item provider as vending a file. This allows us to distinguish between
        cases where we are dragging a plain text selection over a file input, and when we are dragging a plain text file.
        In both cases, "public.plain-text" is offered as a registered UTI, but in the former, the item provider should
        indicate that inline presentation style is preferred. Refer to <rdar://problem/32202542> for more details.

2017-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        QualifiedName::init should assume AtomicStrings::init was already called
        https://bugs.webkit.org/show_bug.cgi?id=176639

        Reviewed by Sam Weinig.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init):
        All callers of QualifiedName::init precede it with their own call to
        AtomicString::init, so QualifiedName doesn't need to do it.

2017-09-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Unskip fast/text/system-font-synthetic-italic.html
        https://bugs.webkit.org/show_bug.cgi?id=175944
        <rdar://problem/32864306>

        Reviewed by Jon Lee.

        Our buildbots now all have this symbol.

        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):

2017-09-12  Myles C. Maxfield  <mmaxfield@apple.com>

        ASSERTION FAILED: !m_valueOrException under FontFaceSet::completedLoading loading a Serious Eats page
        https://bugs.webkit.org/show_bug.cgi?id=175899

        Reviewed by Tim Horton.

        Slight style update to r221835. Also adds a test.

        Test: fast/text/document-fonts-while-loading-crash.html

        * css/CSSFontFaceSet.h:
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::FontFaceSet):

2017-09-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Inline ParserUtilities.h
        https://bugs.webkit.org/show_bug.cgi?id=176572

        Reviewed by Darin Adler.

        Its contents are only ever used from SVG files which also include SVGParserUtilities.h.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/ParserUtilities.h: Removed.
        * svg/SVGParserUtilities.h:
        (WebCore::skipString):

2017-09-12  Ryosuke Niwa  <rniwa@webkit.org>

        Dragging & dropping a file creates an attachment element even when it's disabled
        https://bugs.webkit.org/show_bug.cgi?id=176769

        Reviewed by Tim Horton.

        The bug that dropping a file always created an attachment element even when it's disabled by settings
        was caused by WebContentReader::readFilenames always creating an attachment element. Fixed this by
        checking the runtime flag. The fix is tested by drag-files-to-editable-element-as-URLs.html

        To fix the bug that HTMLAttachmentElement is always exposed on the global object even when it's disabled
        by settings, replaced the setting to enable attachment element by an equivalent runtime enabled flag,
        and hid both the interface as well as the element behind it. Fixed various bugs in our code generator
        to make this work.

        Tests: editing/pasteboard/drag-files-to-editable-element-as-URLs.html
               editing/pasteboard/drag-files-to-editable-element-as-attachment.html

        * bindings/js/WebCoreBuiltinNames.h: Added symbols used in the generated code.
        * dom/make_event_factory.pl:
        (defaultItemFactory): Replaced "runtimeConditonal" option by "runtimeEnabled".
        (generateImplementation):
        * dom/make_names.pl:
        (defaultTagPropertyHash):
        (printConstructorInterior): Return a HTMLUnknownElement if the element is disabled by a runtime flag.
        (printTypeHelpers): Make is<HTMLAttachmentElement>(~) returns false when the feature is disabled by
        checking whether the given element is an instance of HTMLUnknownElement.
        (printWrapperFunctions): Simplified this code by matching the code for settingsConditional.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readFilenames): Fixed the bug that this code was always creating
        an attachment element even when the feature is disabled.
        * html/HTMLAttachmentElement.idl: Hide this behind a runtime flag.
        * html/HTMLTagNames.in: 
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setAttachmentElementEnabled): Added.
        (WebCore::RuntimeEnabledFeatures::attachmentElementEnabled const): Added.
        * page/Settings.in: Removed attachmentElementEnabled.

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

        Introduce a RecordData for Cache to efficiently check whether it matches a corresponding request or not
        https://bugs.webkit.org/show_bug.cgi?id=176579

        Reviewed by Alex Christensen.

        No change of behavior.

        Introducing another version of queryCacheMatch used for the NetworkProcess implementation of the Cache.
        Exporting the copy of a response body to be used also there.

        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::matchURLs):
        (WebCore::DOMCacheEngine::queryCacheMatch):
        (WebCore::DOMCacheEngine::copyResponseBody):
        * Modules/cache/DOMCacheEngine.h:

2017-09-12  Antti Koivisto  <antti@apple.com>

        AnimationBase should point to Element instead of RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=176807

        Reviewed by Andreas Kling.

        This is a step towards making animation system operate on elements and styles instead renderers.

        No functional changes.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::renderer const):
        (WebCore::AnimationBase::compositedRenderer const):
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::getElapsedTime const):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::clear):
        (WebCore::AnimationBase::renderer const): Deleted.
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::shouldSendEventForListener const):
        (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation const):
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::pauseAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        (WebCore::ImplicitAnimation::reset):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::getAnimatedStyle):
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation const):
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::shouldSendEventForListener const):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        (WebCore::KeyframeAnimation::resolveKeyframeStyles):

2017-09-12  Per Arne Vollan  <pvollan@apple.com>

        [Win] Add Modules/fetch to list of forwarding headers folders.
        https://bugs.webkit.org/show_bug.cgi?id=176747

        Reviewed by Brent Fulgham.

        * PlatformWin.cmake:

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

        [MSE] Don't increase the reported totalFrameDelay for non-displayed frames (or frames coming in while paused).
        https://bugs.webkit.org/show_bug.cgi?id=175900

        Reviewed by Eric Carlson.

        When seeking to a specific time, the decompression session necessarily needs to be fed samples from before that
        time (i.e., all samples from the previous I-frame forward). These shouldn't contribute to the "total frame
        delay" metric. Neither should samples delivered when the video is paused (like, during seeking), as a frame can't
        be "late" if time is not moving forward.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:

2017-09-12  Sam Weinig  <sam@webkit.org>

        Gtk build fix for "Finish off the FormData implementation" - https://bugs.webkit.org/show_bug.cgi?id=176659

        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        * fileapi/Blob.h:
        * fileapi/File.cpp:
        (WebCore::File::File):
        
            Replace copy constructor with a tagged constructor.

2017-09-12  Dean Jackson  <dino@apple.com>

        [WebGL] VideoTextureCopierCV doesn't correctly restore vertex attribute state
        https://bugs.webkit.org/show_bug.cgi?id=176771
        <rdar://problem/34386621>

        Reviewed by Antoine Quint.

        The OpenGL context in VideoTextureCopierCV wasn't being restored to
        the state it had before rendering a video to a texture. Specifically
        the vertex attribute values were never recorded by the state saver.

        Update the existing test of VideoTextureCopierCV so that it is
        explicitly doing something different from the WebCore code, which
        means that state will have to be correctly restored for the test
        to pass.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture): Make sure
        to record the vertex attribute state once we know the location of the position attribute.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::GC3DStateSaver):
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::~GC3DStateSaver):
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::saveVertexAttribState): Save all the
        applicable vertex attribute state information.
        * platform/graphics/cv/VideoTextureCopierCV.h: GC3DStateSaver can use a reference
        to the GC3D rather than a pointer.

2017-09-12  Dean Jackson  <dino@apple.com>

        [WebGL] accelerated texImage2D for video doesn't respect flipY
        https://bugs.webkit.org/show_bug.cgi?id=176491
        <rdar://problem/33833511>

        Reviewed by Jer Noble.

        (Take 2 - this was rolled out due to a test failure, but the following
        commit will fix that)

        Previously, if UNPACK_FLIP_Y_WEBGL was set to true, we'd either fall
        back to software or fail to upload texture data. Fix this by intercepting
        the texImage2D call, checking the orientation of the video, and running
        a small shader program to flip it if necessary.

        While there, implement UNPACK_PREMULTIPLY_ALPHA_WEBGL as well, although
        none of our media decoders support video with alpha, so unfortunately
        this will have no visible change.

        Tests: fast/canvas/webgl/texImage2D-video-flipY-false.html
               fast/canvas/webgl/texImage2D-video-flipY-true.html

        * platform/cocoa/CoreVideoSoftLink.cpp: Add link to CVOpenGL(ES)TextureGetCleanTexCoords,
        which is used to check the orientation of the source video.
        * platform/cocoa/CoreVideoSoftLink.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::copyVideoTextureToPlatformTexture): We can
        now handle flipped or premultiplied requests.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::copyVideoTextureToPlatformTexture): Ditto.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::VideoTextureCopierCV): Rename readFramebuffer to
        simply framebuffer.
        (WebCore::VideoTextureCopierCV::~VideoTextureCopierCV): Delete the program and buffer
        if they were created.
        (WebCore::VideoTextureCopierCV::initializeContextObjects): Sets up the shader program
        and the vertex buffer for drawing. Also records the location of the uniforms.
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture): Create a new
        framebuffer object, and render the video texture into that framebuffer using a
        shader that can flip the coordinates.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::GC3DStateSaver): Helper to restore
        the state of the user's GraphicsContext3D while we're intercepting calls.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::~GC3DStateSaver):
        * platform/graphics/cv/VideoTextureCopierCV.h:

        * platform/graphics/GraphicsContext3D.h: Add two new entry points, for direct shader
        compilation and attribute access. This avoids going through ANGLE.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::compileShaderDirect):
        (WebCore::GraphicsContext3D::getAttribLocationDirect):

2017-09-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Stretching auto tracks should be done as part of the track sizing algorithm
        https://bugs.webkit.org/show_bug.cgi?id=176783

        Reviewed by Sergio Villar Senin.

        CSS WG has agreed to modify the track sizing algorithm to include
        a new step: https://drafts.csswg.org/css-grid/#algo-stretch
        We used to do the stretch of the "auto" tracks at the end of
        the track sizing algorithm, however this change integrates it
        into the algorithm itself as the last step.
        See: https://github.com/w3c/csswg-drafts/issues/1150

        The patch moves the method
        RenderGrid::applyStretchAlignmentToTracksIfNeeded() to
        GridTrackSizingAlgorithm::stretchAutoTracks().
        And then modifies the grid track sizing algorithm to execute
        the new step.

        This patch uses the WPT test updated to check the new behavior.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes): Initialize
        the list of auto tracks.
        (WebCore::GridTrackSizingAlgorithm::stretchFlexibleTracks): Add
        early return if there are not flexible tracks.
        (WebCore::GridTrackSizingAlgorithm::stretchAutoTracks): Code moved from
        RenderGrid::applyStretchAlignmentToTracksIfNeeded().
        (WebCore::GridTrackSizingAlgorithm::setup): Reset list of auto tracks.
        (WebCore::GridTrackSizingAlgorithm::run): Add new step
        stretchAutoTracks().
        (WebCore::GridTrackSizingAlgorithm::reset): Reset auto tracks.
        * rendering/GridTrackSizingAlgorithm.h: Add m_autoSizedTracksIndex.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock): Avoid applying stretch here.
        (WebCore::RenderGrid::contentAlignmentNormalBehaviorGrid): Make public.
        (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded): Moved to
        GridTrackSizingAlgorithm::stretchAutoTracks().
        * rendering/RenderGrid.h:

2017-09-12  Eric Carlson  <eric.carlson@apple.com>

        Switch MediaPlayerPrivateAVFoundation to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176621
        <rdar://problem/34335311>

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::nullLogger):
        (WebCore::MediaPlayer::mediaPlayerLogger):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerLogIdentifier):
        (WebCore::MediaPlayerClient::mediaPlayerLogger):
        (WebCore::MediaPlayer::mediaPlayerLogIdentifier):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::~MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        (WebCore::MediaPlayerPrivateAVFoundation::playabilityKnown):
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay):
        (WebCore::MediaPlayerPrivateAVFoundation::play):
        (WebCore::MediaPlayerPrivateAVFoundation::pause):
        (WebCore::MediaPlayerPrivateAVFoundation::durationMediaTime const):
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance):
        (WebCore::MediaPlayerPrivateAVFoundation::setNaturalSize):
        (WebCore::MediaPlayerPrivateAVFoundation::maxMediaTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundation::minMediaTimeSeekable const):
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::timeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        (WebCore::MediaPlayerPrivateAVFoundation::invalidateCachedDuration):
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload):
        (WebCore::MediaPlayerPrivateAVFoundation::mainThreadCallback):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::processNewAndRemovedTextTracks):
        (WebCore::MediaPlayerPrivateAVFoundation::logChannel const):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::logClassName const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCache):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCacheForOrigins):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::checkPlayability):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMedia const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPlay):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setMuted):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setClosedCaptionsVisible):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getSupportedTypes):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createOpenGLVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyOpenGLVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::flushCues):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTextTrack):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldBufferData):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::boolString): Deleted.

2017-09-12  Daniel Bates  <dabates@apple.com>

        REGRESSION (r215784): The title of right-to-left pages are empty
        https://bugs.webkit.org/show_bug.cgi?id=176746
        <rdar://problem/34211419>

        Reviewed by Brent Fulgham.

        Left truncate a long right-to-left title.

        Right-to-left text represents the visual ordering of text. Internally WebKit stores
        right-to-left text identically to left-to-right text in memory. So, we can use the
        same string operation to truncate right-to-left text as we do to truncate left-to-right
        text.

        * platform/text/StringWithDirection.h:
        (WebCore::truncateFromEnd):

2017-09-12  Chris Fleizach  <cfleizach@apple.com>

        AX: On generic container elements, WebKit should distinguish between tooltip (e.g. @title) and label (e.g. @aria-label) attributes
        https://bugs.webkit.org/show_bug.cgi?id=170475
        <rdar://problem/31439222>

        Reviewed by Joanmarie Diggs.

        Test: accessibility/title-tag-on-unimportant-elements-is-help-text.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::helpText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        (WebCore::AccessibilityNodeObject::roleIgnoresTitle):
        * accessibility/AccessibilityNodeObject.h:

2017-09-12  Brent Fulgham  <bfulgham@apple.com>

        Show punycode to user if a URL mixes Armenian Seh or Vo with other scripts
        https://bugs.webkit.org/show_bug.cgi?id=176578
        <rdar://problem/33906231>

        Reviewed by Alex Christensen.

        Revise our "lookalike character" logic to include the Armenian Vo and Seh
        characters, which can be mistaken for 'n' and 'v' when displayed in
        certain fonts.

        Tested by new API tests.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isArmenianLookalikeCharacter): Added utility function.
        (WebCore::isArmenianScriptCharacter): Ditto.
        (WebCore::isLookalikeCharacter): Handle Armenian-lookalike cases.

2017-09-12  Antti Koivisto  <antti@apple.com>

        Remove RenderElement::isCSSAnimating boolean
        https://bugs.webkit.org/show_bug.cgi?id=176779

        Reviewed by Andreas Kling.

        This optimization can be replaced with a simple style test that doesn't require keeping
        two sources of truth in sync.

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

            Can't test here as style might have become non-animating and we don't clear animation when that happens.
            This is only called on renderer destruction so it is not an important optimization.

        (WebCore::CSSAnimationControllerPrivate::isRunningAnimationOnRenderer const):
        (WebCore::CSSAnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer const):
        (WebCore::CSSAnimationControllerPrivate::getAnimatedStyleForRenderer):
        (WebCore::CSSAnimationControllerPrivate::computeExtentOfAnimation const):
        (WebCore::CSSAnimationController::cancelAnimations):
        (WebCore::CSSAnimationController::getAnimatedStyleForRenderer):
        (WebCore::CSSAnimationController::computeExtentOfAnimation const):
        (WebCore::CSSAnimationController::isRunningAnimationOnRenderer const):
        (WebCore::CSSAnimationController::isRunningAcceleratedAnimationOnRenderer const):

            Test if the style has any animations. This is roughly equivalent of the old test.
            (it is actually somewhat better as the boolean was never cleared on style changes)

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::isCSSAnimating const): Deleted.
        (WebCore::RenderElement::setIsCSSAnimating): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasAnimationsOrTransitions const):

2017-09-12  Ms2ger  <Ms2ger@igalia.com>

        Disallow passing null data to uniform1uiv() and friends.
        https://bugs.webkit.org/show_bug.cgi?id=176777

        Reviewed by Sam Weinig.

        This matches the specification as well as Gecko and Chromium.

        Test: fast/canvas/webgl/webgl2/bindings.html

        * html/canvas/WebGL2RenderingContext.idl:

2017-09-12  Sam Weinig  <sam@webkit.org>

        [Cleanup] Follow up cleanup for DOMFormData implementation
        https://bugs.webkit.org/show_bug.cgi?id=176740

        Reviewed by Alex Christensen.

        - Merges FormDataList into DOMFormData.
        - Streamline / refactor FormData creation from DOMFormData.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/FormDataList.cpp: Removed.
        * html/FormDataList.h: Removed.

            Remove FormDataList.

        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::DOMFormData):
        (WebCore::DOMFormData::createFileEntry):
        (WebCore::DOMFormData::append):
        (WebCore::DOMFormData::set):
        (WebCore::DOMFormData::Iterator::next):
        * html/DOMFormData.h:
        (WebCore::DOMFormData::items const):
        (WebCore::DOMFormData::encoding const):

            Merge FormDataList into DOMFormData. FormDataList's additional
            appendData/appendBlob functions have been removed, and their
            functionality inlined into DOMFormData's append functions. 

            Adopted makeKeyValuePair in DOMFormData::Iterator::next().

        * platform/network/FormData.cpp:
        (WebCore::FormData::create):
        (WebCore::FormData::createMultiPart):
        (WebCore::normalizeStringData):
        (WebCore::FormData::appendMultiPartFileValue):
        (WebCore::FormData::appendMultiPartStringValue):
        (WebCore::FormData::appendMultiPartKeyValuePairItems):
        (WebCore::FormData::appendNonMultiPartKeyValuePairItems):
        (WebCore::FormData::appendKeyValuePairItems): Deleted.
        * platform/network/FormData.h:

            Split-up appendKeyValuePairItems into separate multipart and non-multipart
            functions, as the two edges of the branch didn't share much in common. Further
            split out multipart file and multipart string appending, since they too did not
            share that much in common and makes the code easier to follow. 

            String value normalization has been moved entirely here (previously it was a member 
            function of FormDataList) as FormData is the only user.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        
            Update for new FormData create functions which don't need the
            encoding passed explicitly, since it is part of the DOMFormData.
        
        * html/BaseButtonInputType.cpp:
        * html/BaseButtonInputType.h:
        * html/BaseCheckableInputType.cpp:
        * html/BaseCheckableInputType.h:
        * html/FileInputType.cpp:
        * html/FileInputType.h:
        * html/FormAssociatedElement.h:
        * html/HTMLButtonElement.cpp:
        * html/HTMLButtonElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLMeterElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextAreaElement.h:
        * html/HiddenInputType.cpp:
        * html/HiddenInputType.h:
        * html/ImageInputType.cpp:
        * html/ImageInputType.h:
        * html/InputType.cpp:
        * html/InputType.h:
        * html/SubmitInputType.cpp:
        * html/SubmitInputType.h:
        * html/TextFieldInputType.cpp:
        * html/TextFieldInputType.h:

            Update to use DOMFormData directly, rather than the FormDataList, which 
            has been removed.

        * page/csp/ContentSecurityPolicy.cpp:

            Remove unnecessary #include of unused (and now removed) FormDataList.h

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

        [EME] Implement CDMInstanceClearKey::requestLicense()
        https://bugs.webkit.org/show_bug.cgi?id=176773

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the requestLicense() method for CDMInstanceClearKey. Per
        the specification, the session ID must be a 32-bit numerical value.
        A session ID value counter is thus kept in a static uint32_ object
        and incremented upon each call of requestLicense(). Init data and
        the session ID value are then embedded in the asynchronous dispatch
        that invokes the callback. That invocation now also passes along the
        init data, the session ID in string format, and Succeeded to now
        indicate the operation was completed successfully.

        No new tests -- expectations for the relevant tests are updated
        to reflect the introduced changes.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::requestLicense):

2017-09-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Use transferred size over content size for automatic minimum size
        https://bugs.webkit.org/show_bug.cgi?id=176688

        Reviewed by Sergio Villar Senin.

        CSS WG has agreed to modify the spec so now the transferred size is used
        (if it exists) independently if it's bigger or smaller
        than the content size.
        See: https://github.com/w3c/csswg-drafts/issues/1149

        The spec text (https://drafts.csswg.org/css-grid/#min-size-auto):
          "The automatic minimum size for a grid item in a given dimension is
           its specified size if it exists, otherwise its transferred size
           if that exists, else its content size"

        This patch use the WPT tests updated to check the new behavior.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        Modified so it always returns the transferred size (if any).

2017-09-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Freetype] Doesn't support coloured fonts
        https://bugs.webkit.org/show_bug.cgi?id=156579

        Reviewed by Michael Catanzaro.

        Covered by existing tests. This needs a large rebaseline that will be done in follow up commits.

        * platform/graphics/FontCascade.h: Enable advance text rendering mode by default.
        (WebCore::FontCascade::advancedTextRenderingMode const):
        (WebCore::FontCascade::computeRequiresShaping const):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformInit): Do not get metrics from OS/2 table for non-scalable fonts.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::harfBuzzGetGlyph): Use U8_APPEND_UNSAFE() instead of converting to a String and then encoding it with
        UTF8Encoding().

2017-09-12  Frederic Wang  <fwang@igalia.com>

        Remove unnecessary virtual keyword from JS test files
        https://bugs.webkit.org/show_bug.cgi?id=176683

        Reviewed by Simon Fraser.

        JS bindings headers do not comply with the WebKit coding style since they use both the
        "virtual" and "override" keywords. This patch modifies the generator script to only use
        "override" and regenerates the bindings accordingly.

        No new tests, behavior unchanged.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestCallbackFunction.h:
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.h:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.h:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.h:
        * bindings/scripts/test/JS/JSTestCallbackInterface.h:
        * bindings/scripts/test/JS/JSTestVoidCallbackFunction.h:

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

        [iOS DnD] Support DataTransfer.setDragImage when starting a drag on iOS
        https://bugs.webkit.org/show_bug.cgi?id=176721
        <rdar://problem/34373660>

        Reviewed by Tim Horton.

        Adds support for setting the drag lift preview frame in the case where DataTransfer.setDragImage is being used
        to override the default drag preview. Currently, the frame of the drag preview we supply in this case is the
        same as the bounds of the source element in root view coordinates, but this means that any custom drag image
        the page supplies will be stretched to fill the frame of the source element. Instead, when handling a DHTML drag,
        position the lift and cancel drag previews relative to the event location, respecting any drag offset specified
        in setDragImage. The size of this preview matches the size of the drag image source (since this is all in root
        view coordinates, this means the drag preview will also enlarge if the user pinches to zoom in). If a
        disconnected image source element was provided, then we just fall back to the image size.

        Additionally, renames DragItem's elementBounds to dragPreviewFrameInRootViewCoordinates to better reflect the
        purpose of this variable. This patch also introduces API test plumbing to grab targeted drag previews from the
        drag interaction delegate (i.e. WKContentView), and uses this in a new API test that checks the frame of the
        resulting UITargetedDragPreview after initiating a drag in various circumstances (see changes in Tools/ for more
        detail).

        Test: DataInteractionTests.DragLiftPreviewDataTransferSetDragImage

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::dragImageElement const):
        * dom/DataTransfer.h:
        * page/DragController.cpp:
        (WebCore::dragLocForDHTMLDrag):

        The logic to flip the y offset when computing the drag location is only relevant on Mac, but currently, this is
        guarded by #if PLATFORM(COCOA), which causes the y offset to shift the drag image in the opposite direction on
        iOS. To fix this, simply change the platform define to Mac.

        (WebCore::DragController::doSystemDrag):
        * platform/DragItem.h:
        (WebCore::DragItem::encode const):
        (WebCore::DragItem::decode):

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

        [iOS WK2] Support tapping to add items to the current drag session in web content
        https://bugs.webkit.org/show_bug.cgi?id=176421
        <rdar://problem/31144674>

        Reviewed by Tim Horton.

        Refactors some drag initiation logic to handle starting a drag when data has already been written to the
        pasteboard (in the case of iOS, WebItemProviderPasteboard). See annotated comments below for more detail.

        Tests: DataInteractionTests.AdditionalLinkAndImageIntoContentEditable

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

        Add a HasNonDefaultPasteboardData argument here, and replace checks for !dataTransfer.pasteboard().hasData()
        with checks for whether the argument is HasNonDefaultPasteboardData::No. These checks for Pasteboard::hasData()
        currently prevent us from overwriting custom pasteboard data, in the case that the page has written pasteboard
        data using the event's DataTransfer. However, in the case of adding additional drag items to the session, we
        will already have pasteboard data, so these checks will prevent us from writing default data to the pasteboard.
        See EventHandler::handleDrag for more detail.

        * page/DragController.h:
        * page/DragState.h:

        Remove the draggedContentRange member from DragState. See below.

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

        Simplify the handling of dragged content range markers. Instead of storing the DOM Range being dragged and
        removing/repainting the range after dragging ends, just repaint the contentRenderer of the frame being dragged.
        When the dragging session has completely ended, remove all dragged content ranges from the page's mainframe and
        all of its subframes, and repaint everything.

        (WebCore::EventHandler::dragCancelled):
        (WebCore::EventHandler::didStartDrag):
        (WebCore::EventHandler::dragSourceEndedAt):

        Add a MayExtendDragSession argument, indicating whether or not the web process will attempt to continue the drag
        session, in which case EventHandler::dragSourceEndedAt should not remove any existing dragged content range
        document markers.

        (WebCore::EventHandler::dispatchDragStartEvent):

        Helper method to dispatch a `dragstart` event, return whether or not to proceed with the drag, and also compute
        (as an outparam) whether or not custom pasteboard data was written during the event.

        (WebCore::EventHandler::handleDrag):

        If custom data was written during `dragstart`, pass along HasNonDefaultPasteboardData::Yes when calling
        DragController::startDrag.

        (WebCore::repaintContentsOfRange): Deleted.
        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tryToBeginDataInteractionAtPoint):
        * platform/Pasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::changeCount const):
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard setItemProviders:]):

        Stop clearing out the staged item provider registration list when setting item providers. After refactoring in
        r221595, staged registration lists are now automatically cleared out when (1) the drag-and-drop interaction
        state is cleared out in the UI process, or (2) when the registration list is taken by WKContentView (see
        -takeRegistrationList) when generating an item provider.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::changeCount const):

        Add a changeCount method to Pasteboard on Cocoa platforms (Mac, iOS) which support changeCount natively. In
        theory, there's no reason Windows, GTK and WPE ports can't also implement a similar mechanism in
        PlatformPasteboard, but this isn't needed for anything yet. Upon dragstart, it is safe to assume that the
        pasteboard has been cleared on these platforms, so checking for Pasteboard::hasData (as we do for all platforms
        currently) is sufficient.

2017-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221762.

        This change caused flakiness in a webgl LayoutTest.

        Reverted changeset:

        "[WebGL] accelerated texImage2D for video doesn't respect
        flipY"
        https://bugs.webkit.org/show_bug.cgi?id=176491
        http://trac.webkit.org/changeset/221762

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

        [Win] Add Modules/cache to list of forwarding headers folders.
        https://bugs.webkit.org/show_bug.cgi?id=176737

        Reviewed by Alex Christensen.

        * PlatformWin.cmake:

2017-09-11  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] aria-autocomplete not exposed on comboboxes
        https://bugs.webkit.org/show_bug.cgi?id=176724

        Reviewed by Chris Fleizach.

        Add a check to AccessibilityObject::supportsARIAAutoComplete() for
        combobox because isARIATextControl() returns false for that role.

        Add new combobox test cases to existing aria-autocomplete.html test.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAAutoComplete const):

2017-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221854.

        The test added with this change fails on 32-bit JSC bots.

        Reverted changeset:

        "[DFG] Optimize WeakMap::get by adding intrinsic and fixup"
        https://bugs.webkit.org/show_bug.cgi?id=176010
        http://trac.webkit.org/changeset/221854

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

        [WebGL macOS] No need to multisample when blitting into WebGLLayer
        https://bugs.webkit.org/show_bug.cgi?id=176666
        <rdar://problem/27774626>

        Reviewed by Sam Weinig.

        We were seeing performance profiles suggesting WebGL was
        doing 8x MSAA, even though we explicitly set it to only
        use 4 samples in the GLPixelFormatObj used to create
        the WebGL CGLContextObj. However, that same CGLPixelFormatObj
        was also used for the WebGLLayer's CGLContextObj, meaning the
        blit of the WebGL FBO into the WebGLLayer's backing store was
        multisampling as well -- so an extra 4 samples on top of the
        original 4, making it look like we were doing 8x.

        This was obviously unnecessary, since we already have the
        multisampled FBO and just want to copy it, as is, into the layer.

        Now, instead of copying the CGLPixelFormatObj, we create
        a new one and copy most of the attributes, leaving out
        the multisample flags (and the depth buffer, since we're
        only doing 2d blits).

        Covered by existing WebGL tests, since there should be no
        visible change.

        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer copyCGLPixelFormatForDisplayMask:]): Create a new
        CGLPixelFormatObj that copies most of the values from
        the corresponding object on the WebGL's backing CGLContextObj.

2017-09-11  Zan Dobersek  <zdobersek@igalia.com>

        [EME] ClearKey: implement CDMInstanceClearKey state modifiers, callback dispatches
        https://bugs.webkit.org/show_bug.cgi?id=176687

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the state modification methods on the CDMInstanceClearKey class.
        Initialization method is a no-op, but returns Succeeded. Distinctive
        identifier and persistent state setters return Succeeded if the passed-in
        value is false. setServerCertificate() still returns Failed due to server
        certificates not being supported in this ClearKey implementation.

        The license and session operation methods are also implemented, but for
        now the implementations simply schedule a main thread dispatch that
        invokes the callback with failure-indicating values. This avoids various
        tests timing out, instead preferring that the tests for now fail with an
        exception (in most cases NotSupportedError).

        No new tests -- relevant tests have baselines updated.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::CDMInstanceClearKey):
        (WebCore::CDMInstanceClearKey::initializeWithConfiguration):
        (WebCore::CDMInstanceClearKey::setDistinctiveIdentifiersAllowed):
        (WebCore::CDMInstanceClearKey::setPersistentStateAllowed):
        (WebCore::CDMInstanceClearKey::setServerCertificate):
        (WebCore::CDMInstanceClearKey::requestLicense):
        (WebCore::CDMInstanceClearKey::updateLicense):
        (WebCore::CDMInstanceClearKey::loadSession):
        (WebCore::CDMInstanceClearKey::closeSession):
        (WebCore::CDMInstanceClearKey::removeSessionData):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:

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

        Modernize BoxExtent into RectEdges
        https://bugs.webkit.org/show_bug.cgi?id=176437

        Reviewed by Simon Fraser.

        And give it its own header.
        No change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSProperty.cpp:
        (WebCore::resolveToPhysicalProperty):
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        * platform/LengthBox.h:
        (WebCore::LengthBox::LengthBox):
        (WebCore::BoxExtent::BoxExtent): Deleted.
        (WebCore::BoxExtent::at): Deleted.
        (WebCore::BoxExtent::top): Deleted.
        (WebCore::BoxExtent::right): Deleted.
        (WebCore::BoxExtent::bottom): Deleted.
        (WebCore::BoxExtent::left): Deleted.
        (WebCore::BoxExtent::at const): Deleted.
        (WebCore::BoxExtent::top const): Deleted.
        (WebCore::BoxExtent::right const): Deleted.
        (WebCore::BoxExtent::bottom const): Deleted.
        (WebCore::BoxExtent::left const): Deleted.
        (WebCore::BoxExtent::setAt): Deleted.
        (WebCore::BoxExtent::setTop): Deleted.
        (WebCore::BoxExtent::setRight): Deleted.
        (WebCore::BoxExtent::setBottom): Deleted.
        (WebCore::BoxExtent::setLeft): Deleted.
        (WebCore::BoxExtent::before): Deleted.
        (WebCore::BoxExtent::after): Deleted.
        (WebCore::BoxExtent::start): Deleted.
        (WebCore::BoxExtent::end): Deleted.
        (WebCore::BoxExtent::before const): Deleted.
        (WebCore::BoxExtent::after const): Deleted.
        (WebCore::BoxExtent::start const): Deleted.
        (WebCore::BoxExtent::end const): Deleted.
        (WebCore::BoxExtent::setBefore): Deleted.
        (WebCore::BoxExtent::setAfter): Deleted.
        (WebCore::BoxExtent::setStart): Deleted.
        (WebCore::BoxExtent::setEnd): Deleted.
        (WebCore::BoxExtent::operator== const): Deleted.
        (WebCore::BoxExtent::operator!= const): Deleted.
        * platform/RectEdges.h: Added.
        (WebCore::RectEdges::RectEdges):
        (WebCore::RectEdges::at):
        (WebCore::RectEdges::top):
        (WebCore::RectEdges::right):
        (WebCore::RectEdges::bottom):
        (WebCore::RectEdges::left):
        (WebCore::RectEdges::at const):
        (WebCore::RectEdges::top const):
        (WebCore::RectEdges::right const):
        (WebCore::RectEdges::bottom const):
        (WebCore::RectEdges::left const):
        (WebCore::RectEdges::setAt):
        (WebCore::RectEdges::setTop):
        (WebCore::RectEdges::setRight):
        (WebCore::RectEdges::setBottom):
        (WebCore::RectEdges::setLeft):
        (WebCore::RectEdges::before):
        (WebCore::RectEdges::after):
        (WebCore::RectEdges::start):
        (WebCore::RectEdges::end):
        (WebCore::RectEdges::before const):
        (WebCore::RectEdges::after const):
        (WebCore::RectEdges::start const):
        (WebCore::RectEdges::end const):
        (WebCore::RectEdges::setBefore):
        (WebCore::RectEdges::setAfter):
        (WebCore::RectEdges::setStart):
        (WebCore::RectEdges::setEnd):
        (WebCore::RectEdges::operator== const):
        (WebCore::RectEdges::operator!= const):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setHasMargins):
        * platform/graphics/ca/TileController.h:
        * platform/text/WritingMode.h:
        (WebCore::isHorizontalPhysicalSide):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::isEmptyPieceRect):
        * rendering/style/NinePieceImage.h:
        (WebCore::imagePieceHorizontalSide):
        (WebCore::imagePieceVerticalSide):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getShadowInsetExtent const):

2017-09-11  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [WinCairo] Fix the wincairo build after r221839
        https://bugs.webkit.org/show_bug.cgi?id=176681

        Reviewed by Per Arne Vollan.

        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::setupPOST):

2017-09-11  Andy Estes  <aestes@apple.com>

        [Mac] Upstream QTKit-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176472

        Reviewed by Eric Carlson.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::disableComponentsOnce):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::hasClosedCaptions const):
        (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
        (WebCore::selectPreferredAlternateTrackForMediaType):
        (WebCore::selectPreferredAlternates):
        (WebCore::MediaPlayerPrivateQTKit::updateStates):
        (WebCore::mimeModernTypesCache):
        (WebCore::MediaPlayerPrivateQTKit::originsInMediaCache):
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCache):
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCacheForOrigins):
        (WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin const):
        (WebCore::MediaPlayerPrivateQTKit::movieLoadType const):
        (WebCore::MediaPlayerPrivateQTKit::canSaveMediaData const):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (createMediaUIControl):
        (createControlWithMediaUIControlType):
        (createMediaUIBackgroundView):
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):

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

        Try to fix the Internal El Capitan build after r221773.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::mimeModernTypesCache):

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

        [WPE] Bump freetype version to 2.8.0
        https://bugs.webkit.org/show_bug.cgi?id=176501

        Reviewed by Michael Catanzaro.

        Enable back the changes done by r221670 that were disabled for WPE on r221719.

        Covered by existing tests.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::scaledFontWithoutMetricsHinting):
        (WebCore::Font::platformInit):

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [DFG] Optimize WeakMap::get by adding intrinsic and fixup
        https://bugs.webkit.org/show_bug.cgi?id=176010

        Reviewed by Filip Pizlo.

        * platform/network/curl/CurlJobManager.cpp:
        (WebCore::CurlJobList::finishJobs):

2017-09-10  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Drop libgcrypt initialization in webkit_media_clear_key_decrypt_init()
        https://bugs.webkit.org/show_bug.cgi?id=176656

        Reviewed by Michael Catanzaro.

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webkit_media_clear_key_decrypt_init): Don't re-initialize libgcrypt here
        since that's already done in the WebProcess main(), and the calls here
        only result in libgcrypt writing out 'Oops' warnings on stderr.

2017-09-10  Mark Lam  <mark.lam@apple.com>

        Fix all ExceptionScope verification failures in JavaScriptCore.
        https://bugs.webkit.org/show_bug.cgi?id=176662
        <rdar://problem/34352085>

        Reviewed by Filip Pizlo.

        No new tests because this is covered by existing tests with the JSC_validateExceptionChecks=true enabled.

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::tryToConstructCustomElement):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::whenDefinedPromise):
        * bindings/js/JSDOMConvertRecord.h:
        * bindings/js/JSDOMMapLike.cpp:
        (WebCore::createBackingMap):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        (WebCore::DeferredPromise::reject):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::callPromiseFunction):

2017-09-10  Frederic Wang  <fwang@igalia.coml>

        Make RenderLayerCompositor always use isRootLayer()
        https://bugs.webkit.org/show_bug.cgi?id=176591

        Reviewed by Darin Adler.

        RenderLayerCompositor contains a few comparisons of the form &layer == m_renderView.layer().
        This patch replaces them with "layer.isRootLayer()" which simply verifies that "layer" is
        associated to the one (and only one) RenderView of the RenderLayerCompositor. It makes things
        more readable and more consistent with the rest of the file.

        No new tests, behavior unchanged.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::repaintInCompositedAncestor):
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer const):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2017-09-09  Sam Weinig  <sam@webkit.org>

        Finish off the FormData implementation
        https://bugs.webkit.org/show_bug.cgi?id=176659

        Reviewed by Darin Adler.

        * fileapi/Blob.cpp:
        * fileapi/Blob.h:
        * fileapi/File.cpp:
        * fileapi/File.h:

            Add constructors / create functions for making File objects
            from an existing Blob or File with an override name.

        * html/DOMFormData.cpp:
        * html/DOMFormData.h:

            Add missing operations and iterator implementation
            and bring append up to spec by no ignoring empty names.

        * html/DOMFormData.idl:

            Bring IDL up to spec. Leave its exposure to just the window for
            now, as FormData currently depends on the Document/Page for replace
            file generation and therefore cannot operate in a worker.

        * html/FormDataList.cpp:
        * html/FormDataList.h:

            Changes FormDataList::Item to a String key and Variant<RefPtr<File>, String>
            data, matching spec concepts more cleanly. Normalization / encoding has also
            been made lazy, and now does not happen until creating a FormData from the
            FormDataList.

            Since we now store Files, rather than Blobs, we follow the spec's 'create an 
            entry' algorithm to convert Blobs into Files with the same backing bytes. This
            was previously done as part of FormData::appendKeyValuePairItems.

        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::appendFormData):

            Remove unnecessary conversion to utf8, the data is base64 encoded, allowing
            us to remove an overload of appendData that took a CString.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::buildObjectForResourceRequest):

            Update for new signature of FormData::flatten() which now
            returns a Vector, rather than takes one in.

        * platform/network/FormData.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        (WebCore::FormData::create):
        (WebCore::FormData::createMultiPart):
        
            Cleanup redundancy by using auto.
        
        (WebCore::FormData::appendKeyValuePairItems):
        
            Updated to handle new FormDataList item format (e.g. pairs of key / data) allowing
            us to remove two-by-two iteration. Some complexity was removed around Blobs, as
            FormDataList now always creates File. 

            Since FormDataList no longer eagerly encodes / normalizes the keys and string data
            values, we now perform those operations here.
        
        (WebCore::FormData::expandDataStore):
        (WebCore::appendBlobResolved):
        (WebCore::FormData::resolveBlobReferences):
        (WebCore::FormData::generateFiles):
        (WebCore::FormData::hasGeneratedFiles const):
        (WebCore::FormData::hasOwnedGeneratedFiles const):
        (WebCore::FormData::removeGeneratedFilesIfNeeded):

            Adopt auto and modern for-in loops.

        (WebCore::FormData::flatten const):
        (WebCore::FormData::flattenToString const):

            Update flatten to return a Vector, rather than take it in.

2017-09-10  Darin Adler  <darin@apple.com>

        Refactor Document::updateTitleElement to use traits instead of function pointers
        https://bugs.webkit.org/show_bug.cgi?id=176671

        Reviewed by Sam Weinig.

        This template implementation seems slightly more readable and
        also likely to be slightly more efficient. Also takes a suggestion
        from Antti of factoring out the "select a new title element" into a
        function, which is a natural thing to do in this version.

        * dom/Document.cpp:
        (WebCore::TitleTraits<HTMLTitleElement>::isInEligibleLocation): Added.
        (WebCore::TitleTraits<HTMLTitleElement>::findTitleElement): Added.
        (WebCore::TitleTraits<SVGTitleElement>::isInEligibleLocation): Added.
        (WebCore::TitleTraits<SVGTitleElement>::findTitleElement): Added.
        (WebCore::selectNewTitleElement): Added.
        (WebCore::findHTMLTitle): Deleted.
        (WebCore::isHTMLTitle): Deleted.
        (WebCore::isHTMLTitleEligible): Deleted.
        (WebCore::findSVGTitle): Deleted.
        (WebCore::isSVGTitle): Deleted.
        (WebCore::isSVGTitleEligible): Deleted.
        (WebCore::Document::updateTitleElement): Call selectNewTitleElement
        instead of having the logic here.

2017-09-07  Darin Adler  <darin@apple.com>

        Fix double resolve assertion in FontFaceSet seen while running tests
        https://bugs.webkit.org/show_bug.cgi?id=176525

        Reviewed by Brent Fulgham.

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::FontFaceSet): Only resolve the promise if the CSSFontFaceSet
        is already loaded. Otherwise, we will resolve it later when it calls completedLoading.

2017-09-08  Dean Jackson  <dino@apple.com>

        gl.detachShader breaks shader program
        https://bugs.webkit.org/show_bug.cgi?id=137689
        <rdar://problem/34025056>

        Reviewed by Sam Weinig.

        It should be possible to compile shaders, attach them to a program,
        link the program, detach the shaders, delete the shaders, and then
        ask for the uniform and attribute locations. That is, once you've
        linked, the shaders can be thrown away.

        We were using the attached shaders to look up uniform locations, so
        we now keep around a separate map that remembers what shaders were
        attached when the program links.

        This fixes the bug, but the whole area is still a bit messy. For one,
        we're keeping around all the shader information even after it is
        no longer used.
        See https://bugs.webkit.org/show_bug.cgi?id=98204

        Test: fast/canvas/webgl/detachShader-before-accessing-uniform.html

        * platform/graphics/GraphicsContext3D.h: Add another map to remember
        what shaders were used when a program was linked.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::mappedSymbolInShaderSourceMap): New helper
        to look up a name in our source maps.
        (WebCore::GraphicsContext3D::mappedSymbolName): Use the helper, and look
        at linked shaders if there are no attached shaders.
        (WebCore::GraphicsContext3D::originalSymbolInShaderSourceMap): Does the
        reverse of the above.
        (WebCore::GraphicsContext3D::originalSymbolName):
        (WebCore::GraphicsContext3D::linkProgram): Add to the new map.
        (WebCore::GraphicsContext3D::deleteProgram): Delete the program from
        our shader entries.

2017-09-09  Mark Lam  <mark.lam@apple.com>

        Avoid duplicate computations of ExecState::vm().
        https://bugs.webkit.org/show_bug.cgi?id=176647

        Reviewed by Saam Barati.

        No new tests because this is only a refactoring patch.  There is no
        significant behavior change.

        * Modules/mediastream/SDPProcessor.cpp:
        (WebCore::SDPProcessor::callScript const):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):
        (WebCore::JSCustomElementInterface::upgradeElement):
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSDOMConvertRecord.h:
        * bindings/js/JSDOMMapLike.h:
        (WebCore::forwardSizeToMapLike):
        (WebCore::forwardEntriesToMapLike):
        (WebCore::forwardKeysToMapLike):
        (WebCore::forwardValuesToMapLike):
        (WebCore::forwardGetToMapLike):
        (WebCore::forwardHasToMapLike):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::addCrossOriginWindowOwnPropertyNames):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::reportMemoryForDocumentIfFrameless):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::putCommon):
        (WebCore::addCrossOriginLocationPropertyNames):
        (WebCore::addCrossOriginLocationOwnPropertyNames):
        (WebCore::JSLocation::defineOwnProperty):
        (WebCore::JSLocationPrototype::put):
        (WebCore::JSLocationPrototype::defineOwnProperty):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::setJSInterfaceNameConstructor):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::setJSMapLikeConstructor):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::setJSReadOnlyMapLikeConstructor):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::setJSTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::setJSTestCEReactionsConstructor):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::setJSTestCEReactionsStringifierConstructor):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::setJSTestCallTracerConstructor):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::setJSTestClassWithJSBuiltinConstructorConstructor):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::setJSTestCustomConstructorWithNoInterfaceObjectConstructor):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::setJSTestDOMJITConstructor):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::setJSTestEnabledBySettingConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::setJSTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::setJSTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::setJSTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::setJSTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::setJSTestGlobalObjectConstructor):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::setJSTestIndexedSetterNoIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::setJSTestIndexedSetterThrowingExceptionConstructor):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::setJSTestIndexedSetterWithIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::setJSTestInterfaceLeadingUnderscoreConstructor):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::setJSTestIterableConstructor):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::setJSTestJSBuiltinConstructorConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::setJSTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::setJSTestNamedAndIndexedSetterNoIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::setJSTestNamedAndIndexedSetterThrowingExceptionConstructor):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::setJSTestNamedAndIndexedSetterWithIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::setJSTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::setJSTestNamedDeleterNoIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::setJSTestNamedDeleterThrowingExceptionConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::setJSTestNamedDeleterWithIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::setJSTestNamedDeleterWithIndexedGetterConstructor):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::setJSTestNamedGetterCallWithConstructor):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::setJSTestNamedGetterNoIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::setJSTestNamedGetterWithIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::setJSTestNamedSetterNoIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::setJSTestNamedSetterThrowingExceptionConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::setJSTestNamedSetterWithIdentifierConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::setJSTestNamedSetterWithIndexedGetterConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::setJSTestNamedSetterWithIndexedGetterAndSetterConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::setJSTestNamedSetterWithOverrideBuiltinsConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::setJSTestNamedSetterWithUnforgablePropertiesConstructor):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::setJSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::setJSTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::setJSTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::setJSTestOverloadedConstructorsWithSequenceConstructor):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::setJSTestOverrideBuiltinsConstructor):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::setJSTestPluginInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::setJSTestPromiseRejectionEventConstructor):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::setJSTestSerializationConstructor):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::setJSTestSerializationIndirectInheritanceConstructor):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::setJSTestSerializationInheritConstructor):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::setJSTestSerializationInheritFinalConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::setJSTestStringifierConstructor):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::setJSTestStringifierAnonymousOperationConstructor):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::setJSTestStringifierNamedOperationConstructor):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::setJSTestStringifierOperationImplementedAsConstructor):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::setJSTestStringifierOperationNamedToStringConstructor):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::setJSTestStringifierReadOnlyAttributeConstructor):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::setJSTestStringifierReadWriteAttributeConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsConstructor):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_Enumerate):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::create):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::create):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::create):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyNames):
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::put):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::create):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::getOwnPropertySlot):
        * bridge/runtime_method.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::setControllerJSProperty):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        * testing/Internals.cpp:
        (WebCore::Internals::cloneArrayBuffer):

2017-09-09  Zan Dobersek  <zdobersek@igalia.com>

        [EME] MediaKeySession: handle MediaKeys association through a WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=176584

        Reviewed by Xabier Rodriguez-Calvar.

        Don't keep a raw pointer to the originating MediaKeys object in
        MediaKeySession that gets nulled out once MediaKeys is destroyed.
        Instead, make MediaKeys a WeakPtrFactory and use a WeakPtr<MediaKeys>
        object to maintain the association between MediaKeySession and
        MediaKeys.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::create):
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::detachKeys): Deleted.
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::MediaKeys):
        (WebCore::MediaKeys::createSession):
        (WebCore::MediaKeys::~MediaKeys): Deleted.
        * Modules/encryptedmedia/MediaKeys.h:

2017-09-09  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Missing GRefPtr adoptions in MediaPlayerPrivateGStreamerBase, PlaybackPipeline
        https://bugs.webkit.org/show_bug.cgi?id=176646

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::registerWebKitGStreamerElements): Adopt the return value
        of gst_element_factory_find(), which is transferred in full.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::flush): Adopt the return values
        of gst_element_get_static_pad() and gst_pad_get_peer(), both being
        transferred in full.

2017-09-09  Frederic Wang  <fwang@igalia.com>

        Use RenderLayerBacking::renderer() when possible
        https://bugs.webkit.org/show_bug.cgi?id=176585

        The private member renderer() is a shorthand for m_owningLayer.renderer(). This patch uses
        it in RenderLayerBacking when possible.

        Reviewed by Carlos Garcia Campos.

        No new tests, behavior not changed.

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

2017-09-08  Sam Weinig  <sam@webkit.org>

        Replace JS builtin implementation of the FetchResponse constructor with a C++ one
        https://bugs.webkit.org/show_bug.cgi?id=176627

        Reviewed by Alex Christensen.

        Removes the last of the Fetch related JS builtin code.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * Modules/fetch/FetchInternals.js: Removed.
        * Modules/fetch/FetchResponse.js: Removed.
        
            Remove FetchInternals.js and FetchResponse.js.


        * Modules/fetch/FetchBody.idl:
        * Modules/fetch/FetchBodyConsumer.h:

            Remove no longer correct FIXMEs.

        * Modules/fetch/FetchBodySource.cpp:

            Add missing newline between functions.

        * Modules/fetch/FetchHeaders.idl:
        * Modules/fetch/FetchResponse.idl:

            Remove builtin related operations and extended attributes.

        * Modules/fetch/FetchHeaders.h:
        (WebCore::FetchHeaders::fastHas const):
        * Modules/fetch/FetchHeaders.cpp:

            Added fastHas to allow checking for a header using a HTTPHeaderName. Remove
            now unused filter function.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::isNullBodyStatus):

            Added helper predicate for 'null body status' concept.

        (WebCore::FetchResponse::create):

            Add spec defined constructor implementation.

        (WebCore::FetchResponse::setBodyData):

            Reformatted to match more common WTF::switchOn style.

        (WebCore::FetchResponse::setStatus): Deleted.
        (WebCore::FetchResponse::initializeWith): Deleted.

            Removed now unused functions.

        * Modules/fetch/FetchResponse.h:
        (WebCore::FetchResponse::create):

            Move inline create out of the class definition to make things a bit less crowded.

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

        Implement HTMLImageElement.decoode() method
        https://bugs.webkit.org/show_bug.cgi?id=176016

        Reviewed by Simon Fraser.

        The specs is:
        https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode.

        -- img.decode() waits till loading the image finishes. Otherwise it starts
        decoding the image immediately.
        -- If the image frame is already decoded, the promise will be resolved
        before return.
        -- If an error happens in loading the image or decoding the image frame,
        the promise will be rejected with 'EncodingError' exception.
        -- Animated image resolves the promise when the next frame is decoded and 
        the animation is advanced it. If the image is not displayed, decode() will
        request the decoding the first frame and start animating the image.

        Tests: fast/images/decode-animated-image.html
               fast/images/decode-render-animated-image.html
               fast/images/decode-render-static-image.html
               fast/images/decode-static-image-reject.html
               fast/images/decode-static-image-resolve.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::decode):
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::decode):
        (WebCore::ImageLoader::decodeError):
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::hasPendingDecodePromise const):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::internalStartAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::decode):
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::decode):

2017-09-08  Joseph Pecoraro  <pecoraro@apple.com>

        Fetch's Response.statusText is unexpectedly the full http status line for HTTP/2 responses
        https://bugs.webkit.org/show_bug.cgi?id=176479

        Reviewed by Alex Christensen.

        Test: http/wpt/fetch/response-status-text.html

        HTTP/2 doesn't include a status reason phrase. So the "status line"
        ends up just being the version and status code. Fallback to the empty
        string instead of the full line.

        * platform/network/HTTPParsers.cpp:
        (WebCore::extractReasonPhraseFromHTTPStatusLine):

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

        Implement the attribute HTMLImageElement.async 
        https://bugs.webkit.org/show_bug.cgi?id=176204

        Reviewed by Darin Adler.

        Adding this attribute to the <img> element will force async decoding for
        this image all the times. None of the heuristics, which  prevents flickering
        the image, will be checked.

        Test: fast/images/async-attribute-with-small-image.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::async const):
        * html/HTMLImageElement.idl:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw const):

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

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

        This caused build failures. (Requested by mlewis13 on
        #webkit).

        Reverted changeset:

        "[Mac] Upstream QTKit-related WebKitSystemInterface functions"
        https://bugs.webkit.org/show_bug.cgi?id=176472
        http://trac.webkit.org/changeset/221773

2017-09-08  Antti Koivisto  <antti@apple.com>

        Remove support for >> descendant combinator syntax
        https://bugs.webkit.org/show_bug.cgi?id=175765

        Reviewed by Sam Weinig.

        This is an alternative syntax for the normal descendant combinator (just space) that was
        advertised as being consistent with > (child combinator) and >>> (shadow piercing combinator).
        The latter has been killed so it is not consistent with anything anymore.

        No other engine besides WebKit has implemented this and the WPT tests have been removed
        (in https://github.com/w3c/web-platform-tests/pull/6785). Full removal from spec is still
        open (https://github.com/w3c/csswg-drafts/issues/641) but we shouldn't encourage adoption of
        this pointless feature.

        While this has shipped the compatibility risk is low as no other engine implemented it and
        there were no incentives to use it over the standard syntax.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::hasDescendantRelation const):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively const):
        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectIdentifierHashes):
        * css/parser/CSSParserSelector.cpp:
        (WebCore::CSSParserSelector::appendTagHistory):
        * css/parser/CSSParserSelector.h:
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isDescendantCombinator):
        (WebCore::CSSSelectorParser::consumeCombinator):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):

2017-09-08  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] initializationDataEncountered() dispatch can outlive MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=176544

        Reviewed by Xabier Rodriguez-Calvar.

        The RunLoop dispatch that invokes MediaPlayer::initializationDataEncountered()
        can outlive the MediaPlayerPrivateGStreamerBase object that is referenced
        from the dispatched functor. To avoid this, a WeakPtrFactory is placed onto
        MediaPlayerPrivateGStreamerBase and a WeakPtr object is kept in the functor,
        bailing during dispatch if the factory (along with MediaPlayerPrivateGStreamerBase)
        has already been destroyed since the schedule of this dispatch.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        Also remove the unused `sessionId` string.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2017-09-08  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Add GRefPtr specializations for GstGLDisplay, GstGLContext
        https://bugs.webkit.org/show_bug.cgi?id=176543

        Reviewed by Xabier Rodriguez-Calvar.

        Both GstGLDisplay and GstGLContext inherit from GstObject, meaning
        gst_object_ref_sink() and gst_object_unref() should be used for
        incrementing and decrementing reference count. Template specializations
        for the adoptGRef(), refGPtr() and derefGPtr() are added for both types,
        preventing GRefPtr<> from falling back to using g_object_ref() and
        g_object_unref() for reference count modification purposes.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::refGPtr<GstGLDisplay>):
        (WTF::derefGPtr<GstGLDisplay>):
        (WTF::refGPtr<GstGLContext>):
        (WTF::derefGPtr<GstGLContext>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:

2017-09-08  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Incorrect GstCaps unreffing in GStreamerEMEUtilities::createDecryptor()
        https://bugs.webkit.org/show_bug.cgi?id=176540

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp:
        Include the GRefPtrGStreamer.h header in order to use specialized template
        functions that correctly adopt and dereference GstCaps object that is
        wrapped the GRefPtr<>.

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

        WebKit should claim that it can show responses for a broader range of JSON MIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=176252
        <rdar://problem/34212885>

        Reviewed by Ryosuke Niwa.

        * platform/MIMETypeRegistry.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::canShowMIMEType):
        Extend this to support JavaScript and JSON MIMETypes that WebKit
        knows how to treat as text.

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

        [Mac] Upstream QTKit-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176472

        Reviewed by Eric Carlson.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::disableComponentsOnce):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::hasClosedCaptions const):
        (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
        (WebCore::selectPreferredAlternateTrackForMediaType):
        (WebCore::selectPreferredAlternates):
        (WebCore::MediaPlayerPrivateQTKit::updateStates):
        (WebCore::mimeModernTypesCache):
        (WebCore::MediaPlayerPrivateQTKit::originsInMediaCache):
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCache):
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCacheForOrigins):
        (WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin const):
        (WebCore::MediaPlayerPrivateQTKit::movieLoadType const):
        (WebCore::MediaPlayerPrivateQTKit::canSaveMediaData const):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (createMediaUIControl):
        (createControlWithMediaUIControlType):
        (createMediaUIBackgroundView):
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):

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

        Align FetchResponse and FetchRequest body handling
        https://bugs.webkit.org/show_bug.cgi?id=176539

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        Removing most of FetchResponse JS Builtins now that ReadableStream has full support.
        Implementing FetchResponse body cloning through ReadableStream.
        Cloning a loading FetchResponse still requires to create a ReadableStream for the purpose of teeing.

        Moving exposure of the body from FetchResponse to FetchBodyOwner.
        This is controlled by a boolean flag set according response tainting.

        Moving handling of body ReadableStream consuming from FetchResponse to FetchBodyConsumer.
        For that purpose, a loading boolean flag is added to FetchBodyConsumer so that it will resolve consume promises
        when loading is finished.

        Added support for getting a body in case the request/response body is already consumed.
        In that case, a locked ReadableStream is returned.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::doMatch):
        (WebCore::DOMCache::matchAll):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::loadingBody):
        (WebCore::FetchBody::FetchBody):
        * Modules/fetch/FetchBody.idl:
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::loadingFailed):
        (WebCore::FetchBodyConsumer::loadingSucceeded):
        * Modules/fetch/FetchBodyConsumer.h:
        (WebCore::FetchBodyConsumer::setAsLoading):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::arrayBuffer):
        (WebCore::FetchBodyOwner::blob):
        (WebCore::FetchBodyOwner::formData):
        (WebCore::FetchBodyOwner::json):
        (WebCore::FetchBodyOwner::text):
        (WebCore::FetchBodyOwner::readableStream):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::isBodyNullOrOpaque const):
        (WebCore::FetchBodyOwner::setBodyAsOpaque):
        (WebCore::FetchBodyOwner::isBodyOpaque const):
        * Modules/fetch/FetchInternals.js:
        (fillFetchHeaders):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone):
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse):
        (WebCore::FetchResponse::setBodyData):
        (WebCore::FetchResponse::consumeChunk):
        (WebCore::FetchResponse::consumeBodyAsStream):
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/FetchResponse.js:
        (initializeFetchResponse):
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::create):
        (WebCore::ReadableStream::lock):
        * bindings/js/ReadableStream.h:
        * bindings/js/WebCoreBuiltinNames.h:

2017-09-07  Michael Saboff  <msaboff@apple.com>

        Add support for RegExp named capture groups
        https://bugs.webkit.org/show_bug.cgi?id=176435

        Reviewed by Filip Pizlo.

        Implemented stub routines to support named capture groups.  These are no-ops
        just like for number capture group.

        No new tests as this is covered by existing tests.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::PatternParser::atomNamedBackReference):
        (WebCore::ContentExtensions::PatternParser::atomParenthesesSubpatternBegin):

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

        [PAL] Unify PlatformUserPreferredLanguages.h with Language.h
        https://bugs.webkit.org/show_bug.cgi?id=176561

        Reviewed by Brent Fulgham.

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilitySVGElement.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * dom/Document.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/shadow/MediaControlElements.cpp:
        * html/track/TrackBase.cpp:
        * page/CaptionUserPreferences.cpp:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/DOMWindow.cpp:
        * page/Navigator.cpp:
        * page/NavigatorBase.cpp:
        * platform/graphics/FontGenericFamilies.cpp:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        * platform/network/HTTPParsers.cpp:
        * platform/text/PlatformLocale.h:
        * platform/text/cf/HyphenationCF.cpp:
        * platform/text/mac/LocaleMac.mm:
        * svg/SVGTests.cpp:
        * testing/InternalSettings.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::userPreferredLanguages const):
        (WebCore::Internals::setUserPreferredLanguages):

2017-09-06  Dean Jackson  <dino@apple.com>

        [WebGL] accelerated texImage2D for video doesn't respect flipY
        https://bugs.webkit.org/show_bug.cgi?id=176491
        <rdar://problem/33833511>

        Reviewed by Jer Noble.

        Previously, if UNPACK_FLIP_Y_WEBGL was set to true, we'd either fall
        back to software or fail to upload texture data. Fix this by intercepting
        the texImage2D call, checking the orientation of the video, and running
        a small shader program to flip it if necessary.

        While there, implement UNPACK_PREMULTIPLY_ALPHA_WEBGL as well, although
        none of our media decoders support video with alpha, so unfortunately
        this will have no visible change.

        Tests: fast/canvas/webgl/texImage2D-video-flipY-false.html
               fast/canvas/webgl/texImage2D-video-flipY-true.html

        * platform/cocoa/CoreVideoSoftLink.cpp: Add link to CVOpenGL(ES)TextureGetCleanTexCoords,
        which is used to check the orientation of the source video.
        * platform/cocoa/CoreVideoSoftLink.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::copyVideoTextureToPlatformTexture): We can
        now handle flipped or premultiplied requests.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::copyVideoTextureToPlatformTexture): Ditto.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::VideoTextureCopierCV): Rename readFramebuffer to
        simply framebuffer.
        (WebCore::VideoTextureCopierCV::~VideoTextureCopierCV): Delete the program and buffer
        if they were created.
        (WebCore::VideoTextureCopierCV::initializeContextObjects): Sets up the shader program
        and the vertex buffer for drawing. Also records the location of the uniforms.
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture): Create a new
        framebuffer object, and render the video texture into that framebuffer using a
        shader that can flip the coordinates.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::GC3DStateSaver): Helper to restore
        the state of the user's GraphicsContext3D while we're intercepting calls.
        (WebCore::VideoTextureCopierCV::GC3DStateSaver::~GC3DStateSaver):
        * platform/graphics/cv/VideoTextureCopierCV.h:

        * platform/graphics/GraphicsContext3D.h: Add two new entry points, for direct shader
        compilation and attribute access. This avoids going through ANGLE.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::compileShaderDirect):
        (WebCore::GraphicsContext3D::getAttribLocationDirect):

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

        [Directory Upload] Extend drag and drop support to iOS
        https://bugs.webkit.org/show_bug.cgi?id=176492
        <rdar://problem/34291584>

        Reviewed by Tim Horton.

        Adds support for accepting dropped folders on iOS.

        Tests: DataInteractionTests.ExternalSourceDataTransferItemGetFolderAsEntry
               DataInteractionTests.ExternalSourceDataTransferItemGetPlainTextFileAsEntry

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::supportedFileUploadPasteboardTypes):

        Add "public.folder" as a compatible pasteboard type for drops on iOS. This means file inputs and custom drop
        targets that preventDefault() will, by default, be able to accept incoming folders.

        * platform/ios/WebItemProviderPasteboard.mm:
        (linkTemporaryItemProviderFilesToDropStagingDirectory):

        Tweak temporaryFileURLForDataInteractionContent to also hard link UIKit's temporary files instead, and return
        a non-null destination URL only if the necessary file operations succeeded. Also renames this helper to
        linkTemporaryItemProviderFilesToDropStagingDirectory to better reflect its new purpose. This makes logic much
        cleaner at the call site, which no longer checks against various conditions before proceeding to set the data
        transfer URL.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):
        (temporaryFileURLForDataInteractionContent): Deleted.

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

        Modernize Geolocation code
        https://bugs.webkit.org/show_bug.cgi?id=176496

        Reviewed by Andy Estes.

        No change in behavior.  Just more references instead of pointers.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::createPositionError):
        (WebCore::Geolocation::resetAllGeolocationPermission):
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::setError):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/GeolocationClient.h:
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::addObserver):
        (WebCore::GeolocationController::removeObserver):
        (WebCore::GeolocationController::requestPermission):
        (WebCore::GeolocationController::cancelPermissionRequest):
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::errorOccurred):
        (WebCore::GeolocationController::activityStateDidChange):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:

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

        [ARM] Building FELightningNEON.cpp fails due to missing {Point,Spot}LightSource declarations
        https://bugs.webkit.org/show_bug.cgi?id=176531

        Reviewed by Žan Doberšek.

        The m_lightSource member is a Ref<LightSource>, and its get() method returns
        a reference, therefore the casts have to be done to the corresponding reference
        types.

        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon): Adjust casts and member accesses accordingly.

2017-09-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221716.

        This change caused assertion failures on macOS Debug WK2.

        Reverted changeset:

        "Fetch's Response.statusText is unexpectedly the full http
        status line for HTTP/2 responses"
        https://bugs.webkit.org/show_bug.cgi?id=176479
        http://trac.webkit.org/changeset/221716

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

        [EME] CDMClearKey: implement remaining methods of CDMPrivate derivative
        https://bugs.webkit.org/show_bug.cgi?id=176495

        Reviewed by Xabier Rodriguez-Calvar.

        Implement the remaining CDMPrivateClearKey methods, following the
        ClearKey specification:
         - server certificates are not supported, but sessions are;
         - 'keyids' init data in JSON format is acceptable;
         - JSON responses are acceptable;
         - session IDs must use the 32-bit integer format.

        No new tests -- covered by imported W3C tests that utilize ClearKey.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseJSONObject):
        (WebCore::CDMPrivateClearKey::loadAndInitialize):
        (WebCore::CDMPrivateClearKey::supportsServerCertificates const):
        (WebCore::CDMPrivateClearKey::supportsSessions const):
        (WebCore::CDMPrivateClearKey::supportsInitData const):
        (WebCore::CDMPrivateClearKey::sanitizeResponse const):
        (WebCore::CDMPrivateClearKey::sanitizeSessionId const):

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

        [GTK] Bring back line height rounding when computing font metrics
        https://bugs.webkit.org/show_bug.cgi?id=176497

        Reviewed by Žan Doberšek.

        In r221670 we changed the way we get the metrics to avoid rounding that was causing a negative line gap to be
        computed. Since the font metrics value is indeed a float value, we also removed the rounding when setting the
        line height. However, this caused some test failures because now we report non integer line heights.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformInit):

2017-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Temporary disable the changes introduced in r221670 for WPE.

        It caused a lot of test failures. Once WPE upgrades to Freetype 2.8 and removes the 2.4.11 patch, we can enable
        it again.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformInit):

2017-09-06  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Implement MediaPlayerPrivateGStreamerMSE::attempToDecryptWithInstance()
        https://bugs.webkit.org/show_bug.cgi?id=176445

        Reviewed by Xabier Rodriguez-Calvar.

        Implement MediaPlayerPrivateGStreamerMSE::attempToDecryptWithInstance(), also
        adding support for dispatching ClearKey keys into the append pipelines.

        CDMInstanceClearKey::Key is added, containing key ID and value buffers as well
        as the key status value. Vector of keys for a specific CDMInstance is
        accessible through the CDMInstanceClearKey::keys() getter.

        In MediaPlayerPrivateGStreamerMSE, that Vector is retrieved and then iterated
        over, constructing corresponding key ID and key value lists that contain
        GstBuffer objects into which each key ID and value data is copied. Both lists
        are then set on the 'drm-cipher-clearkey' structure before it's dispatched
        against each AppendPipeline object.

        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithInstance):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

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

        Fetch's Response.statusText is unexpectedly the full http status line for HTTP/2 responses
        https://bugs.webkit.org/show_bug.cgi?id=176479

        Reviewed by Alexey Proskuryakov.

        Test: http/wpt/fetch/response-status-text.html

        HTTP/2 doesn't include a status reason phrase. So the "status line"
        ends up just being the version and status code. Fallback to the empty
        string instead of the full line.

        * platform/network/HTTPParsers.cpp:
        (WebCore::extractReasonPhraseFromHTTPStatusLine):

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

        Require LoggingHelper overrides to provide identifier
        https://bugs.webkit.org/show_bug.cgi?id=176477

        Reviewed by Jer Noble.

        No new tests, updated API test.

        * html/HTMLMediaElement.cpp:
        (WebCore::nextLogIdentifier): New.
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_logIdendifier. LOGTHIS -> LOGIDENTIFIER.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Ditto.
        * html/HTMLMediaElement.h:

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

        NetworkProcess Cache and Caches should be cleared when the last related WebProcess Cache or CacheStorage is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=176249

        Reviewed by Alex Christensen.

        Test: http/tests/cache-storage/cache-representation.https.html

        Each Cache construction/destruction is notified to the CacheStorageConnection
        so that the WebKit2 engine can handle memory management accordingly.

        Adding an internal API to grab the representation of an engine at any time.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::Cache):
        (WebCore::Cache::~Cache):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::reference):
        (WebCore::CacheStorageConnection::dereference):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::reference):
        (WebCore::WorkerCacheStorageConnection::dereference):
        * Modules/cache/WorkerCacheStorageConnection.h:
        * testing/Internals.cpp:
        (WebCore::Internals::cacheStorageEngineRepresentation):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-09-05  Matt Rajca  <mrajca@apple.com>

        Support new autoplay quirk for arbitrary user gestures.
        https://bugs.webkit.org/show_bug.cgi?id=176402

        Reviewed by Eric Carlson.

        This quirk allows any user gesture to allow autoplay in a document.

        No new tests because this specifically targets one host.

        * html/MediaElementSession.cpp:
        (WebCore::needsArbitraryUserGestureAutoplayQuirk):
        (WebCore::MediaElementSession::playbackPermitted const):

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

        Support caching of Response with a ReadableStream body
        https://bugs.webkit.org/show_bug.cgi?id=176462

        Reviewed by Alex Christensen.

        Tests: http/wpt/cache-storage/cache-put-stream.https.any.html
               http/wpt/cache-storage/cache-put-stream.https.any.worker.html

        Making FetchResponse use more of ReadableStream:
        - Cloning of its body is done through ReadableStream.
        - Computation of disturbed and locked is done through ReadableStream.
        - Storing of the ReadableStream body given at constructor time is done in FetchBody for FetchResponse.
        This allows making FetchResponse closer to FetchRequest.
        This also allows to correctly compute disturbed and locked in clone cases.

        Adding the ability to consume a Response ReadableStream body as a SharedBuffer.
        Using that ability in DOMCache.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::putWithResponseData):
        (WebCore::DOMCache::put):
        * Modules/cache/DOMCache.h:
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::readableStream const):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::extract):
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::isDisturbed const):
        (WebCore::FetchBodyOwner::isDisturbedOrLocked const):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::hasReadableStreamBody const):
        * Modules/fetch/FetchBodySource.cpp:
        * Modules/fetch/FetchBodySource.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::consumeBodyFromReadableStream):
        (WebCore::FetchResponse::consumeBodyWhenLoaded):
        (WebCore::FetchResponse::consumeBodyAsStream):
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/FetchResponse.js:
        (initializeFetchResponse):
        (clone):
        * bindings/js/ReadableStream.cpp:
        (WebCore::callFunction):
        (WebCore::ReadableStream::pipeTo):
        (WebCore::ReadableStream::tee):
        (WebCore::checkReadableStream):
        (WebCore::ReadableStream::isLocked const):
        (WebCore::ReadableStream::isDisturbed const):
        (WebCore::ReadableStream::isDisturbed):
        * bindings/js/ReadableStream.h:
        * bindings/js/ReadableStreamDefaultController.cpp:
        * bindings/js/ReadableStreamDefaultController.h:
        * bindings/js/WebCoreBuiltinNames.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isReadableStreamDisturbed):

2017-09-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221461.

        The LayoutTest added with this change crashes under
        GuardMalloc.

        Reverted changeset:

        "Add (entirely incorrect) fetching of ServiceWorker scripts."
        https://bugs.webkit.org/show_bug.cgi?id=176179
        http://trac.webkit.org/changeset/221461

2017-09-06  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Support overloaded CanvasRenderingContext2D actions with identical parameter counts
        https://bugs.webkit.org/show_bug.cgi?id=176178
        <rdar://problem/34192229>

        Reviewed by Matt Baker.

        Update existing tests.

        * WebCore.xcodeproj/project.pbxproj:

        * inspector/InspectorCanvas.cpp:
        (WebCore::buildArrayForVector):
        (WebCore::InspectorCanvas::buildAction):
        Add another array to each action that contains a swizzle type for each parameter. This is
        used by the frontend to determine how to regenerate the value from what is given in the JSON.

        * inspector/RecordingSwizzleTypes.h: Added.
        Contains a value-specified enum of types that translate into int values, which are mirrored
        by an object in the frontend, that indicate the type of each parameter. This enum matches
        the values in WI.Recording.Swizzle.

2017-09-06  Per Arne Vollan  <pvollan@apple.com>

        [Win] WebCore failed to build, InbandTextTrackPrivateAVF: base class undefined.
        https://bugs.webkit.org/show_bug.cgi?id=176431

        Reviewed by Alex Christensen.

        AVFoundation header detection should be done in WebCore because of build dependencies.

        No new tests, covered by existing tests.

        * AVFoundationSupport.py: Copied from Source/WTF/AVFoundationSupport.py.
        * PlatformWin.cmake:
        * config.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:

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

        REGRESSION (r221598): Legacy "round" and "bevel" options can no longer be used with the legacy CanvasRenderingContext2D setLineJoin operation
        https://bugs.webkit.org/show_bug.cgi?id=176461

        Reviewed by Alex Christensen.

        Tests: fast/canvas/canvas-strokePath-cap-join-legacy-functions-match-attribute.html
               fast/canvas/canvas-strokePath-cap-join-legacy.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setLineJoin):
        
            Fix silly typo, ifs -> else ifs.

2017-09-06  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile errors in Document::updateTitleElement.
        https://bugs.webkit.org/show_bug.cgi?id=176381

        Reviewed by Alex Christensen.

        MSVC is not able to compile the statement:
        'auto result = boolExpression ? lambda1 : lambda2;'
        where 'lambda1' and 'lambda2' have the same signature.

        * dom/Document.cpp:
        (WebCore::findHTMLTitle):
        (WebCore::isHTMLTitle):
        (WebCore::isHTMLTitleEligible):
        (WebCore::findSVGTitle):
        (WebCore::isSVGTitle):
        (WebCore::isSVGTitleEligible):
        (WebCore::Document::updateTitleElement):

2017-09-06  Brent Fulgham  <bfulgham@apple.com>

        Deny third-party cookie creation for prevalent resources without interaction
        https://bugs.webkit.org/show_bug.cgi?id=175232
        <rdar://problem/33709386>

        Reviewed by Alex Christensen.

        Prior to Intelligent Tracking Prevention, WebKit would deny the ability to create a third party cookie if the user's
        settings prohibited it. Due to the internal mechanics of cookie partitioning, we now accept the third party cookie,
        but destroy it at some arbitrary moment which is difficult for websites to work with.
        
        This patch revises WebKit so that attempts to set third party cookies without user interaction fails immediately,
        which is what sites are expecting from Safari.

        Tests: http/tests/loading/resourceLoadStatistics/third-party-cookie-with-and-without-user-interaction.html

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::shouldPartitionCookies const): Revise for new naming.
        (WebCore::NetworkStorageSession::shouldAllowThirdPartyCookies const): Allow third party cookies when the
        user interaction property applies.
        (WebCore::NetworkStorageSession::shouldBlockCookies const): Deny cookies for origins that are not allowed by
        user interaction, and that are not being partitioned.
        (WebCore::NetworkStorageSession::setPrevalentDomainsWithAndWithoutInteraction): Revise for new naming, and
        to track prevalent origins with and without user interaction.
        (WebCore::NetworkStorageSession::setShouldPartitionCookiesForHosts): Renamed to setPrevalentDomainsWithAndWithoutInteraction.
        (WebCore::NetworkStorageSession::removePrevalentDomains): New helper function for testing.

2017-09-06  Tomas Popela  <tpopela@redhat.com>

        Missing break in URLParser
        https://bugs.webkit.org/show_bug.cgi?id=176357

        Reviewed by Darin Adler.

        Add a missing break so the currently set state is not overwritten
        after the block. Found by Coverity scan.

        * platform/URLParser.cpp:
        (WebCore::URLParser::parse):

2017-09-06  Dominik Röttsches  <dominik.rottsches@intel.com>

        [GTK] Bump freetype version to 2.8.0
        https://bugs.webkit.org/show_bug.cgi?id=176351

        Reviewed by Carlos Alberto Lopez Perez.

        Retrieving line spacing info without metrics hinting - FreeType's metric hinting
        uses rounding which results in the sum of ascent and descent being larger
        than the line height. To work around this without globally disabling font metrics
        hinting, I am temporarily creating a new cairo scaled font with metrics hinting
        off and retrieving the height values from this one.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::scaledFontWithoutMetricsHinting): New function to clone the existing font, only with metrics hinting
        disabled.
        (WebCore::Font::platformInit): Get height info from non-metrics hinted font, disable rounding for linespacing.

2017-09-06  Frédéric Wang  <fwang@igalia.com>

        Introduce ScrollingTreeScrollingNodeDelegateIOS to share code between overflow and frame scrolling
        https://bugs.webkit.org/show_bug.cgi?id=174097

        Reviewed by Darin Adler.

        No new tests, behavior unchanged.

        * WebCore.xcodeproj/project.pbxproj: Add ScrollingTreeScrollingNodeDelegate.
        * page/scrolling/ScrollingTreeScrollingNode.h: Make ScrollingTreeScrollingNodeDelegate a
        friend so that it can access private members.
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.cpp: Added. New delegate class for a
        scrolling node, which is used by the UI process.
        (WebCore::ScrollingTreeScrollingNodeDelegate::ScrollingTreeScrollingNodeDelegate):
        Constructor, taking the scrolling node as a parameter.
        (WebCore::ScrollingTreeScrollingNodeDelegate::~ScrollingTreeScrollingNodeDelegate):
        (WebCore::ScrollingTreeScrollingNodeDelegate::scrollingTree const): Expose the scrolling
        tree containing the scrolling node.
        (WebCore::ScrollingTreeScrollingNodeDelegate::lastCommittedScrollPosition const): Expose
        the last committed scroll position of the scrolling node.
        * page/scrolling/ScrollingTreeScrollingNodeDelegate.h: Added.
        (WebCore::ScrollingTreeScrollingNodeDelegate::scrollingNode): Expose the scrolling node.
        (WebCore::ScrollingTreeScrollingNodeDelegate::scrollingNode const): Ditto.

2017-09-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] grid shorthand should not reset the gutter properties
        https://bugs.webkit.org/show_bug.cgi?id=176375

        Reviewed by Sergio Villar Senin.

        The CSS WG has resolved that the "grid" shorthand shouldn't reset
        the gutter properties anymore:
        https://github.com/w3c/csswg-drafts/issues/1036

        This was originally implemented in r195529, so this is somehow
        a revert of that change.

        Test: imported/w3c/web-platform-tests/css/css-grid-1/grid-definition/grid-shorthand-001.html

        * css/CSSProperties.json:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeGridShorthand):

2017-09-06  Zan Dobersek  <zdobersek@igalia.com>

        [WebGL2] Implement getActiveUniforms()
        https://bugs.webkit.org/show_bug.cgi?id=175203

        Reviewed by Darin Adler.

        Align getActiveUniforms() WebIDL signature with the spec -- making it
        return a WebGLAny object, making the program parameter non-nullable,
        and making the uniformIndices parameter a sequence on GLuint values.

        The getActiveUniforms() implementation in WebGL2RenderingContext
        validates the passed-in program and parameter name and then calls the
        GraphicsContext3D::getActiveUniforms() method, retrieving an array of
        integers that represent values of the requested parameter name for
        each uniform whose index was passed through uniformIndices.

        Test: fast/canvas/webgl/webgl2-getActiveUniforms.html

        * bindings/js/JSDOMConvertWebGL.cpp:
        (WebCore::convertToJSValue):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getActiveUniforms):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLAny.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getActiveUniforms):

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

        [WebCrypto] Downcast parameters and keys at the platform operation callsites
        https://bugs.webkit.org/show_bug.cgi?id=176392

        Reviewed by Sam Weinig.

        Downcast to algorithm-specific parameter and key types in the shared
        code that then invokes platform-specific operation implementations.
        This reduces the duplicated downcasts across different implementations
        that don't differ at all in this behavior.

        Covered by existing tests.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::encrypt):
        (WebCore::CryptoAlgorithmAES_CTR::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::wrapKey):
        (WebCore::CryptoAlgorithmAES_KW::unwrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::sign):
        (WebCore::CryptoAlgorithmECDSA::verify):
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        (WebCore::CryptoAlgorithmHKDF::deriveBits):
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::deriveBits):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
        * crypto/mac/CryptoAlgorithmECDHMac.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):

2017-09-05  Darin Adler  <darin@apple.com>

        Fix a few minor problems found while working toward removing unneeded calls to updateStyle
        https://bugs.webkit.org/show_bug.cgi?id=176279

        Reviewed by Antti Koivisto.

        * dom/Document.cpp:
        (WebCore::Document::updateTitleElement): Fix the algorithm so that an SVG title won't
        ever become the title when the document element is not an SVG element. We had this wrong
        before but we were passing the test because SVGTitleElement::insertedInto had a bug that
        hid the problem.
        (WebCore::Document::titleElementAdded): Pass a reference instead of a pointer.
        (WebCore::Document::titleElementRemoved): Pass a reference instead of nullptr since we
        want to know which element is being removed.

        * dom/Document.h: Update the argument name and type for updateTitleElement.

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedInto): Call titleElementAdded unconditionally.
        The checks to see if the title element is connected to the document and not in the
        shadow tree are now handled by the Document class.
        (WebCore::HTMLTitleElement::removedFrom): Same for titleElementRemoved.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::applySize): Removed incorrect caching of FontCascade
        objects; these need to be created each time we draw.
        (WebCore::MockRealtimeVideoSource::drawText): Create all the fonts here. Since this is
        a mock for testing, there is no real performance concern with doing this.
        * platform/mock/MockRealtimeVideoSource.h: Removed the FontCascade data members.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::updateLayoutIgnoringPendingStylesheetsIncludingSubframes): Added. Used below
        to update layout more thoroughly.
        (WebCore::externalRepresentation): Update layout of all descendant frames, not just
        the top level frame.

        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto): Removed bogus firstChild check, bogus isSVGDocument
        check, and unneeded isConnected check and call titleElementAdded unconditionally. The checks
        are now handled by the Document class.
        (WebCore::SVGTitleElement::removedFrom): Same for titleElementRemoved.

        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText const): Added missing updateLayoutIgnorePendingStylesheets,
        since dumping the layer tree without first doing a layout will yield stale results.
        (WebCore::Internals::layerIDForElement): Added missing updateLayoutIgnorePendingStylesheets,
        since using a renderer to check if a layer exists without first doing a layout will yield stale results.
        (WebCore::Internals::setElementUsesDisplayListDrawing): Ditto.
        (WebCore::Internals::setElementTracksDisplayListReplay): Ditto.
        (WebCore::Internals::displayListForElement): Ditto.
        (WebCore::Internals::replayDisplayListForElement): Ditto.
        (WebCore::Internals::isSelectPopupVisible): Added missing updateLayoutIgnorePendingStylesheets,
        since working with the RenderMenuList without first doing a layout will yield stale results.
        Also removed unneeded strict handling of null renderer, instead just returning false.
        (WebCore::Internals::isPluginUnavailabilityIndicatorObscured): Removed unnneeded check of
        renderer class, since the HTMLPlugInElement::isReplacementObscured already handles that correctly.
        (WebCore::Internals::pageOverlayLayerTreeAsText const): Use updateLayoutIgnorePendingStylesheets
        instead of the normal updateLayout for consistency with the behavior of the other functions in this
        file, and because we need a real answer here.
        (WebCore::Internals::scrollSnapOffsets): Ditto. Also rearranged the code so the renderer check is
        done after updating the renderer tree.

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

        Unreviewed, rolling out r221495.

        This change introduced  assertion failures on El Capitan Debug
        WK2.

        Reverted changeset:

        "Move ServiceWorkerJob from FetchLoader to ThreadableLoader."
        https://bugs.webkit.org/show_bug.cgi?id=176231
        http://trac.webkit.org/changeset/221495

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

        Add support for input.webkitEntries
        https://bugs.webkit.org/show_bug.cgi?id=176257
        <rdar://problem/34218671>

        Reviewed by Andreas Kling.

        Add support for input.webkitEntries as per:
        - https://wicg.github.io/entries-api/#html-forms

        Our behavior matches Chrome and Firefox, rather than the specification. This means
        that webkitEntries is only populated if the webkitdirectory flag is unset.

        Tests: fast/forms/file/entries-api/drag-folder-webkitEntries.html
               fast/forms/file/entries-api/webkitdirectory-drag-folder-webkitEntries.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/entriesapi/HTMLInputElementEntriesAPI.cpp: Added.
        (WebCore::HTMLInputElementEntriesAPI::webkitEntries):
        * Modules/entriesapi/HTMLInputElementEntriesAPI.h: Added.
        * Modules/entriesapi/HTMLInputElementEntriesAPI.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceReflectAttributeGetter):
        (WebCore::jsTestInterfaceReflectAttribute):
        (WebCore::setJSTestInterfaceReflectAttributeSetter):
        (WebCore::setJSTestInterfaceReflectAttribute):
        * bindings/scripts/test/TestSupplemental.idl:
        * html/HTMLInputElement.idl:

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

        FileSystemEntry API should ignore hidden files
        https://bugs.webkit.org/show_bug.cgi?id=176292
        <rdar://problem/34257666>

        Reviewed by Andreas Kling.

        FileSystemEntry API should ignore hidden files as the user likely does not mean
        to expose those when drag'n dropping a folder.

        Test: editing/pasteboard/enties-api/datatransfer-items-drop-hidden-file.html

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::listDirectoryWithMetadata):
        (WebCore::validatePathIsExpectedType):
        (WebCore::fileType):
        (WebCore::DOMFileSystem::getEntry):

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

        Update font selection algorithm to match latest CSS spec
        https://bugs.webkit.org/show_bug.cgi?id=175236

        Reviewed by Darin Adler.

        The CSS WG tweaked the generalization of the font selection
        algorithm between levels 3 and 4. In particular, the behavior
        of weights between 400 and 500 works a little differently.

        https://github.com/w3c/csswg-drafts/commit/f6973a21847f1c200ed38bff05dc543cebe1c827

        Test: fast/text/variations/font-selection-font-weight.html

        * platform/graphics/FontSelectionAlgorithm.cpp:
        (WebCore::FontSelectionAlgorithm::weightDistance const):
        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::lowerWeightSearchThreshold):
        (WebCore::upperWeightSearchThreshold):
        (WebCore::weightSearchThreshold): Deleted.

2017-09-05  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile errors in pathByAppendingComponents.
        https://bugs.webkit.org/show_bug.cgi?id=176387

        Reviewed by Brent Fulgham.

        The pathByAppendingComponents function has changed signature.

        * platform/win/FileSystemWin.cpp:
        (WebCore::pathByAppendingComponents):

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

        Fix capitalization of scheduleinvalidateStyleAndLayerComposition
        https://bugs.webkit.org/show_bug.cgi?id=176266

        Reviewed by Antti Koivisto.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::scheduleInvalidateStyleAndLayerComposition):
        (WebCore::HTMLFrameOwnerElement::scheduleinvalidateStyleAndLayerComposition): Deleted.
        * html/HTMLFrameOwnerElement.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):

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

        Unreviewed, rolling out r221603.

        This caused accessibility/mac/select-element-selection-with-
        optgroups.html to consistently timeout on macOS

        Reverted changeset:

        "Fix a few minor problems found while working toward removing
        unneeded calls to updateStyle"
        https://bugs.webkit.org/show_bug.cgi?id=176279
        http://trac.webkit.org/changeset/221603

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

        Allow retrieving Cache Storage records for a given URL only
        https://bugs.webkit.org/show_bug.cgi?id=176202

        Reviewed by Alex Christensen.

        No observable change of behavior.

        Adding a URL parameter to CacheStorageConnection::retrieveRecords.
        If given URL is null, all records will be retrieved, which is useful for the keys method.
        Other operations only need records that share the same URL (modulo query string and frag id).

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::matchAll):
        (WebCore::Cache::keys):
        (WebCore::Cache::retrieveRecords):
        (WebCore::Cache::queryCache):
        * Modules/cache/Cache.h:
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::retrieveRecords):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::doRetrieveRecords):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::doRetrieveRecords):
        * Modules/cache/WorkerCacheStorageConnection.h:
        * platform/URL.h:

2017-09-05  Tim Horton  <timothy_horton@apple.com>

        Remove some unused bits of code and resources
        https://bugs.webkit.org/show_bug.cgi?id=176275

        Reviewed by Dan Bernstein.

        No new tests, just removing things.

        * Resources/textAreaResizeCorner.tiff: Removed.
        * Resources/missingImage.tiff: Removed.
        These files have PNG versions that include more resolutions.

        * Resources/hScrollControl_left.png: Removed.
        * Resources/hScrollControl_middle.png: Removed.
        * Resources/hScrollControl_right.png: Removed.
        * Resources/vScrollControl_bottom.png: Removed.
        * Resources/vScrollControl_middle.png: Removed.
        * Resources/vScrollControl_top.png: Removed.
        * Resources/decrementArrow.tiff: Removed.
        * Resources/incrementArrow.tiff: Removed.
        * Resources/markedLeft.png: Removed.
        * Resources/markedMiddle.png: Removed.
        * Resources/markedRight.png: Removed.
        These were added in r161638 as part of the iOS upstreaming, but were
        unused even then.

        * Resources/inputSpeech.tiff: Removed.
        The feature this image was for was removed in r172259; the PNG version
        of this image was removed in r172384.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/FileSystemIOS.h: Removed.
        * platform/ios/FileSystemIOS.mm: Removed.
        Remove FileSystemIOS; one function is unused, the other is not at all
        iOS-specific and can be folded into FileSystemCocoa.

        * platform/FileSystem.h:
        * platform/cocoa/FileSystemCocoa.mm:
        (WebCore::createTemporaryDirectory):
        Move this in from FileSystemIOS.

        * platform/PlatformEvent.cpp: Removed.
        Remove this unused file.
        
        * platform/ios/QuickLook.mm:
        * platform/ios/WebItemProviderPasteboard.mm:
        Include FileSystem instead of FileSystemIOS.

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

        Use TilesBacking for iframes when async frame scrolling is enabled
        https://bugs.webkit.org/show_bug.cgi?id=173644

        Reviewed by Simon Fraser.

        This patch adds creation of TilesBacking for non-main frames when async frame scrolling is
        enabled. RenderLayerBacking::m_isMainFrameLayerWithTiledBacking is also renamed to reflect
        that tiled backing is not exclusive to the main frame. More adjustments might be needed for
        non-main frames and will be handled in follow-up commits.

        Test: compositing/tiling/tiled-drawing-async-frame-scrolling.html

        * rendering/RenderLayerBacking.cpp: Rename m_isMainFrameLayerWithTiledBacking
        * rendering/RenderLayerBacking.h: Rename isMainFrameLayerWithTiledBacking and
        m_isMainFrameLayerWithTiledBacking.
        * rendering/RenderLayerCompositor.cpp: Use isFrameLayerWithTiledBacking

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

        HTMLMediaElement: attach any existing EME CDMInstance in mediaEngineWasUpdated()
        https://bugs.webkit.org/show_bug.cgi?id=176354

        Reviewed by Xabier Rodriguez-Calvar.

        It's common for MediaKeys to be set on an HTMLMediaElement object before
        any resource is loaded for that element, meaning no underlying MediaPlayer
        exists at that point. In order to not stall the pipeline when encrypted
        content is finally loaded, the CDMInstance object of the current MediaKeys
        set on this element should be attached in mediaEngineWasUpdated() that's
        called whenever the underlying MediaPlayerPrivate object is replaced.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaEngineWasUpdated):

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

        [EME] HTMLMediaElement: setMediaKeys() should attach CDMInstance from the arriving MediaKeys
        https://bugs.webkit.org/show_bug.cgi?id=176352

        Reviewed by Xabier Rodriguez-Calvar.

        In HTMLMediaElement::setMediaKeys(), use the incoming MediaKeys object
        to retrieve the CDMInstance that is then attached to the current
        MediaPlayer, if any.

        Covered by existing W3C tests that focus on multi-key use cases.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMediaKeys):

2017-09-05  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [Win] Fix the wincairo build after r221558 and r221583
        https://bugs.webkit.org/show_bug.cgi?id=176353

        Reviewed by Yusuke Suzuki.

        * platform/win/FileSystemWin.cpp:
        (WebCore::isSymbolicLink): Fix a "missing type specifier" error
        (WebCore::findDataToFileMetadata): Fix a narrowing convertion error

2017-09-04  Chris Dumez  <cdumez@apple.com>

        Use StringView more in DOMFileSystem code
        https://bugs.webkit.org/show_bug.cgi?id=176347

        Reviewed by Darin Adler.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::resolveRelativeVirtualPath):
        (WebCore::DOMFileSystem::evaluatePath):
        * platform/FileSystem.h:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::pathByAppendingComponents):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::pathByAppendingComponents):
        * platform/win/FileSystemWin.cpp:
        (WebCore::pathByAppendingComponents):

2017-09-04  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange): Disable the logger when private browsing
        mode is enabled.
        (WebCore::Document::logger const):
        * dom/Document.h:

        Convert debug-only logging to configurable release logging.
        * html/HTMLMediaElement.cpp:
        (PAL::LogArgument<WebCore::URL>::toString): Logger template for URL that returns the url as a
        String when only when the LOG_DISABLED build flag is not defined. Returns "[url]" when it is.
        * html/HTMLMediaElement.h:

2017-09-04  Sam Weinig  <sam@webkit.org>

        [Canvas] Move non-standard functionality/aliases back to CanvasRenderingContext2D.idl
        https://bugs.webkit.org/show_bug.cgi?id=176340

        Reviewed by Darin Adler.

        In r221598 (https://webkit.org/b/176276), the CanvasRenderingContext2D was split out into
        separate interfaces to the match the spec and prepare for implementing OffscreenCanvas. While
        doing that, related non-standard functionality and aliases were moved as well. In retrospect,
        that doesn't really makes sense, as we don't want to add these legacy properties to any new
        interfaces that happen to implement/use the broken out interfaces. Since they are specific
        to CanvasRenderingContext2D, let's move them back.

        * html/canvas/CanvasCompositing.idl:
        * html/canvas/CanvasDrawImage.idl:
        * html/canvas/CanvasFillStrokeStyles.idl:
        * html/canvas/CanvasImageData.idl:
        * html/canvas/CanvasImageSmoothing.idl:
        * html/canvas/CanvasPathDrawingStyles.idl:
        * html/canvas/CanvasShadowStyles.idl:
        * html/canvas/CanvasRenderingContext2D.idl:

            Move non-standard operation and attributes back to CanvasRenderingContext2D.idl.

            * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::stringForCanvasFillRule): Deleted.
            
            Remove unused function.

        (WebCore::CanvasRenderingContext2D::setAlpha): Deleted.
        (WebCore::CanvasRenderingContext2D::setCompositeOperation): Deleted.

            Removed. Instead, the IDL uses [ImplementedAs] to forward to the 
            underlying setGlobalAlpha/setGlobalCompositeOperation. This reduces
            code and makes it clear they are strict aliases.

2017-09-03  Darin Adler  <darin@apple.com>

        Fix a few minor problems found while working toward removing unneeded calls to updateStyle
        https://bugs.webkit.org/show_bug.cgi?id=176279

        Reviewed by Antti Koivisto.

        * dom/Document.cpp:
        (WebCore::Document::updateTitleElement): Fix the algorithm so that an SVG title won't
        ever become the title when the document element is not an SVG element. We had this wrong
        before but we were passing the test because SVGTitleElement::insertedInto had a bug that
        hid the problem.
        (WebCore::Document::titleElementAdded): Pass a reference instead of a pointer.
        (WebCore::Document::titleElementRemoved): Pass a reference instead of nullptr since we
        want to know which element is being removed.

        * dom/Document.h: Update the argument name and type for updateTitleElement.

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedInto): Call titleElementAdded unconditionally.
        The checks to see if the title element is connected to the document and not in the
        shadow tree are now handled by the Document class.
        (WebCore::HTMLTitleElement::removedFrom): Same for titleElementRemoved.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::applySize): Removed incorrect caching of FontCascade
        objects; these need to be created each time we draw.
        (WebCore::MockRealtimeVideoSource::drawText): Create all the fonts here. Since this is
        a mock for testing, there is no real performance concern with doing this.
        * platform/mock/MockRealtimeVideoSource.h: Removed the FontCascade data members.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::updateLayoutIgnoringPendingStylesheetsIncludingSubframes): Added. Used below
        to update layout more thoroughly.
        (WebCore::externalRepresentation): Update layout of all descendant frames, not just
        the top level frame.

        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto): Removed bogus firstChild check, bogus isSVGDocument
        check, and unneeded isConnected check and call titleElementAdded unconditionally. The checks
        are now handled by the Document class.
        (WebCore::SVGTitleElement::removedFrom): Same for titleElementRemoved.

        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText const): Added missing updateLayoutIgnorePendingStylesheets,
        since dumping the layer tree without first doing a layout will yield stale results.
        (WebCore::Internals::layerIDForElement): Added missing updateLayoutIgnorePendingStylesheets,
        since using a renderer to check if a layer exists without first doing a layout will yield stale results.
        (WebCore::Internals::setElementUsesDisplayListDrawing): Ditto.
        (WebCore::Internals::setElementTracksDisplayListReplay): Ditto.
        (WebCore::Internals::displayListForElement): Ditto.
        (WebCore::Internals::replayDisplayListForElement): Ditto.
        (WebCore::Internals::isSelectPopupVisible): Added missing updateLayoutIgnorePendingStylesheets,
        since working with the RenderMenuList without first doing a layout will yield stale results.
        Also removed unneeded strict handling of null renderer, instead just returning false.
        (WebCore::Internals::isPluginUnavailabilityIndicatorObscured): Removed unnneeded check of
        renderer class, since the HTMLPlugInElement::isReplacementObscured already handles that correctly.
        (WebCore::Internals::pageOverlayLayerTreeAsText const): Use updateLayoutIgnorePendingStylesheets
        instead of the normal updateLayout for consistency with the behavior of the other functions in this
        file, and because we need a real answer here.
        (WebCore::Internals::scrollSnapOffsets): Ditto. Also rearranged the code so the renderer check is
        done after updating the renderer tree.

2017-09-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove OS(SOLARIS) support
        https://bugs.webkit.org/show_bug.cgi?id=176341

        Reviewed by Sam Weinig.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        * dom/make_names.pl:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platform):
        * page/Page.h:

2017-09-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fixing unused constant for initial buffer size
        https://bugs.webkit.org/show_bug.cgi?id=176310

        Follow-up patch after r221583. Pointed by darin@.

        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2017-09-04  Sam Weinig  <sam@webkit.org>

        [Canvas] Split CanvasRenderingContext2D.idl into separate IDLs to match current HTML spec
        https://bugs.webkit.org/show_bug.cgi?id=176276

        Reviewed by Dean Jackson.

        - Splits CanvasRenderingContext2D.idl out into:
            CanvasState
            CanvasTransform
            CanvasCompositing
            CanvasImageSmoothing
            CanvasFillStrokeStyles
            CanvasShadowStyles
            CanvasFilters
            CanvasRect
            CanvasDrawPath
            CanvasUserInterface
            CanvasText
            CanvasDrawImage
            CanvasImageData
            CanvasPathDrawingStyles
            CanvasTextDrawingStyles
        - Renames CanvasWindingRule enum to CanvasFillRule, and moves it to its own file
          so it can be reused by multiple IDLs.
        - Renames DOMPath to Path2D, which is what it is supposed to be called, and doesn't
          conflict with any WebCore names.
        - Converts lineCap, lineJoin, textAlign, textBaseline, direction to use enums, rather
          than DOMStrings, allowing us to remove a bunch of custom parsing.
        - Non-standard canvas API was grouped with related functionality in the broken out
          IDLs and clearly marked as non-standard.
        - Comments were added for places where we break with the standard, mostly around use
          of float where we should be using double.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        
            Add new files.
        
        * bindings/js/CallTracerTypes.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):

            Update for renames, and use new convertEnumerationToString to
            serialize enumerations.
        
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumerationImplementationContent):
        (GenerateEnumerationHeaderContent):

            Split string conversion out of convertEnumerationToJS, and into
            its own function, convertEnumerationToString, to allow serialization
            to string outside of the bindings context, in this case, for the 
            InspectorCanvas.

        (GenerateParametersCheck):
        
            Improve error message to make it clear which operation has the issue
            in order to make debugging easier.

        * html/ImageData.idl:
        
            Re-order constructors to match specification, and add FIXME for incorrect
            default argument.
        
        * html/TextMetrics.idl:
            
            Add spec'd exposure and spec comments, as well a FIXME to convert the
            unrestricted float parameters should be doubles.

        * html/canvas/CanvasCompositing.idl: Added.
        * html/canvas/CanvasDirection.h: Added.
        * html/canvas/CanvasDirection.idl: Added.
        * html/canvas/CanvasDrawImage.idl: Added.
        * html/canvas/CanvasDrawPath.idl: Added.
        * html/canvas/CanvasFillRule.h: Added.
        * html/canvas/CanvasFillRule.idl: Added.
        * html/canvas/CanvasFillStrokeStyles.idl: Added.
        * html/canvas/CanvasFilters.idl: Added.
        * html/canvas/CanvasImageData.idl: Added.
        * html/canvas/CanvasImageSmoothing.idl: Added.
        * html/canvas/CanvasLineCap.h: Added.
        * html/canvas/CanvasLineCap.idl: Added.
        * html/canvas/CanvasLineJoin.h: Added.
        * html/canvas/CanvasLineJoin.idl: Added.
        * html/canvas/CanvasPathDrawingStyles.idl: Added.
        * html/canvas/CanvasRect.idl: Added.
        * html/canvas/CanvasShadowStyles.idl: Added.
        * html/canvas/CanvasState.idl: Added.
        * html/canvas/CanvasText.idl: Added.
        * html/canvas/CanvasTextAlign.h: Added.
        * html/canvas/CanvasTextAlign.idl: Added.
        * html/canvas/CanvasTextBaseline.h: Added.
        * html/canvas/CanvasTextBaseline.idl: Added.
        * html/canvas/CanvasTextDrawingStyles.idl: Added.
        * html/canvas/CanvasTransform.idl: Added.
        * html/canvas/CanvasUserInterface.idl: Added.
        * html/canvas/ImageSmoothingQuality.h: Added.
        * html/canvas/ImageSmoothingQuality.idl: Added.

            Move CanvasRenderingContext2D.idl content into separate files to
            match the specification.

        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPath.idl:
        * html/canvas/CanvasPattern.idl:

            Add exposure and FIXMEs on changes need to match the spec.

        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:

            Switch to using enums for lineCap, lineJoin, textAlign, textBaseline, and direction.
            Rather than using the parsing / stringifying functions from GraphicsTypes, add simple
            switch based to/from converters to convert to/from the canvas type to the platform
            type. Also update for rename of DOMPath -> Path2D and WindingRule -> CanvasFillRule.

            Unfortunately, not all custom parsing could be removed. To support the legacy functions
            setLineCap and setLineJoin, which take Strings, two simply parse paths had to be
            brought back. They can't use the enums, because the rules for enums as parameters
            is stricter that what was implemented in the custom code (e.g. the bindings would
            have thrown for strings not in the enum set).

        * html/canvas/CanvasRenderingContext2D.idl:

            Move most of the functions into the new files, which are then 'implemented' by
            this.

        * html/canvas/DOMPath.cpp: Removed.
        * html/canvas/DOMPath.h: Removed.
        * html/canvas/DOMPath.idl: Removed.
        * html/canvas/Path2D.cpp: Copied from Source/WebCore/html/canvas/DOMPath.cpp.
        * html/canvas/Path2D.h: Copied from Source/WebCore/html/canvas/DOMPath.h.
        * html/canvas/Path2D.idl: Copied from Source/WebCore/html/canvas/DOMPath.idl.

            Rename DOMPath to Path2D to match the spec..

        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::parseLineCap): Deleted.
        (WebCore::lineCapName): Deleted.
        (WebCore::parseLineJoin): Deleted.
        (WebCore::lineJoinName): Deleted.
        (WebCore::textAlignName): Deleted.
        (WebCore::parseTextAlign): Deleted.
        (WebCore::textBaselineName): Deleted.
        (WebCore::parseTextBaseline): Deleted.
        * platform/graphics/GraphicsTypes.h:

            Remove now unused parsing / stringifying functions.

        * testing/Internals.cpp:

            Remove unused #include.

        * 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 to add convertEnumerationToString.

2017-09-03  Darin Adler  <darin@apple.com>

        Follow up FrameView::updateLayoutAndStyleIfNeededRecursive changes with related improvements
        https://bugs.webkit.org/show_bug.cgi?id=176277

        Reviewed by Antti Koivisto.

        * page/FrameView.cpp:
        (WebCore::FrameView::needsStyleRecalcOrLayout): Deleted. This function was only used
        by an assertion inside updateLayoutAndStyleIfNeededRecursive, and thus there is no reason
        for it to be in the header file, or for it to be a public member function.
        (WebCore::appendRenderedChildren): Deleted. This function was only used inside
        updateLayoutAndStyleIfNeededRecursive, and it is now packaged in an even better way
        for efficient use inside that function.
        (WebCore::FrameView::renderedChildFrameViews): Deleted. This function was only used
        inside needsStyleRecalcOrLayout, and it's now packaged in a better way inside that function.
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive): Created a new lambda called
        nextRendereredDescendant that packages up the process of repeatedly iterating this view
        and all of its descendants in an easy-to-use way. Replaces both of the functions above.
        Rewrote to use it; it made the logic clear enough that it was good to get rid of the
        updateOneFrame lambda, too. Added two separate functions, one that checks for needed
        style recalculation and a separate one that checked for needed layout. Using those,
        replaced the old single assertion with two separate assertions.

        * page/FrameView.h: Removed needsStyleRecalcOrLayout, renderedChildFrameViews, and
        FrameViewList.

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

        [iOS DnD] Refactor drag and drop logic in WKContentView in preparation for supporting multiple drag items in a drag session
        https://bugs.webkit.org/show_bug.cgi?id=176264
        <rdar://problem/31144674>

        Reviewed by Darin Adler.

        Makes some small adjustments to WebItemProviderPasteboard. Rather than just -setItemProviders: on the
        WebItemProviderPasteboard when initiating a drag, also stage the WebItemProviderRegistrationList that will be
        used to generate an item provider. While it would be cleaner to avoid directly setting item providers so we
        don't overwrite item providers on the WebItemProviderPasteboard when adding items to an existing drag session,
        this isn't possible without breaking binary compability with older UIKit versions.

        Importantly, WKContentView will now ignore any item providers that have been set on the
        WebItemProviderPasteboard when initiating a drag or adding items to an existing drag session, and instead only
        consider the staged registration list when generating item providers for dragging. This only has the drawback of
        generating an unnecessary item provider, but otherwise maintains backwards compatibility while allowing us to
        provide WebKit2 support for multiple items per drag session.

        Tests: DataInteractionTests.DragEventClientCoordinatesBasic
               DataInteractionTests.DragEventClientCoordinatesWithScrollOffset
               DataInteractionTests.DragEventPageCoordinatesBasic
               DataInteractionTests.DragEventPageCoordinatesWithScrollOffset

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

        Changed to only stage registration info on the item provider pasteboard, if possible. This has no effect on the
        copy/paste codepath, since it uses a UIPasteboard.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:

        Rename _registrationInfoLists to _stagedRegistrationInfoList, and change it from an array of registration info
        lists to a single registration info list. This could be updated in the future to be an array of registration
        lists, but currently, it serves no purpose and makes coordination with DragItem info more difficult. This would
        need to support multiple registration lists if we are to add a way to begin a drag containing multiple items in
        vanilla web content, such as dragging multiple selections.

        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard setItemProviders:]):
        (-[WebItemProviderPasteboard stageRegistrationList:]):

        Sets the staged item provider registration list.

        (-[WebItemProviderPasteboard takeRegistrationList]):

        Removes the staged item provider registration list from the WebItemProviderPasteboard and also returns it.

        (-[WebItemProviderPasteboard registrationInfoAtIndex:]): Deleted.
        (-[WebItemProviderPasteboard setRegistrationInfoLists:]): Deleted.

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

        Unreviewed, rolling out r221494 and r221500.
        https://bugs.webkit.org/show_bug.cgi?id=176258

        This caused the windows build to fail. (Requested by mlewis13
        on #webkit).

        Reverted changesets:

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221494

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221500

2017-09-04  Sam Weinig  <sam@webkit.org>

        [WebIDL] Simplify EnabledBySettings generation
        https://bugs.webkit.org/show_bug.cgi?id=176312

        Reviewed by Darin Adler.

        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsRuntimeCheck):
        (OperationShouldBeOnInstance):
        (GeneratePropertiesHashTable):
        (GenerateRuntimeEnableConditionalString):
        (GenerateImplementation):
        (GenerateAttributeGetterBodyDefinition):

            - Simplify the [EnabledBySetting] code generation by merging it with the other
            runtime checks (Exposed, EnabledAtRuntime, EnabledForWorld, and SecureContext).

            - Switches to using WebCoreBuiltinNames for identifiers, rather than relying
            on the appropriate identifiers being available on JavaScriptCore's CommonIdentifiers
            which was an unnecessary layering violation. There are still problems with this
            as we continue to be inconsistent  about which identifiers deserve to be in 
            WebCoreBuiltinNames, and which ones can be created each time and there is no
            automation of WebCoreBuiltinNames from the IDLs.

            - Enforce at code generation time that [EnabledBySetting] can only be used
            on interfaces that are uniquely exposed to the window environment. This is a
            condition we should find a way to remove (e.g. propagating necessary settings 
            to an object the ScriptExecutionContext owns), but for now, Settings is a main
            thread only object.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::put):
        (WebCore::addCrossOriginWindowPropertyNames):
        (WebCore::addCrossOriginWindowOwnPropertyNames):

            Switch to using WebCoreBuiltinNames for WebCore specific identifiers.

        * bindings/js/WebCoreBuiltinNames.h:

            Add WebCore specific identifiers from JavaScriptCore's CommonIdentifiers
            as well as some new ones need by the [EnableBySetting] unification.

        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp: Added.
        * bindings/scripts/test/JS/JSTestEnabledBySetting.h: Added.
        * bindings/scripts/test/TestEnabledBySetting.idl: Added.

            Add new test for [EnabledBySetting].

        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:

            Remove use of [EnabledBySetting] from TestObj, as it is no longer
            valid to use [EnabledBySetting] on interfaces that are no uniquely
            exposed to the window environment.

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove "malloc" and "free" use
        https://bugs.webkit.org/show_bug.cgi?id=176310

        Reviewed by Darin Adler.

        Use MallocPtr<>, fastMalloc/fastFree, or Vector instead of manual call of system malloc/free.
        In this patch, we apply the above change if we can easily find the pair of malloc/free.
        And we do not touch plugin directory since the external code could call free() onto the
        fastMalloc-ed memory.

        Also, we still use malloc if the system adopts the allocated memory. Later, the system
        will deallocate it by calling the system "free".

        * platform/audio/mac/FFTFrameMac.cpp:
        (WebCore::FFTFrame::fftSetupForSize):
        (WebCore::FFTFrame::cleanup):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::getLinkedFonts):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLByTruncatingOneCharacterBeforeComponent):
        (WebCore::dataForURLComponentType):
        (WebCore::URLByRemovingComponentAndSubsequentCharacter):
        (WebCore::createStringWithEscapedUnsafeCharacters):
        (WebCore::userVisibleString):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCFHTML):

2017-09-03  Chris Dumez  <cdumez@apple.com>

        Use StringView in DOMFileSystem::evaluatePath()
        https://bugs.webkit.org/show_bug.cgi?id=176324

        Reviewed by Darin Adler.

        Use StringView in DOMFileSystem::evaluatePath() for performance.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::resolveRelativeVirtualPath):
        (WebCore::DOMFileSystem::evaluatePath):
        * Modules/entriesapi/DOMFileSystem.h:

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        String#utf8() allocates new CString
        https://bugs.webkit.org/show_bug.cgi?id=176302

        Reviewed by Sam Weinig.

        Several places uses String#utf8() like an accessor. In reality, it allocates new CString per call.
        It is very costly. Furthermore, some places uses this incorrectly. For example,
        `std::vector<char>(srtpAuth.utf8().data(), srtpAuth.utf8().data() + srtpAuth.utf8().length());`
        is incorrect since each time strpAuth.utf8() allocates different CString.

        This patch calls utf8() first and use it.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::startClosingHandshake):
        * platform/wpe/PlatformPasteboardWPE.cpp:
        (WebCore::PlatformPasteboard::write):

2017-09-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        [SOUP] Use fastMalloced SoupBuffer in ResourcehandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=176311

        Reviewed by Michael Catanzaro.

        Use fastMalloced memory instead of g_malloc for SoupBuffer.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::ensureReadBuffer):

2017-09-03  Chris Dumez  <cdumez@apple.com>

        Have getFileMetadata() return a std::optional<FileMetadata>
        https://bugs.webkit.org/show_bug.cgi?id=176293

        Reviewed by Darin Adler.

        Have getFileMetadata() return a std::optional<FileMetadata> instead of
        using an out parameter for the metadata.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::listDirectoryWithMetadata):
        (WebCore::validatePathIsExpectedType):
        (WebCore::DOMFileSystem::getEntry):
        * html/FileListCreator.cpp:
        (WebCore::appendDirectoryFiles):
        * platform/FileSystem.cpp:
        (WebCore::fileIsDirectory):
        * platform/FileSystem.h:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::getFileMetadata):
        * platform/network/BlobDataFileReference.cpp:
        (WebCore::BlobDataFileReference::startTrackingModifications):
        * platform/network/mac/BlobDataFileReferenceMac.mm:
        (WebCore::BlobDataFileReference::generateReplacementFile):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileMetadata):
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileMetadata):

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

        Remove CanvasProxy
        https://bugs.webkit.org/show_bug.cgi?id=176288

        Reviewed by Yusuke Suzuki.

        CanvasProxy does not appear to be in any current HTML spec
        and was disabled and unimplemented in our tree. Time to 
        get rid of it.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasProxy.cpp: Removed.
        * html/canvas/CanvasProxy.h: Removed.
        * html/canvas/CanvasProxy.idl: Removed.

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

        DOMMatrix/DOMMatrixReadOnly validation is incorrect for NaN values
        https://bugs.webkit.org/show_bug.cgi?id=176287

        Reviewed by Chris Dumez.

        * css/DOMMatrixReadOnly.cpp:
        (WebCore::sameValueZero): Added.
        (WebCore::DOMMatrixReadOnly::validateAndFixup):

            Switch from using standard != to added sameValueZero helper
            which implements https://tc39.github.io/ecma262/#sec-samevaluezero

2017-09-02  Chris Dumez  <cdumez@apple.com>

        Implement FileSystemFileEntry.file()
        https://bugs.webkit.org/show_bug.cgi?id=176166
        <rdar://problem/34187756>

        Reviewed by Sam Weinig.

        Implement FileSystemFileEntry.file():
        - https://wicg.github.io/entries-api/#dom-filesystemfileentry-file

        Test: editing/pasteboard/datatransfer-items-drop-fileEntry-file.html

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::validatePathIsExpectedType):
        (WebCore::DOMFileSystem::listDirectory):
        (WebCore::DOMFileSystem::getParent):
        (WebCore::DOMFileSystem::getFile):
        * Modules/entriesapi/DOMFileSystem.h:
        * Modules/entriesapi/FileSystemFileEntry.cpp:
        (WebCore::FileSystemFileEntry::file):

2017-09-02  Andy Estes  <aestes@apple.com>

        [CA] Upstream QuartzCore-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176270

        Reviewed by Tim Horton.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::enumerateRectsBeingDrawn):
        * platform/graphics/cocoa/WebCoreCALayerExtras.h:
        * platform/graphics/cocoa/WebCoreCALayerExtras.mm:
        (+[CALayer _web_renderLayerWithContextID:]):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2017-09-02  Emilio Cobos Álvarez  <emilio@crisal.io>

        Wrong getComputedStyle result for pseudo-elements in display: none subtrees.
        https://bugs.webkit.org/show_bug.cgi?id=176259

        Reviewed by Antti Koivisto.

        Before this patch, we were wrongly returning the parent style when there wasn't
        a cached pseudo style.

        With this, the only remaining failures in getComputedStyle-pseudo is a
        serialisation bug for the "content" property, and the display: contents test,
        which is because we don't support pseudo-elements of display: contents elements
        yet.

        Tests: imported/w3c/web-platform-tests/cssom/getComputedStyle-pseudo.html

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::resolvePseudoElementStyle):
        (WebCore::Element::computedStyle):
        * dom/Element.h:

2017-09-02  Chris Dumez  <cdumez@apple.com>

        Implement FileSystemDirectoryEntry.getDirectory()
        https://bugs.webkit.org/show_bug.cgi?id=176168
        <rdar://problem/34187787>

        Reviewed by Darin Adler.

        Implement FileSystemDirectoryEntry.getDirectory() as per:
        - https://wicg.github.io/entries-api/#dom-filesystemdirectoryentry-getdirectory

        Test: editing/pasteboard/datatransfer-items-drop-getDirectory.html

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::isValidVirtualPath):
        (WebCore::resolveRelativeVirtualPath):
        (WebCore::DOMFileSystem::getEntry):
        * Modules/entriesapi/DOMFileSystem.h:
        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::getEntry):
        (WebCore::FileSystemDirectoryEntry::getFile):
        (WebCore::FileSystemDirectoryEntry::getDirectory):
        * Modules/entriesapi/FileSystemDirectoryEntry.h:

2017-09-02  Joseph Pecoraro  <pecoraro@apple.com>

        Performance / PerformanceObserver leaks seen on bots
        https://bugs.webkit.org/show_bug.cgi?id=176269

        Reviewed by Darin Adler.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeAllEventListeners):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::removeAllEventListeners):
        Also use this opportunity to break up the reference cycle
        between PerformanceObservers and the Performance object.

        * page/Performance.h:
        * page/Performance.cpp:
        (WebCore::Performance::removeAllObservers):
        Disassociate and clear observers.

        * page/PerformanceObserver.h:
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::disassociate):
        Clear the back-reference to the Performance object to
        break the cycle.

2017-09-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Wayland] Use fast malloc to allocate backing store cairo surfaces data
        https://bugs.webkit.org/show_bug.cgi?id=176226

        Reviewed by Michael Catanzaro.

        It reduces the memory consumption and improves the performance. Also, since performance is better we don't need
        to keep the scroll surface allocated all the time, we can create it on demand and keep it allocated only while
        scrolling too fast.

        * platform/graphics/cairo/BackingStoreBackendCairoImpl.cpp:
        (WebCore::createCairoImageSurfaceWithFastMalloc): Helper to create a cairo image surface using fast malloc.
        (WebCore::BackingStoreBackendCairoImpl::BackingStoreBackendCairoImpl): Create the main surface, but no the
        scroll one. Initialize the hysteresis activity to discard the scroll surface after scrolling.
        (WebCore::BackingStoreBackendCairoImpl::scroll): Create the scroll surface only if it's nullptr, and notify the
        hysteresis activity.
        * platform/graphics/cairo/BackingStoreBackendCairoImpl.h:

2017-09-01  Sam Weinig  <sam@webkit.org>

        DOMMatrix and DOMMatrixReadOnly should be available in workers
        https://bugs.webkit.org/show_bug.cgi?id=176255

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:

            Add GlobalPerformance.idl to the project. It was missing.

        * bindings/scripts/CodeGeneratorJS.pm:
        (IsAlwaysExposedOnInterface):
        (NeedsRuntimeCheck):
        (GenerateRuntimeEnableConditionalStringForExposed):
        (GenerateRuntimeEnableConditionalString):

            Adds support for [Exposed] extended attributes on operations, attributes and
            constants. This allows an interface that is exposed to both windows and workers 
            (with [Exposed=(Window,Worker)]), to indicate that a specific property should
            only be be exposed somewhere, e.g only the window. This is need by DOMMatrixReadOnly's
            stringifier, which is only exposed in the window environment.

        * bindings/scripts/IDLParser.pm:
        (parseExtendedAttributeRest2):

            Fix bug where array extended attributes, like those found in Exposed expressions
            where being converter to scalars.

        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl:

            Add tests and update results. Some results are just improved
            includes.

        * css/DOMMatrix.cpp:
        * css/DOMMatrix.h:
        * css/DOMMatrix.idl:
        * css/DOMMatrixReadOnly.cpp:
        * css/DOMMatrixReadOnly.h:
        * css/DOMMatrixReadOnly.idl:
            
            Expose DOMMatrix and DOMMatrixReadOnly to workers and update the constructors
            to match the current spec, throwing if the argument is a string, and the context
            is not the window / document context. Also did some refactoring to avoid allocating
            the DOMMatrix or DOMMatrixReadOnly until after all the exceptional cases were handled.

2017-09-01  Chris Dumez  <cdumez@apple.com>

        Implement FileSystemDirectoryEntry.getFile()
        https://bugs.webkit.org/show_bug.cgi?id=176167
        <rdar://problem/34187775>

        Reviewed by Andreas Kling.

        Implement FileSystemDirectoryEntry.getFile():
        - https://wicg.github.io/entries-api/#dom-filesystemdirectoryentry-getfile

        Test: editing/pasteboard/datatransfer-items-drop-getFile.html

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::isValidPathNameCharacter):
        (WebCore::isValidPathSegment):
        (WebCore::isValidRelativeVirtualPath):
        (WebCore::isValidAbsoluteVirtualPath):
        (WebCore::isValidVirtualPath):
        Implement various path validation functions as per:
        - https://wicg.github.io/entries-api/#names-paths

        (WebCore::resolveRelativeVirtualPath):
        - Use StringView for second parameter for efficiency. Had to keep
          a String for the first parameter because I need the split to
          return a Vector.
        - If the input path is absolute, call recursively with '/' as
          base path so that the virtual path gets sanitized (i.e. '..'
          and '.' in the absolute URL get resolved).

        (WebCore::DOMFileSystem::listDirectory):
        Use String instead of auto. It is not much longer and is clearer.

        (WebCore::validatePathIsDirectory):
        (WebCore::DOMFileSystem::getParent):
        Move logic to validate that the path is a directory from getParent() to a
        separate function. This only makes sure the ScriptExecutionContext is only
        ref'd / deref'd on the main thread.

        (WebCore::validatePathIsFile):
        Logic for validating that a path is a file, used by getFile().

        (WebCore::DOMFileSystem::getFile):
        Implement getFile() as per:
        - https://wicg.github.io/entries-api/#dom-filesystemdirectoryentry-getfile

        * Modules/entriesapi/DOMFileSystem.h:
        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::getFile):
        Add implementation of FileSystemDirectoryEntry::getFile() which merely calls
        DOMFileSystem::getFile().

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

        ASSERTION FAILED: taken.get() == &job in WebCore::ServiceWorkerContainer::jobDidFinish(WebCore::ServiceWorkerJob &).
        https://bugs.webkit.org/show_bug.cgi?id=176234

        Rubberstamped by Tim Horton, reluctantly.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobDidFinish): It's valid for the job to be missing after navigations, which is
          why this was hitting downstream tests.

2017-09-01  Youenn Fablet  <youenn@apple.com>

        Do not Reject CacheStorage promises when updating the persistent filesystem data fails
        https://bugs.webkit.org/show_bug.cgi?id=176241

        Reviewed by Alex Christensen.

        Open/Remove caches may succeed in updating the memory representation but the write-to-disk operation may fail.
        In that case, the corresponding promise is now resolved since the web page can still proceeed.

        There is no way to test that currently as this would require a write disk failure to be triggered.

        * Modules/cache/CacheStorage.cpp:
        (WebCore::logConsolePersistencyError):
        (WebCore::CacheStorage::open):
        (WebCore::CacheStorage::remove):
        * Modules/cache/DOMCacheEngine.h:
        (WebCore::DOMCacheEngine::CacheIdentifierOperationResult::encode const):
        (WebCore::DOMCacheEngine::CacheIdentifierOperationResult::decode):

2017-09-01  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Add support for consuming a Request ReadableStream body
        https://bugs.webkit.org/show_bug.cgi?id=176182

        Reviewed by Alex Christensen.

        Tests: http/wpt/fetch/request-stream-empty.html
               http/wpt/fetch/request-stream-error.html

        Adding a ReadableStreamSink which allows to pipe all ReadableStream data back to C++ code.
        This sink only takes BufferSource as the only user is Fetch which has this restriction.
        This sink is tied to the readableStreamPipeTo builtin internal function that reads all data from the ReadableStream
        and send it to the sink.

        Adding a ReadableStreamToSharedBufferSink specialization to get the data as a SharedBuffer.

        Use that class in FetchBodyConsumer to get the data back from the ReadableStream and transform it according
        the desired body type (text, JSON, ArrayBuffer).

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consume):
        (WebCore::FetchBody::loadingSucceeded):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::resolveWithTypeAndData):
        (WebCore::FetchBodyConsumer::clean):
        (WebCore::FetchBodyConsumer::resolveWithData):
        (WebCore::FetchBodyConsumer::resolve):
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::finishConsumingStream):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamPipeTo):
        * Modules/streams/ReadableStreamSink.cpp: Added.
        (WebCore::ReadableStreamToSharedBufferSink::ReadableStreamToSharedBufferSink):
        (WebCore::ReadableStreamToSharedBufferSink::pipeFrom):
        (WebCore::ReadableStreamToSharedBufferSink::enqueue):
        (WebCore::ReadableStreamToSharedBufferSink::close):
        (WebCore::ReadableStreamToSharedBufferSink::error):
        * Modules/streams/ReadableStreamSink.h: Added.
        * Modules/streams/ReadableStreamSink.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::pipeTo):
        * bindings/js/ReadableStream.h:

2017-09-01  Emilio Cobos Álvarez  <emilio@crisal.io>

        Wrong getComputedStyle behavior for pseudo-elements for layout-dependent properties.
        https://bugs.webkit.org/show_bug.cgi?id=175936

        Reviewed by Antti Koivisto.

        Before this patch we may wrongly end up using the wrong renderer to resolve
        this.

        Tests: imported/w3c/web-platform-tests/cssom/getComputedStyle-pseudo.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::styledElement const):
        (WebCore::ComputedStyleExtractor::styledRenderer const):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:

2017-09-01  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error, 'Cache' is not declared.
        https://bugs.webkit.org/show_bug.cgi?id=176062

        Reviewed by Youenn Fablet.

        Rename Cache to DOMCache.

        No new tests, covered by existing tests. 

        * DerivedSources.make:
        * Modules/cache/Cache.cpp: Removed.
        * Modules/cache/Cache.h: Removed.
        * Modules/cache/Cache.idl: Removed.
        * Modules/cache/CacheStorage.cpp:
        (WebCore::doSequentialMatch):
        (WebCore::startSequentialMatch):
        (WebCore::copyCaches):
        (WebCore::CacheStorage::match):
        (WebCore::CacheStorage::retrieveCaches):
        (WebCore::CacheStorage::open):
        * Modules/cache/CacheStorage.h:
        * Modules/cache/DOMCache.cpp: Copied from Source/WebCore/Modules/cache/Cache.cpp.
        (WebCore::DOMCache::DOMCache):
        (WebCore::DOMCache::~DOMCache):
        (WebCore::DOMCache::match):
        (WebCore::DOMCache::doMatch):
        (WebCore::DOMCache::matchAll):
        (WebCore::DOMCache::add):
        (WebCore::DOMCache::requestFromInfo):
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::put):
        (WebCore::DOMCache::remove):
        (WebCore::DOMCache::keys):
        (WebCore::DOMCache::retrieveRecords):
        (WebCore::DOMCache::queryCache):
        (WebCore::DOMCache::queryCacheWithTargetStorage):
        (WebCore::DOMCache::batchDeleteOperation):
        (WebCore::DOMCache::batchPutOperation):
        (WebCore::DOMCache::updateRecords):
        (WebCore::DOMCache::stop):
        (WebCore::DOMCache::activeDOMObjectName const):
        (WebCore::DOMCache::canSuspendForDocumentSuspension const):
        (WebCore::Cache::Cache): Deleted.
        (WebCore::Cache::~Cache): Deleted.
        (WebCore::Cache::match): Deleted.
        (WebCore::Cache::doMatch): Deleted.
        (WebCore::Cache::matchAll): Deleted.
        (WebCore::Cache::add): Deleted.
        (WebCore::Cache::requestFromInfo): Deleted.
        (WebCore::Cache::addAll): Deleted.
        (WebCore::Cache::put): Deleted.
        (WebCore::Cache::remove): Deleted.
        (WebCore::Cache::keys): Deleted.
        (WebCore::Cache::retrieveRecords): Deleted.
        (WebCore::Cache::queryCache): Deleted.
        (WebCore::Cache::queryCacheWithTargetStorage): Deleted.
        (WebCore::Cache::batchDeleteOperation): Deleted.
        (WebCore::Cache::batchPutOperation): Deleted.
        (WebCore::Cache::updateRecords): Deleted.
        (WebCore::Cache::stop): Deleted.
        (WebCore::Cache::activeDOMObjectName const): Deleted.
        (WebCore::Cache::canSuspendForDocumentSuspension const): Deleted.
        * Modules/cache/DOMCache.h: Copied from Source/WebCore/Modules/cache/Cache.h.
        * Modules/cache/DOMCache.idl: Copied from Source/WebCore/Modules/cache/Cache.idl.
        * WebCore.xcodeproj/project.pbxproj:

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

        Move ServiceWorkerJob from FetchLoader to ThreadableLoader.
        https://bugs.webkit.org/show_bug.cgi?id=176231

        Reviewed by Youenn Fablet.

        No new tests (No behavior change).

        * WebCore.xcodeproj/project.pbxproj:

        Re-indent these headers. Yuck!
        * loader/ThreadableLoader.h:
        (WebCore::ThreadableLoader::ref):
        (WebCore::ThreadableLoader::deref):
        (WebCore::ThreadableLoader::ThreadableLoader):
        (WebCore::ThreadableLoader::~ThreadableLoader):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didSendData):
        (WebCore::ThreadableLoaderClient::didReceiveResponse):
        (WebCore::ThreadableLoaderClient::didReceiveData):
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        (WebCore::ThreadableLoaderClient::didFail):
        (WebCore::ThreadableLoaderClient::didFinishTiming):
        (WebCore::ThreadableLoaderClient::ThreadableLoaderClient):
        (WebCore::ThreadableLoaderClient::~ThreadableLoaderClient):

        Move from FetchLoaderClient to ThreadableLoaderClient:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        (WebCore::ServiceWorkerJob::didReceiveData):
        (WebCore::ServiceWorkerJob::didFinishLoading):
        (WebCore::ServiceWorkerJob::didFail):
        (WebCore::ServiceWorkerJob::didSucceed): Deleted.
        * workers/service/ServiceWorkerJob.h:

        * workers/service/server/SWClientConnection.cpp: Add a now-required include.

2017-09-01  Eric Carlson  <eric.carlson@apple.com>

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange): Disable the logger when private browsing
        mode is enabled.
        (WebCore::Document::logger const):
        * dom/Document.h:

        Convert debug-only logging to configurable release logging.
        * html/HTMLMediaElement.cpp:
        (PAL::LogArgument<WebCore::URL>::toString): Logger template for URL that returns the url as a
        String when only when the LOG_DISABLED build flag is not defined. Returns "[url]" when it is.
        * html/HTMLMediaElement.h:

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

        transformCanLikelyUseFastPath() can read off the end of a string
        https://bugs.webkit.org/show_bug.cgi?id=176232
        rdar://problem/33851237

        Reviewed by Tim Horton.
        
        Code added in r220382 could read one byte past the end of the string when looking for the 'z'
        of a rotateZ() function. The code was actually incorrect, testing for the 'z at i+6 after
        already incrementing i by 6. This patch makes the code correctly detect rotateZ().
        
        Also, rotate functions at the end of a string could be ignored because kShortestValidTransformStringLength
        was too long, so set it to the length of "rotate(0)", the shortest transform function that we currently
        fast-parse.

        There's an implicit assumption in this code that chars is not indexed past i+kShortestValidTransformStringLength.
        If the 'translate' path is taken, i is incremented by 9 (==kShortestValidTransformStringLength), but that's
        OK because WTF::find() doesn't index into chars if i >= length.

        Test: fast/css/transform-fast-paths.html

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::transformCanLikelyUseFastPath):

2017-09-01  Andy Estes  <aestes@apple.com>

        [CG] Upstream CoreGraphics-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176200

        Reviewed by Tim Horton.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::subsamplingLevelForScaleFactor):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::applyShadowOffsetWorkaroundIfNeeded):
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern const):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::focusRingColor):
        (WebCore::drawFocusRingAtTime):
        (WebCore::drawFocusRing):
        (WebCore::drawFocusRingToContext):
        (WebCore::drawFocusRingToContextAtTime):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/PasteboardMac.mm:
        (WebCore::flipImageSpec):
        (WebCore::setDragImageImpl):
        (WebCore::Pasteboard::setDragImage):
        * platform/mac/PlatformEventFactoryMac.mm:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::linenBackgroundColor):
        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime):
        (WebCore::drawCellFocusRing):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/mac/WebWindowAnimation.mm:
        (flipRect):
        (mainWindowServerConnectionID):
        (setScaledFrameForWindow):
        (-[WebWindowScaleAnimation setCurrentProgress:]):
        (-[WebWindowFadeAnimation setCurrentProgress:]):

2017-09-01  Youenn Fablet  <youenn@apple.com>

        Reject promises in case of internal CacheStorage engine errors.
        https://bugs.webkit.org/show_bug.cgi?id=176194

        Reviewed by Alex Christensen.

        No new tests as this covers error cases that should not happen in regular cases.
        Replacing lambdas that take no parameters to lambdas taking an optional error.
        Reject promise if an error is found.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::doMatch):
        (WebCore::Cache::matchAll):
        (WebCore::Cache::keys):
        (WebCore::Cache::retrieveRecords):
        (WebCore::Cache::queryCache):
        * Modules/cache/Cache.h:
        * Modules/cache/CacheStorage.cpp:
        (WebCore::CacheStorage::match):
        (WebCore::CacheStorage::has):
        (WebCore::CacheStorage::retrieveCaches):
        (WebCore::CacheStorage::open):
        (WebCore::CacheStorage::remove):
        (WebCore::CacheStorage::keys):
        * Modules/cache/CacheStorage.h:

2017-09-01  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE build fix after r221439.

        * html/canvas/WebGL2RenderingContext.cpp: Add the HeapInlines.h
        header include in order to properly inline a Heap::vm() call.

2017-09-01  Chris Dumez  <cdumez@apple.com>

        Implement FileSystemEntry.getParent()
        https://bugs.webkit.org/show_bug.cgi?id=176165
        <rdar://problem/34187743>

        Reviewed by Andreas Kling.

        Implement FileSystemEntry.getParent():
        - https://wicg.github.io/entries-api/#dom-filesystementry-getparent

        Tests: editing/pasteboard/datatransfer-items-drop-getParent-root.html
               editing/pasteboard/datatransfer-items-drop-getParent.html
               editing/pasteboard/datatransfer-items-drop-getParent2.html

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::toFileSystemEntries):
        Take a ScriptExecutionContext now that FileSystemEntry is an ActiveDOMObject.

        (WebCore::isAbsoluteVirtualPath):
        Add utility function to determine if a virtual path is absolute:
        - https://wicg.github.io/entries-api/#absolute-path

        (WebCore::DOMFileSystem::root):
        Take a ScriptExecutionContext now that FileSystemEntry is an ActiveDOMObject.

        (WebCore::DOMFileSystem::fileAsEntry):
        Take a ScriptExecutionContext now that FileSystemEntry is an ActiveDOMObject.

        (WebCore::resolveRelativePath):
        Add implementation for:
        - https://wicg.github.io/entries-api/#resolve-a-relative-path

        (WebCore::DOMFileSystem::listDirectory):
        Take a ScriptExecutionContext now that FileSystemEntry is an ActiveDOMObject.

        (WebCore::DOMFileSystem::getParent):
        Add implementation of getParent() as per:
        - https://wicg.github.io/entries-api/#dom-filesystementry-getparent

        * Modules/entriesapi/DOMFileSystem.h:
        (WebCore::DOMFileSystem::createEntryForFile):
        * Modules/entriesapi/DOMFileSystem.idl:
        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::FileSystemDirectoryEntry):
        * Modules/entriesapi/FileSystemDirectoryEntry.h:
        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        (WebCore::FileSystemDirectoryReader::readEntries):
        Take a ScriptExecutionContext now that FileSystemEntry is an ActiveDOMObject.

        * Modules/entriesapi/FileSystemEntry.cpp:
        (WebCore::FileSystemEntry::FileSystemEntry):
        (WebCore::FileSystemEntry::activeDOMObjectName const):
        (WebCore::FileSystemEntry::canSuspendForDocumentSuspension const):
        (WebCore::FileSystemEntry::getParent):
        * Modules/entriesapi/FileSystemEntry.h:
        * Modules/entriesapi/FileSystemEntry.idl:
        - Add implementation of FileSystemEntry.getParent() which relies on
          DOMFileSystem::getParent()
        - Make FileSystemEntry an ActiveDOMObject as getParent() is an asynchronous
          operation which causes delayed JS execution.

        * Modules/entriesapi/FileSystemFileEntry.cpp:
        (WebCore::FileSystemFileEntry::FileSystemFileEntry):
        * Modules/entriesapi/FileSystemFileEntry.h:
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::getAsEntry const):
        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        Take a ScriptExecutionContext now that FileSystemEntry is an ActiveDOMObject.

2017-09-01  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Ensure RenderStyle and SameSizeAsRenderStyle have the same size
        https://bugs.webkit.org/show_bug.cgi?id=176210

        Reviewed by Daniel Bates.

        SameSizeAsRenderStyle::m_nonInheritedFlags requires a 64 bit alignment,
        which currently produces an extra 32 bit padding with 32 bit build.

        * rendering/style/RenderStyle.cpp:
        Make m_nonInheritedFlags 32 bit aligned and restore the size check.

2017-09-01  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error, 'Cache' is not declared.
        https://bugs.webkit.org/show_bug.cgi?id=176062

        Reviewed by Youenn Fablet.

        Rename DOMCache to DOMCacheEngine.

        No new tests, covered by existing tests. 

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::addAll):
        (WebCore::Cache::put):
        (WebCore::queryCacheMatch):
        (WebCore::Cache::batchDeleteOperation):
        (WebCore::toConnectionRecord):
        (WebCore::Cache::batchPutOperation):
        * Modules/cache/Cache.h:
        * Modules/cache/CacheStorage.cpp:
        (WebCore::CacheStorage::open):
        (WebCore::CacheStorage::remove):
        * Modules/cache/CacheStorageConnection.cpp:
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::clearMemoryRepresentation):
        (WebCore::CacheStorageConnection::openCompleted):
        (WebCore::CacheStorageConnection::removeCompleted):
        (WebCore::CacheStorageConnection::doOpen):
        (WebCore::CacheStorageConnection::doRemove):
        (WebCore::CacheStorageConnection::doBatchDeleteOperation):
        (WebCore::CacheStorageConnection::doBatchPutOperation):
        * Modules/cache/DOMCache.cpp: Removed.
        * Modules/cache/DOMCache.h: Removed.
        * Modules/cache/DOMCacheEngine.cpp: Copied from Source/WebCore/Modules/cache/DOMCache.cpp.
        (WebCore::DOMCacheEngine::isolatedResponseBody):
        (WebCore::DOMCacheEngine::copyResponseBody):
        (WebCore::DOMCache::errorToException): Deleted.
        (WebCore::DOMCache::queryCacheMatch): Deleted.
        (WebCore::DOMCache::isolatedResponseBody): Deleted.
        (WebCore::DOMCache::copyResponseBody): Deleted.
        (WebCore::DOMCache::Record::copy const): Deleted.
        * Modules/cache/DOMCacheEngine.h: Copied from Source/WebCore/Modules/cache/DOMCache.h.
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        * Modules/cache/WorkerCacheStorageConnection.h:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation):

2017-08-31  Andy Estes  <aestes@apple.com>

        [Mac] Upstream AppKit-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176175

        Reviewed by Brady Eidson.

        * Configurations/WebCore.xcconfig: Added -ObjC to OTHER_LDFLAGS so that Objective-C classes
        in PAL are exported by WebCore even if WebCore doesn't use them.
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::getWheelEventDeltas):
        (WebCore::keyCharForEvent):
        (WebCore::PlatformWheelEventBuilder::PlatformWheelEventBuilder):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2017-08-31  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r221422
        https://bugs.webkit.org/show_bug.cgi?id=174924

        * platform/text/win/LocaleWin.cpp:
        (WebCore::LocaleWin::getLocaleInfoString):
        StringVector is now the type that can be adopted by String::adopt.

2017-08-31  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Apple Windows build following <https://trac.webkit.org/changeset/221459>
        (https://bugs.webkit.org/show_bug.cgi?id=176171)

        Temporarily weaken the size check for RenderStyle from a strict equality to <=.

        * rendering/style/RenderStyle.cpp:

2017-08-31  Daniel Bates  <dabates@apple.com>

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

        Explicitly cast PseudoIds to unsigned before computing a difference between two PseudoIds.

        * rendering/style/RenderStyle.h:

2017-08-31  Alex Christensen  <achristensen@webkit.org>

        Add ObjC SPI corresponding to WKPageLoaderClient's webGLLoadPolicy and resolveWebGLLoadPolicy
        https://bugs.webkit.org/show_bug.cgi?id=175779
        <rdar://problem/22367975>

        Reviewed by Tim Horton.

        Covered by new API tests.

        * loader/FrameLoaderClient.h:

2017-08-31  Andreas Kling  <akling@apple.com>

        Element focus appearance update should be either immediate or a post-layout task
        https://bugs.webkit.org/show_bug.cgi?id=176193

        Reviewed by Antti Koivisto.

        This change removes an old mechanism for avoiding element focus appearance updates
        while we might be in the middle of attaching a renderer.

        Focus appearance updates depend on a clean layout, since they want to be able to
        scroll the element into the visible viewport if needed.
        We now simply do the updates either immediately after layout in Element::focus(),
        or as a post-layout callback when needed for HTMLInputElement::didAttachRenderers().

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateFocusAppearanceSoon): Deleted.
        (WebCore::Document::cancelFocusAppearanceUpdate): Deleted.
        (WebCore::Document::updateFocusAppearanceTimerFired): Deleted.
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::focus):
        (WebCore::Element::blur):
        (WebCore::Element::clearStyleDerivedDataBeforeDetachingRenderer):
        (WebCore::Element::updateFocusAppearanceAfterAttachIfNeeded): Deleted.
        (WebCore::Element::cancelFocusAppearanceUpdate): Deleted.
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::needsFocusAppearanceUpdateSoonAfterAttach const): Deleted.
        (WebCore::ElementRareData::setNeedsFocusAppearanceUpdateSoonAfterAttach): Deleted.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didAttachRenderers):

2017-08-31  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make USE_CF conditional within Windows
        https://bugs.webkit.org/show_bug.cgi?id=176173

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * PlatformWin.cmake:
        * WebCorePrefix.h:
        * testing/js/WebCoreTestSupportPrefix.h:

2017-08-31  Sam Weinig  <sam@webkit.org>

        Implement DOMMatrix2DInit for setTransform()/addPath()
        https://bugs.webkit.org/show_bug.cgi?id=176048

        Reviewed by Simon Fraser.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:

            Add new files.

        * bindings/js/CallTracerTypes.h:
        * inspector/InspectorCanvas.cpp:
        
            Swap out DOMMatrixInit for DOMMatrix2DInit in canvas tracing infrastructure.

        * css/DOMMatrix2DInit.h: Added.
        * css/DOMMatrix2DInit.idl: Added.
        * css/DOMMatrixInit.h:
        * css/DOMMatrixInit.idl:
        Split DOMMatrixInit in two, with the 2D bits going into DOMMatrix2DInit.
        
        * css/DOMMatrixReadOnly.cpp:
        * css/DOMMatrixReadOnly.h:
        
            Add a validateAndFixup overload for DOMMatrix2DInit.
        
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:

            Swap out DOMMatrixInit for DOMMatrix2DInit in setTransform. This
            should have no observable difference, since we ignored the 3D prior.

        * html/canvas/DOMPath.cpp:
        * html/canvas/DOMPath.h:
        * html/canvas/DOMPath.idl:

            Update DOMPath (actually called Path2D) to take an optional DOMMatrix2DInit
            rather than an SVGMatrix. Passing an SVGMatrix is still valid, as it conforms
            as a DOMMatrix2DInit dictionary (having the necessary properties), so the
            risk of compatibility issues is minimal.

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

        Add (entirely incorrect) fetching of ServiceWorker scripts.
        https://bugs.webkit.org/show_bug.cgi?id=176179

        Reviewed by Andy Estes.

        No new tests (Covered by changes to existing tests).

        When the Storage process is running the "Update" algorithm and a ServiceWorker script file needs to be fetched, this patch:
          - Messages back to the WebContent process that started the register/update job
          - Executes a FetchLoad in that script context for the script
          - Sends the results back to the Storage process

        We don't do anything with the results yet.

        Soon.

        * WebCore.xcodeproj/project.pbxproj:

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:

        * workers/service/ServiceWorkerFetchResult.h: Copied from Source/WebCore/workers/service/server/SWClientConnection.h.
        (WebCore::ServiceWorkerFetchResult::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::startScriptFetch):
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        (WebCore::ServiceWorkerJob::didReceiveData):
        (WebCore::ServiceWorkerJob::didSucceed):
        (WebCore::ServiceWorkerJob::didFail):
        * workers/service/ServiceWorkerJob.h:

        * workers/service/ServiceWorkerJobClient.h:

        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::finishedFetchingScript):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        * workers/service/server/SWClientConnection.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::finishFetchingScriptInServer):
        (WebCore::SWServer::startScriptFetch):
        (WebCore::SWServer::scriptFetchFinished):
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::scriptFetchFinished):
        (WebCore::SWServerRegistration::runUpdateJob):
        (WebCore::SWServerRegistration::startScriptFetchFromMainThread):
        (WebCore::SWServerRegistration::startScriptFetchForCurrentJob):
        * workers/service/server/SWServerRegistration.h:

2017-08-31  Daniel Bates  <dabates@apple.com>

        Make RenderStyle's non-inherited flags more human friendly
        https://bugs.webkit.org/show_bug.cgi?id=176171

        Reviewed by Antti Koivisto.

        Revert r166465 as we never followed through and made the CSS JIT update
        RenderStyle's non-inherited flags directly.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::hashForTextAutosizing const):
        (WebCore::RenderStyle::equalForTextAutosizing const):
        (WebCore::RenderStyle::changeRequiresLayout const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::styleType const):
        (WebCore::RenderStyle::setStyleType):
        (WebCore::RenderStyle::setHasViewportUnits):
        (WebCore::RenderStyle::hasViewportUnits const):
        (WebCore::RenderStyle::affectedByHover const):
        (WebCore::RenderStyle::affectedByActive const):
        (WebCore::RenderStyle::affectedByDrag const):
        (WebCore::RenderStyle::setAffectedByHover):
        (WebCore::RenderStyle::setAffectedByActive):
        (WebCore::RenderStyle::setAffectedByDrag):
        (WebCore::RenderStyle::isFloating const):
        (WebCore::RenderStyle::display const):
        (WebCore::RenderStyle::position const):
        (WebCore::RenderStyle::floating const):
        (WebCore::RenderStyle::overflowX const):
        (WebCore::RenderStyle::overflowY const):
        (WebCore::RenderStyle::verticalAlign const):
        (WebCore::RenderStyle::unicodeBidi const):
        (WebCore::RenderStyle::clear const):
        (WebCore::RenderStyle::tableLayout const):
        (WebCore::RenderStyle::hasExplicitlySetDirection const):
        (WebCore::RenderStyle::isLink const):
        (WebCore::RenderStyle::setDisplay):
        (WebCore::RenderStyle::setOriginalDisplay):
        (WebCore::RenderStyle::setPosition):
        (WebCore::RenderStyle::setFloating):
        (WebCore::RenderStyle::setOverflowX):
        (WebCore::RenderStyle::setOverflowY):
        (WebCore::RenderStyle::setVerticalAlign):
        (WebCore::RenderStyle::setUnicodeBidi):
        (WebCore::RenderStyle::setClear):
        (WebCore::RenderStyle::setTableLayout):
        (WebCore::RenderStyle::setHasExplicitlySetDirection):
        (WebCore::RenderStyle::setIsLink):
        (WebCore::RenderStyle::hasExplicitlySetWritingMode const):
        (WebCore::RenderStyle::setHasExplicitlySetWritingMode):
        (WebCore::RenderStyle::hasExplicitlySetTextAlign const):
        (WebCore::RenderStyle::setHasExplicitlySetTextAlign):
        (WebCore::RenderStyle::unique const):
        (WebCore::RenderStyle::setUnique):
        (WebCore::RenderStyle::emptyState const):
        (WebCore::RenderStyle::setEmptyState):
        (WebCore::RenderStyle::firstChildState const):
        (WebCore::RenderStyle::setFirstChildState):
        (WebCore::RenderStyle::lastChildState const):
        (WebCore::RenderStyle::setLastChildState):
        (WebCore::RenderStyle::setHasExplicitlyInheritedProperties):
        (WebCore::RenderStyle::hasExplicitlyInheritedProperties const):
        (WebCore::RenderStyle::inheritUnicodeBidiFrom):
        (WebCore::RenderStyle::NonInheritedFlags::operator!= const):
        (WebCore::RenderStyle::NonInheritedFlags::hasAnyPublicPseudoStyles const):
        (WebCore::RenderStyle::originalDisplay const):
        (WebCore::RenderStyle::NonInheritedFlags::operator== const):
        (WebCore::RenderStyle::NonInheritedFlags::copyNonInheritedFrom):
        (WebCore::RenderStyle::NonInheritedFlags::hasPseudoStyle const):
        (WebCore::RenderStyle::NonInheritedFlags::setHasPseudoStyle):
        (WebCore::RenderStyle::NonInheritedFlags::overflowX const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setOverflowX): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::overflowY const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setOverflowY): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::clear const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setClear): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::effectiveDisplay const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setEffectiveDisplay): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::position const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setPosition): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::originalDisplay const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setOriginalDisplay): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::unicodeBidi const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setUnicodeBidi): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::hasViewportUnits const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setHasViewportUnits): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::verticalAlign const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setVerticalAlign): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::hasExplicitlyInheritedProperties const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setHasExplicitlyInheritedProperties): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::isFloating const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::floating const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setFloating): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::tableLayout const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setTableLayout): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::styleType const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setStyleType): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::isUnique const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setIsUnique): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::emptyState const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setEmptyState): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::firstChildState const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setFirstChildState): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::lastChildState const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setLastChildState): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::affectedByHover const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setAffectedByHover): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::affectedByActive const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setAffectedByActive): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::affectedByDrag const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setAffectedByDrag): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::isLink const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setIsLink): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::hasExplicitlySetDirection const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setHasExplicitlySetDirection): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::hasExplicitlySetWritingMode const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setHasExplicitlySetWritingMode): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::hasExplicitlySetTextAlign const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setHasExplicitlySetTextAlign): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::flagsMemoryOffset): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::flagIsaffectedByActive): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::flagIsaffectedByHover): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::flagPseudoStyle): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setFirstChildStateFlags): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setLastChildStateFlags): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::flagIsUnique): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::flagFirstChildState): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::flagLastChildState): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::NonInheritedFlags): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::setHasPseudoStyles): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::updateBoolean): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::getBoolean const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::updateValue): Deleted.
        (WebCore::RenderStyle::InheritedFlags::operator== const): Deleted.
        (WebCore::RenderStyle::NonInheritedFlags::getValue const): Deleted.
        (WebCore::adjustForAbsoluteZoom): Deleted.
        (WebCore::adjustFloatForAbsoluteZoom): Deleted.
        (WebCore::adjustLayoutUnitForAbsoluteZoom): Deleted.
        (WebCore::collapsedBorderStyle): Deleted.
        (WebCore::RenderStyle::hasBackground const): Deleted.
        (WebCore::RenderStyle::autoWrap): Deleted.
        (WebCore::RenderStyle::preserveNewline): Deleted.
        (WebCore::RenderStyle::collapseWhiteSpace): Deleted.
        (WebCore::RenderStyle::isCollapsibleWhiteSpace const): Deleted.
        (WebCore::RenderStyle::breakOnlyAfterWhiteSpace const): Deleted.
        (WebCore::RenderStyle::breakWords const): Deleted.
        (WebCore::RenderStyle::hasInlineColumnAxis const): Deleted.
        (WebCore::RenderStyle::imageOrientation const): Deleted.
        (WebCore::RenderStyle::setLogicalWidth): Deleted.
        (WebCore::RenderStyle::setLogicalHeight): Deleted.
        (WebCore::RenderStyle::setBorderRadius): Deleted.
        (WebCore::RenderStyle::setZoom): Deleted.
        (WebCore::RenderStyle::setEffectiveZoom): Deleted.
        (WebCore::RenderStyle::setTextOrientation): Deleted.
        (WebCore::RenderStyle::adjustBackgroundLayers): Deleted.
        (WebCore::RenderStyle::adjustMaskLayers): Deleted.
        (WebCore::RenderStyle::clearAnimations): Deleted.
        (WebCore::RenderStyle::clearTransitions): Deleted.
        (WebCore::RenderStyle::setShapeOutside): Deleted.
        (WebCore::RenderStyle::setShapeImageThreshold): Deleted.
        (WebCore::RenderStyle::setClipPath): Deleted.
        (WebCore::RenderStyle::willChangeCreatesStackingContext const): Deleted.
        (WebCore::RenderStyle::isDisplayRegionType const): Deleted.
        (WebCore::RenderStyle::setWritingMode): Deleted.
        (WebCore::RenderStyle::getShadowInlineDirectionExtent const): Deleted.
        (WebCore::RenderStyle::getShadowBlockDirectionExtent const): Deleted.
        (WebCore::RenderStyle::isDisplayReplacedType): Deleted.
        (WebCore::RenderStyle::isDisplayInlineType): Deleted.
        (WebCore::RenderStyle::isDisplayFlexibleBox): Deleted.
        (WebCore::RenderStyle::isDisplayGridBox): Deleted.
        (WebCore::RenderStyle::isDisplayFlexibleOrGridBox): Deleted.
        (WebCore::RenderStyle::hasAnyPublicPseudoStyles const): Deleted.
        (WebCore::RenderStyle::hasPseudoStyle const): Deleted.
        (WebCore::RenderStyle::setHasPseudoStyle): Deleted.
        (WebCore::RenderStyle::setHasPseudoStyles): Deleted.
        (WebCore::RenderStyle::setBoxReflect): Deleted.
        (WebCore::pseudoElementRendererIsNeeded): Deleted.

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

        Remove newBlockInsideInlineModel and anonymous inline block
        https://bugs.webkit.org/show_bug.cgi?id=176181

        Reviewed by Zalan Bujtas.

        Anonymous inline block exists to support newBlockInsideInlineModel which was planned as the replacement for continuations.
        It has never been enabled and it is time to remove it.

        * page/Settings.in:
        * rendering/InlineElementBox.cpp:
        (WebCore::InlineElementBox::paint):
        (WebCore::InlineElementBox::nodeAtPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::anonymousInlineBlock const): Deleted.
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::hasAnonymousInlineBlock const): Deleted.
        (WebCore::InlineFlowBox::setHasAnonymousInlineBlock): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight const):
        (WebCore::RenderBlock::baselinePosition const):
        (WebCore::RenderBlock::renderName const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::childrenPreventSelfCollapsing const):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalInlinePositions):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::matchedEndLine):
        (WebCore::RenderBlockFlow::marginCollapseLinesFromStart): Deleted.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesLogicalWidthToFitContent const):
        (WebCore::RenderBox::createsNewFormattingContext const):
        (WebCore::RenderBox::avoidsFloats const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isAnonymousInlineBlock const): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock const):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::ascentAndDescentForBox const):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::handleReplaced):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        * rendering/line/LineBreaker.h:
        * rendering/line/LineLayoutState.h:
        (WebCore::LineLayoutState::marginInfo):
        (WebCore::LineLayoutState::prevFloatBottomFromAnonymousInlineBlock): Deleted.
        (WebCore::LineLayoutState::maxFloatBottomFromAnonymousInlineBlock): Deleted.

2017-08-31  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221445.

        This change broke Sierra Release builds.

        Reverted changeset:

        "Switch HTMLMediaElement to release logging"
        https://bugs.webkit.org/show_bug.cgi?id=176065
        http://trac.webkit.org/changeset/221445

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

        Update CacheStorage caches only if it is updated
        https://bugs.webkit.org/show_bug.cgi?id=176135

        Reviewed by Alex Christensen.

        Covered by existing tests.

        When retrieving caches from the engine, CacheStorage gets an update counter.
        When this counter is different from the previous received one, CacheStorage will update its cache list.
        Otherwise it will skip this update step.

        * Modules/cache/CacheStorage.cpp:
        (WebCore::CacheStorage::retrieveCaches):
        * Modules/cache/CacheStorage.h:
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::retrieveCaches):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::doRetrieveCaches):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::CacheInfos::isolatedCopy):
        * Modules/cache/DOMCache.h:
        (WebCore::DOMCache::CacheInfos::encode const):
        (WebCore::DOMCache::CacheInfos::decode):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        * Modules/cache/WorkerCacheStorageConnection.h:

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

        Switch HTMLMediaElement to release logging
        https://bugs.webkit.org/show_bug.cgi?id=176065

        Reviewed by Jer Noble.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange): Disable the logger when private browsing
        mode is enabled.
        (WebCore::Document::logger const):
        * dom/Document.h:

        Convert debug-only logging to configurable release logging.
        * html/HTMLMediaElement.cpp:
        (PAL::LogArgument<WebCore::URL>::toString): Logger template for URL that returns the url as a
        String when only when the LOG_DISABLED build flag is not defined. Returns "[url]" when it is.
        * html/HTMLMediaElement.h:

2017-08-31  David Quesada  <david_quesada@apple.com>

        WKNavigationDelegatePrivate client redirect SPI needs to be able to detect redirects scheduled before the document finishes loading
        https://bugs.webkit.org/show_bug.cgi?id=176128
        rdar://problem/34068476

        Reviewed by Brady Eidson.

        Removed FrameLoaderClient::dispatchDidPerformClientRedirect() since no client cares about this event anymore.
        Also removed FrameLoader::performClientRedirect() since it wouldn't do anything but call changeLocation().

        No new tests - no change in functionality.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/NavigationScheduler.cpp:

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

        getFileMetadata() does not work as expected for symbolic links
        https://bugs.webkit.org/show_bug.cgi?id=176143

        Reviewed by Andreas Kling.

        getFileMetadata() does not work as expected for symbolic links:
        On POSIX, getFileMetadata() always followed symlinks, which meant that FileMetadata.type could
        never be TypeSymbolicLink. On Windows, the function properly did not follow symlinks but failed to set
        FileMetadata.type to TypeSymbolicLink when the file was a symbolic link.

        This patch adds a new ShouldFollowSymbolicLinks parameter to getFileMetadata() so that
        the call site can decide the behavior it wants. If getFileMetadata() is called on a
        symbolic link with ShouldFollowSymbolicLinks::No as parameter, FileMetadata.type is now
        properly set to TypeSymbolicLink.

        No new tests, covered by new API test.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::listDirectoryWithMetadata):
        It is important we do not follow symlinks here since the code wants to discard them
        and does so by checking FileMetadata.type.

        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/File.cpp:
        (WebCore::File::isDirectory const):

        * html/FileListCreator.cpp:
        (WebCore::appendDirectoryFiles):
        (WebCore::FileListCreator::createFileList):
        It is important we do not follow symlinks here since the code wants to discard them
        and does so by checking FileMetadata.type.

        * platform/FileSystem.cpp:
        (WebCore::fileIsDirectory):
        * platform/FileSystem.h:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::getFileLStat):
        (WebCore::getFileMetadata):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileMetadata):
        (WebCore::createSymbolicLink):
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFinalPathName):
        (WebCore::getFileMetadata):
        (WebCore::createSymbolicLink):
        - Add new createSymbolicLink() function for testing purposes.
        - On Posix, call lstat() instead of stat if ShouldFollowSymbolicLinks::No.
        - On Windows, since FindFirstFileW() does not follow symlinks, resolve
          final path using GetFinalPathNameByHandleW() if ShouldFollowSymbolicLinks::Yes.
        - On Windows, properly set FileMetadata.type to TypeSymbolicLink if the file
          is a symbolic link.

2017-08-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r221226): [SOUP] libsoup-CRITICAL **: soup_cookies_to_cookie_header: assertion 'cookies != NULL' failed
        https://bugs.webkit.org/show_bug.cgi?id=176140

        Reviewed by Carlos Garcia Campos.

        This should fix unexpected stderr output in several tests.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookiesForSession):

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

        Add support for Request body stream cloning
        https://bugs.webkit.org/show_bug.cgi?id=176148

        Reviewed by Alex Christensen.

        Tests: http/wpt/fetch/request-clone.html
               http/wpt/fetch/request-consume-stream.html
               http/wpt/fetch/request-stream-disturbed-1.html
               http/wpt/fetch/request-stream-disturbed-2.html
               http/wpt/fetch/request-stream-disturbed-3.html

        Adding support for ReadableStream teeing for cloning fetch bodies.
        Adding support for pushing request body data to its ReadableStream.
        Renamed FetchResponseSource to FetchBodySource for that purpose.

        Tests extracting body from a ReadableStream through JS API pass.
        Tests extracting data stored in a ReadableStream to resolve fetch body promises are failing.
        There is no support yet, this will be added as a follow-up.

        * CMakeLists.txt:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consume):
        (WebCore::FetchBody::consumeAsStream):
        (WebCore::FetchBody::clone):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::cloneBody):
        (WebCore::FetchBodyOwner::loadBlob):
        (WebCore::FetchBodyOwner::readableStream):
        (WebCore::FetchBodyOwner::consumeBodyAsStream):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::feedStream):
        (WebCore::FetchBodyOwner::cancel):
        * Modules/fetch/FetchBodySource.cpp: Renamed from Source/WebCore/Modules/fetch/FetchResponseSource.cpp.
        * Modules/fetch/FetchBodySource.h: Renamed from Source/WebCore/Modules/fetch/FetchResponseSource.h.
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::consumeBodyAsStream):
        (WebCore::FetchResponse::createReadableStream):
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/FetchResponse.js:
        (getter.body):
        (clone):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::tee):
        * bindings/js/ReadableStream.h:
        * bindings/js/WebCoreBuiltinNames.h:

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

        Use WTF::crossThreadCopy() in more places
        https://bugs.webkit.org/show_bug.cgi?id=176169

        Reviewed by Andreas Kling.

        Use WTF::crossThreadCopy() in more places to make code more concise.

        * Modules/indexeddb/IDBValue.cpp:
        (WebCore::IDBValue::setAsIsolatedCopy):

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

        MSE-to-Canvas painting can become "stuck" during heavy workloads
        https://bugs.webkit.org/show_bug.cgi?id=176170

        Reviewed by Eric Carlson.

        During heavy workloads, the trigger from CMBufferQueue notifying us that we have dipped below
        the "low-water mark" of decoded (and decoding) frames will not fire. Instead of using a trigger
        (since it will not fire when the number of "frames being decoded" changes, just the number of
        decoded frames), just call maybeBecomeReadyForMoreMediaData() whenever the number of frames in
        the decoded queue decreases, or when the number of frames being decoded decreases.

        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaData):
        (WebCore::WebCoreDecompressionSession::enqueueSample):
        (WebCore::WebCoreDecompressionSession::decodeSample):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::getFirstVideoFrame):
        (WebCore::WebCoreDecompressionSession::automaticDequeue):
        (WebCore::WebCoreDecompressionSession::imageForTime):
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaDataCallback): Deleted.

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

        Move consume promise from FetchBody to FetchBodyConsumer
        https://bugs.webkit.org/show_bug.cgi?id=176121

        Reviewed by Alex Christensen.

        No change of behavior.

        FetchBodyConsumer should be made responsible for data consumption through promise getters and ReadableStream.
        This will allow making data consumption consistent for Request and Response.
        This patch is doing the first step.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeOnceLoadingFinished):
        (WebCore::FetchBody::consumeBlob):
        (WebCore::FetchBody::loadingFailed):
        (WebCore::FetchBody::loadingSucceeded):
        (WebCore::FetchBody::clone const):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::cleanConsumer):
        (WebCore::FetchBody::cleanConsumePromise): Deleted.
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::setConsumePromise):
        (WebCore::FetchBodyConsumer::loadingFailed):
        (WebCore::FetchBodyConsumer::loadingSucceeded):
        (WebCore::FetchBodyConsumer::clean):
        * Modules/fetch/FetchBodyConsumer.h:
        (WebCore::FetchBodyConsumer::clean): Deleted.
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::stop):

2017-08-22  Darin Adler  <darin@apple.com>

        REGRESSION (r220052): ASSERTION FAILED: !frame().isMainFrame() || !needsStyleRecalcOrLayout()  in WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive()
        https://bugs.webkit.org/show_bug.cgi?id=175270

        Reviewed by Simon Fraser and Antti Koivisto.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_styleRecalcTimer with a lamdba so it can work
        with a function that returns a bool and ignore the return value.
        (WebCore::Document::updateStyleIfNeeded): Added a boolean return value indicating if the
        function did any work or not.
        * dom/Document.h: Updated for above change.

        * page/FrameView.cpp:
        (WebCore::appendRenderedChildren): Added helper that will later replace the
        FrameView::renderedChildFrameViews function and is used below.
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive): Instead of always doing two
        passes of style and layout update do up to 25 passes, but stop as soon as a pass does
        no work. This is slightly more efficient in cases where no layout and style update is
        needed, and works correctly when a additional passes are needed, which is what happens
        in the test that was failing. We can eventually improve this further, but this resolves
        the immediate problem we are seeing in the test.

2017-08-22  Filip Pizlo  <fpizlo@apple.com>

        Strings need to be in some kind of gigacage
        https://bugs.webkit.org/show_bug.cgi?id=174924

        Reviewed by Oliver Hunt.

        No new tests because no new behavior.

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

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

        [JSC] Use reifying system for "name" property of builtin JSFunction
        https://bugs.webkit.org/show_bug.cgi?id=175260

        Reviewed by Saam Barati.

        Test: js/dom/builtin-getter-name.html

        Use @getter for JSBuiltin getters.

        * Modules/fetch/FetchResponse.js:
        (bodyUsed): Deleted.
        (body): Deleted.
        * Modules/streams/ReadableByteStreamController.js:
        (byobRequest): Deleted.
        (desiredSize): Deleted.
        * Modules/streams/ReadableStream.js:
        (locked): Deleted.
        * Modules/streams/ReadableStreamBYOBReader.js:
        (closed): Deleted.
        * Modules/streams/ReadableStreamBYOBRequest.js:
        (view): Deleted.
        * Modules/streams/ReadableStreamDefaultController.js:
        (desiredSize): Deleted.
        * Modules/streams/ReadableStreamDefaultReader.js:
        (closed): Deleted.
        * Modules/streams/WritableStream.js:
        (closed): Deleted.
        (ready): Deleted.
        (state): Deleted.
        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::finishCreation):

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

        Implement FileSystemDirectoryReader.readEntries()
        https://bugs.webkit.org/show_bug.cgi?id=176091
        <rdar://problem/34168015>

        Reviewed by Andreas Kling.

        Tests: editing/pasteboard/datatransfer-items-drop-directoryReader-error.html
               editing/pasteboard/datatransfer-items-drop-directoryReader-root.html
               editing/pasteboard/datatransfer-items-drop-directoryReader.html

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::ListedChild::isolatedCopy const):
        (WebCore::listDirectoryWithMetadata):
        (WebCore::toFileSystemEntries):
        (WebCore::DOMFileSystem::DOMFileSystem):
        (WebCore::DOMFileSystem::root):
        (WebCore::DOMFileSystem::fileAsEntry):
        (WebCore::DOMFileSystem::evaluatePath):
        (WebCore::DOMFileSystem::listDirectory):
        * Modules/entriesapi/DOMFileSystem.h:
        (WebCore::DOMFileSystem::createEntryForFile):
        * Modules/entriesapi/DOMFileSystem.idl:
        - Implement directory listing operation for supporting
          FileSystemDirectoryReader::readEntries().
        - Implement evaluatePath() operation as per:
          - https://wicg.github.io/entries-api/#evaluate-a-path
        - DOMFileSystem should no longer hold a strong reference to
          the root entry and FileSystemEntry now holds a strong
          reference to the DOMFileSystem and this would create a
          cycle.

        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::createReader):
        * Modules/entriesapi/FileSystemDirectoryEntry.h:
        * Modules/entriesapi/FileSystemDirectoryEntry.idl:
        Have createReader() take a ScriptExecutionContext, which is needed
        to construct a FileSystemDirectoryReader, now that FileSystemDirectoryReader
        is an ActiveDOMObject.

        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        (WebCore::FileSystemDirectoryReader::FileSystemDirectoryReader):
        (WebCore::FileSystemDirectoryReader::activeDOMObjectName const):
        (WebCore::FileSystemDirectoryReader::canSuspendForDocumentSuspension const):
        (WebCore::FileSystemDirectoryReader::readEntries):
        * Modules/entriesapi/FileSystemDirectoryReader.h:
        * Modules/entriesapi/FileSystemDirectoryReader.idl:
        Provide implementation for FileSystemDirectoryReader.readEntries() as per:
        - https://wicg.github.io/entries-api/#dom-filesystemdirectoryreader-readentries
        For the actual directory listing operation, we ask the DOMFileSystem, which is
        where all filesystem operations should live.
        Also made the FileSystemDirectoryReader an ActiveDOMObject to keep it and its
        wrapper alive while a file system operation is pending.

        * Modules/entriesapi/FileSystemEntry.cpp:
        (WebCore::FileSystemEntry::~FileSystemEntry):
        (WebCore::FileSystemEntry::filesystem const):
        * Modules/entriesapi/FileSystemEntry.h:
        Make FileSystemEntry keep a strong reference to its DOMFileSystem object.
        Previously, the DOMFileSystem was kept alive by the DataTransferItem but
        this was unsafe because FileSystemEntry may outlive the DataTransferItem.

        * dom/ActiveDOMObject.h:
        (WebCore::ActiveDOMObject::PendingActivity::PendingActivity):
        (WebCore::ActiveDOMObject::PendingActivity::~PendingActivity):
        (WebCore::ActiveDOMObject::makePendingActivity):
        Add PendingActivity / makePendingActivity() as a less error-prone
        replacement for setPendingActivity() / unsetPendingActivity().

        * dom/DOMException.cpp:
        (WebCore::DOMException::create):
        * dom/DOMException.h:
        Add factory to construct a DOMException from an Exception.

        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::getAsEntry const):
        * dom/DataTransferItem.h:

        * dom/Exception.h:
        (WebCore::Exception::isolatedCopy const):
        * dom/ExceptionOr.h:
        Make ExceptionOr<> / Exception work with CrossThreadCopier for convenience.

        * html/FileListCreator.cpp:
        (WebCore::FileListCreator::FileListCreator):
        Use crossThreadCopy() instead of longer form.

        * platform/FileSystem.h:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::pathByAppendingComponents):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::pathByAppendingComponents):
        * platform/win/FileSystemWin.cpp:
        (WebCore::pathByAppendingComponents):
        Add pathByAppendingComponents() utility function, which is similar to
        pathByAppendingComponent() but supports appending multiple components
        in an efficient fashion.

2017-08-30  Antti Koivisto  <antti@apple.com>

        Factor RenderMultiColumnFlowThread construction and destruction into RenderTreeUpdater helper
        https://bugs.webkit.org/show_bug.cgi?id=176130

        Reviewed by Zalan Bujtas.

        Move mutation code out of the render tree.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createMultiColumnFlowThread): Deleted.
        (WebCore::RenderBlockFlow::destroyMultiColumnFlowThread): Deleted.
        * rendering/RenderBlockFlow.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::commit):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        (WebCore::updateMultiColumnFlowThread): Deleted.
        * style/RenderTreeUpdater.h:
        * style/RenderTreeUpdaterMultiColumn.cpp: Added.
        (WebCore::RenderTreeUpdater::MultiColumn::update):
        (WebCore::RenderTreeUpdater::MultiColumn::createFlowThread):
        * style/RenderTreeUpdaterMultiColumn.h: Added.

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

        Previous elements with lang= can affect fonts selected for subsequent elements
        https://bugs.webkit.org/show_bug.cgi?id=175959
        <rdar://problem/33785853>

        Reviewed by Zalan Bujtas.

        FontCascade::update() was erroneously getting a cache hit. Elements with different lang=
        should be distinct inside the FontCascadeCache. We should be keying off of the locale
        string instead of the script enum because the string is the thing we actually pass to the
        platform APIs when performing font selection. This is a regression because we only
        recently (within the past few years) started making font selection sensitive to lang= at
        all.

        Test: fast/text/lang-font-selection-cache.html

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator== const):
        (WebCore::FontDescriptionKey::computeHash const):

2017-08-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221327.

        This change caused test262 failures.

        Reverted changeset:

        "[JSC] Use reifying system for "name" property of builtin
        JSFunction"
        https://bugs.webkit.org/show_bug.cgi?id=175260
        http://trac.webkit.org/changeset/221327

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

        [Cache API] Support cache names persistency
        https://bugs.webkit.org/show_bug.cgi?id=175995

        Reviewed by Alex Christensen.

        Test: http/tests/cache-storage/cache-persistency.https.html

        Adding method to clear the memory representation of the cache storage.
        Exposing it as internals so that layout tests can be used for testing persistency by combining clearing and private browsing mode.

        Introducing ReadDisk and WriteDisk errors that are used by CacheStorage::Engine.

        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::clearMemoryRepresentation):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::errorToException):
        * Modules/cache/DOMCache.h:
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-08-30  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221384.

        This patch caused multiple 32-bit JSC test failures.

        Reverted changeset:

        "Strings need to be in some kind of gigacage"
        https://bugs.webkit.org/show_bug.cgi?id=174924
        http://trac.webkit.org/changeset/221384

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

        Add "Identified" base class to replace a whole bunch of custom identifier generators.
        https://bugs.webkit.org/show_bug.cgi?id=176120

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        Instead of repeating the common pattern of a class with an integer identifier keeping its
        own static counter of the next identifier and generating it for each instance, this
        uses a common template in WTF that does that automatically.

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionPendingCloseFromClient):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::confirmDidCloseFromServer):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didFireVersionChangeEvent):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didFinishHandlingVersionChange):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::createVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::establishTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction):
        (WebCore::IDBServer::nextDatabaseConnectionIdentifier): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::identifier const): Deleted.

        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        (WebCore::ServiceWorkerJobData::isolatedCopy const):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):
        (WebCore::ServiceWorkerJobData::identifier const): Deleted.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::identifier const): Deleted.

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::SWServerRegistration):
        (WebCore::SWServerRegistration::data const):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::identifier const): Deleted.

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

        Remove FetchRequest::InternalRequest
        https://bugs.webkit.org/show_bug.cgi?id=176085

        Reviewed by Alex Christensen.

        No change of behavior.

        Removing InternalRequest struct and passing/defining fields directly.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::updateRecords):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::computeReferrer):
        (WebCore::buildOptions):
        (WebCore::methodCanHaveBody):
        (WebCore::FetchRequest::initializeOptions):
        (WebCore::FetchRequest::initializeWith):
        (WebCore::FetchRequest::setBody):
        (WebCore::FetchRequest::create):
        (WebCore::FetchRequest::referrer const):
        (WebCore::FetchRequest::urlString const):
        (WebCore::FetchRequest::resourceRequest const):
        (WebCore::FetchRequest::clone):
        (WebCore::setReferrer): Deleted.
        * Modules/fetch/FetchRequest.h:
        (WebCore::FetchRequest::FetchRequest):
        (WebCore::FetchRequest::cache const):
        (WebCore::FetchRequest::credentials const):
        (WebCore::FetchRequest::destination const):
        (WebCore::FetchRequest::mode const):
        (WebCore::FetchRequest::redirect const):
        (WebCore::FetchRequest::referrerPolicy const):
        (WebCore::FetchRequest::type const):

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

        Add support for FetchRequest.body
        https://bugs.webkit.org/show_bug.cgi?id=176066
        <rdar://problem/34148373>

        Reviewed by Sam Weinig and Alex Christensen.

        Follow-up to https://trac.webkit.org/r221329 as per post landing comments.
        Returning a RefPtr<ReadableStream> so as to to not specialize ReadableStream converter.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::readableStream):
        * Modules/fetch/FetchBodyOwner.h:
        * bindings/js/ReadableStream.h:
        (WebCore::toJS):
        (WebCore::JSConverter<IDLInterface<ReadableStream>>::convert): Deleted.

2017-08-30  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash in MathML layout test.
        https://bugs.webkit.org/show_bug.cgi?id=176109

        Reviewed by Brent Fulgham.

        Return early if no font can be found for code point.

        No new tests, covered by existing tests. 

        * rendering/mathml/MathOperator.cpp:
        (WebCore::MathOperator::paintVerticalGlyphAssembly):
        (WebCore::MathOperator::paintHorizontalGlyphAssembly):

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

        Implement all of "Register" right up until where the script is fetched.
        https://bugs.webkit.org/show_bug.cgi?id=176082

        Reviewed by Andy Estes.

        Test: http/tests/workers/service/basic-register-exceptions.html

        This patch implements every detail of the "Register" and "Update" algorithms right up to
        where we would actually fetch the service worker script file.

        It also includes miscellaneous refactoring and cleanup along the way.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsPotentiallyTrustworthy): Expose in the header for other files to use.
        * page/SecurityOrigin.h:

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration): Add some more exception cases from the spec.
        (WebCore::ServiceWorkerContainer::scheduleJob): Use the correct job identifier.
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        * workers/service/ServiceWorkerContainer.h:

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::ServiceWorkerJob):
        (WebCore::ServiceWorkerJob::failedWithException): Call through to the client to handle the failure.
        (WebCore::ServiceWorkerJob::resolvedWithRegistration): Call through to the client to handle success.
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::promise):
        (WebCore::ServiceWorkerJob::identifier const): Deleted. Rely on the identifier from the JobData.

        * workers/service/ServiceWorkerJobClient.h:

        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        (WebCore::ServiceWorkerJobData::isolatedCopy const):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::identifier const):
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):
        (WebCore::ServiceWorkerJobData::jobIdentifier const): Deleted.

        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration): Make this class an ActiveDOMObject
          both because it *is* an active DOM object and because we need to get at the ScriptExecutionContext.
        * workers/service/ServiceWorkerRegistration.h:

        Add a class to encapsulate everything about a registration for encode/decode/crossthread:
        * workers/service/ServiceWorkerRegistrationData.cpp:
        (WebCore::ServiceWorkerRegistrationData::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationData.h: 
        (WebCore::ServiceWorkerRegistrationData::encode const):
        (WebCore::ServiceWorkerRegistrationData::decode):

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationKey.h:
        (WebCore::ServiceWorkerRegistrationKey::encode const):
        (WebCore::ServiceWorkerRegistrationKey::decode):

        * workers/service/server/SWClientConnection.cpp:
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::jobResolvedInServer):
        * workers/service/server/SWClientConnection.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::~SWServer):
        (WebCore::SWServer::Connection::scheduleJobInServer):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::rejectJob):
        (WebCore::SWServer::resolveJob):
        * workers/service/server/SWServer.h:

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::SWServerRegistration):
        (WebCore::SWServerRegistration::startNextJob):
        (WebCore::SWServerRegistration::isEmpty):
        (WebCore::SWServerRegistration::getNewestWorker): Implement "Get Newest Worker" algorithm.
        (WebCore::SWServerRegistration::runRegisterJob): Implement the rest of the "Register" algorithm.
        (WebCore::SWServerRegistration::runUpdateJob): Implement every part of "Update" up to where we would fetch.
        (WebCore::SWServerRegistration::rejectWithExceptionOnMainThread):
        (WebCore::SWServerRegistration::resolveWithRegistrationOnMainThread):
        (WebCore::SWServerRegistration::resolveCurrentJob):
        (WebCore::SWServerRegistration::data const):
        (WebCore::SWServerRegistration::performCurrentJob): Deleted.
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::identifier const):

        Add a stub class to represent "active service workers" in the SWServer:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::SWServerWorker::~SWServerWorker):
        * workers/service/server/SWServerWorker.h: 
        (WebCore::SWServerWorker::scriptURL const):

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

        [CMake][WinCairo] Use find_package for libpng and libjpeg
        https://bugs.webkit.org/show_bug.cgi?id=176113

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * PlatformWinCairo.cmake:
        * platform/ImageDecoders.cmake:

2017-08-22  Matt Rajca  <mrajca@apple.com>

        Opt all Mac clients into document-level media user gesture quirks.
        https://bugs.webkit.org/show_bug.cgi?id=175831

        This un-breaks many of the sites that take a long time to load video ad elements on-demand.

        Reviewed by Eric Carlson.

        Test: media/document-level-media-user-gesture-quirk.html

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const):
        (WebCore::needsDocumentLevelMediaUserGestureQuirk): Deleted.

2017-08-22  Filip Pizlo  <fpizlo@apple.com>

        Strings need to be in some kind of gigacage
        https://bugs.webkit.org/show_bug.cgi?id=174924

        Reviewed by Oliver Hunt.

        No new tests because no new behavior.

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

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

        [Mac] Upstream Accessibility-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176093

        Reviewed by Eric Carlson.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper unregisterUniqueIdForUIElement]):
        (AXObjectIsTextMarker):
        (AXObjectIsTextMarkerRange):
        (AXTextMarkerRange):
        (AXTextMarkerRangeStart):
        (AXTextMarkerRangeEnd):
        (getBytesFromAXTextMarker):
        (isTextMarkerIgnored):
        (accessibilityObjectForTextMarker):
        (startOrEndTextmarkerForRange):
        (nextTextMarkerForCharacterOffset):
        (previousTextMarkerForCharacterOffset):
        (textMarkerForCharacterOffset):
        (characterOffsetForTextMarker):
        (textMarkerForVisiblePosition):
        (-[WebAccessibilityObjectWrapper textMarkerForFirstPositionInTextControl:]):
        (visiblePositionForTextMarker):
        (AXAttributeStringSetElement):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2017-08-30  Antti Koivisto  <antti@apple.com>

        RenderMultiColumnFlowThread - Avoid render tree mutation during layout
        https://bugs.webkit.org/show_bug.cgi?id=176026
        <rdar://problem/33402891>

        Reviewed by Zalan Bujtas.

        Mutations should be done in RenderTreeUpdater.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns const):

            Don't create columns for RenderSVGBlock. Before this patch this was avoided because it
            has custom layout() function that doesn't call to setComputedColumnCountAndWidth.
            Same for mathml and ruby.

            Don't create columns for pseudo elements (first-letter mostly).

        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):

            This now assumes that the multicolumn renderer has been initialized correctly already.

        * rendering/RenderBlockFlow.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::updateMultiColumnFlowThread):

            Create or delte multicolumn renderer after descendants are known.

        (WebCore::RenderTreeUpdater::commit):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):

2017-08-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The SVG fragment identifier is not respected if it is a part of an HTTP URL
        https://bugs.webkit.org/show_bug.cgi?id=163811

        Reviewed by Darin Adler.

        If an image is referenced more than once in a page and the URL to that
        image is an HTTP URL, one CachedImage is created for all the renderers
        even if the original URLs have different fragmentIdentifiers. In this
        case the fragment will be removed from the request which is associated
        with the shared CachedImage. This CachedImage creates an SVGImage with
        a URL but without a fragmentIdentifier. So SVGImage::draw() does not call
        FrameView::scrollToFragment() and therefore the viewport is not setup
        correctly for displaying the SVG in this case.

        The fix is to move the url from the SVGImage to SVGImageForContainer.
        Because there is one SVGImageForContainer created for every renderer,
        we can move the full URL there. The drawing of an SVGImage has to start
        from the SVGImageForContainer::draw() because the SVGImage may not have
        an intrinsic size and the SVGImageForContainer is the one which knows
        the destination rectangle. So SVGImageForContainer can pass the full url
        to SVGImage::drawForContainer() which can be used to scrollToFragment()
        before calling SVGImage::draw().
        
        For clarity and consistency, all setContainerSizeForRenderer() will be 
        changed to setContainerContext() and the pair SizeAndZoom will be replaced
        by the struct ContainerContext.

        Tests: http/tests/svg/svg-fragment-background.html
               http/tests/svg/svg-fragment-image.html

        * css/CSSCursorImageValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::fillImageSet):
        * css/CSSImageSetValue.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        (WebCore::CachedImage::switchClientsToRevalidatedResource):
        (WebCore::CachedImage::allClientsRemoved):
        (WebCore::CachedImage::setContainerContextForClient):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::createImage):
        (WebCore::CachedImage::setContainerSizeForRenderer): Deleted.
        * loader/cache/CachedImage.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry const):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::repaintOrMarkForLayout):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::setContainerContext):
        (WebCore::RenderImageResource::setContainerSizeForRenderer): Deleted.
        * rendering/RenderImageResource.h:
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::setContainerContext):
        (WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer): Deleted.
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::updateContent):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage const):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::imageURL):
        (WebCore::StyleCachedImage::setContainerContextForRenderer):
        (WebCore::StyleCachedImage::setContainerSizeForRenderer): Deleted.
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::updateImageViewport):
        * svg/SVGImageElement.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::SVGImage):
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::drawPatternForContainer):
        (WebCore::SVGImage::draw):
        (WebCore::SVGImage::dump const): Deleted.
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::setContainerContextForClient):
        (WebCore::SVGImageCache::setContainerSizeForRenderer): Deleted.
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::size const):
        (WebCore::SVGImageForContainer::draw):
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h:

2017-08-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r210287) On drop, event.dataTransfer.getData("text") returns an empty string when dragging an image
        https://bugs.webkit.org/show_bug.cgi?id=170637
        <rdar://problem/31347248>

        Reviewed by Ryosuke Niwa.

        In r210287, the behavior of DragData::containsFiles was changed to return true if NSFilesPromisePboardType is
        present in the pasteboard. This means that we will consider images dragged from web content, for which we add
        the NSFilesPromisePboardType UTI, as containing files on the pasteboard; this, in turn, means we'll initialize
        the DataTransfer upon drop with m_forFileDrag set to true. Due to early returns in getData() and setData() to
        deny data access when dropping a dragged file, this means the page won't ever get access to the URL in the
        pasteboard due to the presence of the NSFilesPromisePboardType UTI.

        To fix this, we replace the early m_forFileDrag returns in getData and setData, instead early returning the null
        string if there are any file URLs present on the pasteboard (determined via readFilenames() retrieving a non-
        empty result).

        Test: editing/pasteboard/drag-drop-href-as-text-data.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer):
        (WebCore::DataTransfer::getData const):
        (WebCore::DataTransfer::setData):

        Rather than bail upon forFileDrag() (formerly, m_forFileDrag) being true, bail if there are any file URLs
        present on the pasteboard. It seems like this was the intention of the early return in the first place, to
        prevent the page from being able to ask for a real file URL when dragging a file.

        (WebCore::DataTransfer::files const):
        (WebCore::DataTransfer::setDragImage):
        (WebCore::DataTransfer::setDropEffect):
        (WebCore::DataTransfer::setEffectAllowed):

        Swap m_forDrag and m_forFileDrag with forDrag() and forFileDrag(), respectively.

        * dom/DataTransfer.h:
        (WebCore::DataTransfer::forDrag const):
        (WebCore::DataTransfer::forFileDrag const):

        Instead of caching two bools to represent state (m_forDrag and m_forFileDrag), just remember the DataTransfer's
        m_type and turn the flags into const helpers that check for the value of m_type.

2017-08-29  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Request should throw when keep alive is true and body is a ReadableStream
        https://bugs.webkit.org/show_bug.cgi?id=176083

        Reviewed by Alex Christensen.

        Covered by rebased test.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::setBody):

2017-08-29  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use find_package for zlib
        https://bugs.webkit.org/show_bug.cgi?id=176075

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * PlatformAppleWin.cmake:
        * PlatformMac.cmake:
        * PlatformWinCairo.cmake:

2017-08-29  Devin Rousso  <webkit@devinrousso.com>

        CallTracingCallback should ignore `readonly attribute`
        https://bugs.webkit.org/show_bug.cgi?id=176070

        Reviewed by Matt Baker.

        Update existing tests to remove calls to existing readonly attributes.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        If the attribute is marked `readonly` do not add logic for the `CallTracingCallback`.

        * bindings/scripts/test/TestCallTracer.idl:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerConstructor::initializeProperties):
        (WebCore::jsTestCallTracerTestReadonlyAttributeGetter):
        (WebCore::jsTestCallTracerTestReadonlyAttribute):

2017-08-29  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Assertion failure when opening a file with a missing tag closing bracket
        https://bugs.webkit.org/show_bug.cgi?id=176061

        Reviewed by Darin Adler.

        If a tag is missing its closing bracket, the tokenizer just needs to advance()
        the character position without checking m_currentCharacter != '\n'. Newline
        character is a valid ending for partially closed tags.

        Test: fast/tokenizer/missing-script-tag-closing-bracket.html

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::commitToPartialEndTag):

2017-08-29  Brady Eidson  <beidson@apple.com>

        Rename "potentionally trustworthy" to "potentially trustworthy"
        https://bugs.webkit.org/show_bug.cgi?id=176081

        Reviewed by Daniel Bates.

        The Secure Context spec refers to this as "potentially trustworthy"
        
        It's possible that this was done potentionally, but we should follow the spec to alleviate confusion.

        * dom/Document.cpp:
        (WebCore::Document::isSecureContext const):
        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsPotentiallyTrustworthy):
        (WebCore::shouldTreatAsPotentionallyTrustworthy): Deleted.
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::isPotentiallyTrustworthy const):
        (WebCore::SecurityOrigin::isPotentionallyTrustworthy const): Deleted.
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::isSecureContext const):

2017-08-29  Youenn Fablet  <youenn@apple.com>

        Add support for FetchRequest.body
        https://bugs.webkit.org/show_bug.cgi?id=176066

        Reviewed by Alex Christensen.

        Covered by existing tests.

        Adding support for body attribute getter for FetchRequest.
        To do so, FetchRequest will need to create a ReadableStream.
        Adding support for DOM based creation of ReadableStream and conversion to JS values.
        Small refactoring to make names more consistent.

        * CMakeLists.txt:
        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/cache/Cache.cpp:
        (WebCore::Cache::put):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::hasReadableStream const):
        (WebCore::FetchBody::readableStream):
        (WebCore::FetchBody::setReadableStream):
        (WebCore::FetchBody::FetchBody):
        (WebCore::FetchBody::isReadableStream const): Deleted.
        (WebCore::FetchBody::setAsReadableStream): Deleted.
        * Modules/fetch/FetchBody.idl:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::readableStream):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::hasReadableStreamBody const):
        (WebCore::FetchBodyOwner::isReadableStreamBody const): Deleted.
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::setBody):
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::setBodyAsReadableStream):
        (WebCore::FetchResponse::fetch):
        * Modules/fetch/FetchResponse.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ReadableStream.h:
        (WebCore::JSConverter<IDLInterface<ReadableStream>>::convert):

2017-08-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Use reifying system for "name" property of builtin JSFunction
        https://bugs.webkit.org/show_bug.cgi?id=175260

        Reviewed by Saam Barati.

        Use @getter for JSBuiltin getters.

        * Modules/fetch/FetchResponse.js:
        (bodyUsed): Deleted.
        (body): Deleted.
        * Modules/streams/ReadableByteStreamController.js:
        (byobRequest): Deleted.
        (desiredSize): Deleted.
        * Modules/streams/ReadableStream.js:
        (locked): Deleted.
        * Modules/streams/ReadableStreamBYOBReader.js:
        (closed): Deleted.
        * Modules/streams/ReadableStreamBYOBRequest.js:
        (view): Deleted.
        * Modules/streams/ReadableStreamDefaultController.js:
        (desiredSize): Deleted.
        * Modules/streams/ReadableStreamDefaultReader.js:
        (closed): Deleted.
        * Modules/streams/WritableStream.js:
        (closed): Deleted.
        (ready): Deleted.
        (state): Deleted.
        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::finishCreation):

2017-08-29  Andy Estes  <aestes@apple.com>

        REGRESSION (r215290): "Where From" metadata is empty when dragging an image out of Safari
        https://bugs.webkit.org/show_bug.cgi?id=176068

        Reviewed by Wenson Hsieh.

        If you drag an image out of Safari, drop it on the Desktop, and open "Get Info", there is a
        "Where from:" field under "More Info" that should list the image's URL. After r215290, this
        field is blank due to a mixup with the string passed to URLWithUserTypedString().

        Fix this by passing metadataURLString to URLWithUserTypedString() instead of urlString.

        Not possible to reliably test this since WebKit adds metadata on a global concurrent queue.

        * platform/mac/FileSystemMac.mm:
        (WebCore::setMetadataURL):

2017-08-29  Youenn Fablet  <youenn@apple.com>

        CacheStorage does not need to sort its caches
        https://bugs.webkit.org/show_bug.cgi?id=176059

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * Modules/cache/CacheStorage.cpp:
        (WebCore::CacheStorage::retrieveCaches):

2017-08-29  Youenn Fablet  <youenn@apple.com>

        Setting the cache storage engine root path according the session WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=176055

        Reviewed by Alex Christensen.

        No test right now as the engine is not making any read/write operations.

        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::cacheStorageDirectory const):
        (WebCore::NetworkStorageSession::setCacheStorageDirectory):

2017-08-29  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use find_package for libxml2 and libxstl
        https://bugs.webkit.org/show_bug.cgi?id=176042

        Reviewed by Konstantin Tokarev.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * PlatformWinCairo.cmake:

2017-08-29  Daniel Bates  <dabates@apple.com>

        CacheQueryOptions::isolatedCopy() copies the cache name twice
        https://bugs.webkit.org/show_bug.cgi?id=175974

        Reviewed by Youenn Fablet.

        Currently CacheQueryOptions has a user-defined constructor that calls String.isolatedCopy()
        on the passed cache name. CacheQueryOptions::isolatedCopy() also calls String.isolatedCopy()
        on the cache name before passing the result to the user-defined constructor; => we malloc
        and copy the cache name twice. Ideally we would remove the user-defined constructors and
        have callers use aggregate initializer syntax to instantiate a CacheQueryOptions. Unfortunately
        we cannot do this until we upgrade from Visual Studio 2015 to Visual Studio 2017 as the former
        does not support non-static data member initializers (NSDMI) for aggregates and CacheQueryOptions
        has some. Therefore we modify the user-defined, non-default, constructor to take a String&&
        and conditionally compile the the constructors when building with compilers that do not
        support NSDMI for aggregates.

        * Modules/cache/CacheQueryOptions.h:
        (WebCore::CacheQueryOptions::CacheQueryOptions):

2017-08-29  Youenn Fablet  <youenn@apple.com>

        CanvasCaptureMediaStreamTrack clone is not a CanvasCaptureMediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=176036

        Reviewed by Eric Carlson.

        Covered by existing tests.

        Instead of creating a MediaStreamTrack clone when cloning a CanvasCaptureMediaStreamTrack,
        we are now creating a CanvasCaptureMediaStreamTrack.
        This allows exposing the expected methods and having the expected functionality.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::clone):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::clone):
        * Modules/mediastream/MediaStreamTrack.h:

2017-08-29  Chris Dumez  <cdumez@apple.com>

        Add initial support for dataTransferItem.webkitGetAsEntry()
        https://bugs.webkit.org/show_bug.cgi?id=176038
        <rdar://problem/34121095>

        Reviewed by Wenson Hsieh.

        Add initial support for dataTransferItem.webkitGetAsEntry() as per:
        - https://wicg.github.io/entries-api/#html-data

        The method works as expected and returns a FileSystemEntry. The entry
        can be either a file or a directory. All of the attributes exposed on
        the FileSystemEntry return correct values.

        What remains to be implemented for this new API to actually be useful:
        - directory.getFile() / directory.getDirectory()
        - file.file()
        - entry.getParent()
        - directoryReader.readEntries()

        Test: editing/pasteboard/datatransfer-items-drop-getAsEntry.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add new files to projects.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::DOMFileSystem):
        * Modules/entriesapi/DOMFileSystem.h:
        (WebCore::DOMFileSystem::create):
        DOMFileSystem factory now takes a name parameter. This name is a UUID, as suggested in
        the specification and implemented by Firefox.

        * Modules/entriesapi/ErrorCallback.cpp: Added.
        * Modules/entriesapi/ErrorCallback.h:
        Add scheduleCallback() convenience method as we often need to call this callback
        asynchronously.

        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::FileSystemDirectoryEntry):
        (WebCore::FileSystemDirectoryEntry::createReader):
        (WebCore::FileSystemDirectoryEntry::getFile):
        (WebCore::FileSystemDirectoryEntry::getDirectory):
        * Modules/entriesapi/FileSystemDirectoryEntry.h:
        - Add implementation for createReader().
        - Update getFile() / getDirectory() to call the error callback for now as they are
          unimplemented.
        - Have the factory take the virtual path of the entry so that it can be
          exposed via the fullPath attribute in IDL.

        * Modules/entriesapi/FileSystemDirectoryEntry.idl:
        Expose createReader() now that we have stubs for FileSystemDirectoryReader.

        * Modules/entriesapi/FileSystemDirectoryReader.cpp: Added.
        * Modules/entriesapi/FileSystemDirectoryReader.h: Added.
        * Modules/entriesapi/FileSystemDirectoryReader.idl: Added.
        * Modules/entriesapi/FileSystemEntriesCallback.cpp: Added.
        * Modules/entriesapi/FileSystemEntriesCallback.h: Added.
        * Modules/entriesapi/FileSystemEntriesCallback.idl: Added.
        Land stubs for FileSystemDirectoryReader and its FileSystemEntriesCallback.

        * Modules/entriesapi/FileSystemEntry.cpp:
        (WebCore::FileSystemEntry::FileSystemEntry):
        * Modules/entriesapi/FileSystemEntry.h:
        (WebCore::FileSystemEntry::virtualPath const):
        * Modules/entriesapi/FileSystemEntry.idl:
        Update constructor to take a virtual path, which is exposed via fullPath
        attribute in IDL.

        * Modules/entriesapi/FileSystemFileEntry.cpp:
        (WebCore::FileSystemFileEntry::FileSystemFileEntry):
        (WebCore::FileSystemFileEntry::file):
        * Modules/entriesapi/FileSystemFileEntry.h:
        (isType):
        * Modules/entriesapi/FileSystemFileEntry.idl:
        - Update file() to call the error callback for now as they are
          unimplemented.
        - Have the factory take the virtual path of the entry so that it can be
          exposed via the fullPath attribute in IDL.

        * bindings/js/JSFileSystemEntryCustom.cpp: Added.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        Add custom implementation of FileSystemEntry's toJS() function. This is
        needed because FileSystemEntry has 2 subclasses and we need to type check
        at runtime to construct the right wrapper.

        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::getAsEntry const):
        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        Add initial implementation for getAsEntry(), currently exposed as
        webkitGetAsEntry().

        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::ensureItems const):
        Construct a DataTransferItem if the file is a directory now that we
        support getAsEntry().

        * fileapi/File.cpp:
        (WebCore::File::isDirectory const):
        * fileapi/File.h:
        Add convenience method to query if a File is a directory.

2017-08-29  Zan Dobersek  <zdobersek@igalia.com>

        [WebCrypto] Push WorkQueue dispatches for HKDF, HMAC, PBKDF2 algorithms into shared code
        https://bugs.webkit.org/show_bug.cgi?id=175620

        Reviewed by Jiewen Tan.

        Push the WorkQueue dispatch code and other code duplicated between the
        Mac and libgcrypt implementations of Web Crypto into the shared layer.
        This patch focuses on the HKDF, HMAC and PBKDF2 algorithms.

        Functions with platform-specific implementations that are invoked from
        these asynchronous dispatches are made static and return an ExceptionOr
        value. CryptoAlgorithmParameters objects are passed through non-const
        references because data getters could lazily construct the underlying
        Vector objects. CryptoKey objects are passed through const references.
        Implementations can then manually retrieve and further validate any key
        or parameter data, as required for that specific implementation. Input
        data is passed through const references to the original Vector objects.

        No new tests -- no changes in behavior that's covered by existing tests.

        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        (WebCore::CryptoAlgorithmHKDF::deriveBits):
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::deriveBits):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):

2017-08-29  Zan Dobersek  <zdobersek@igalia.com>

        [WebCrypto] Push WorkQueue dispatches for EC algorithms into shared code
        https://bugs.webkit.org/show_bug.cgi?id=175619

        Reviewed by Jiewen Tan.

        Push the WorkQueue dispatch code duplicated between the Mac and libgcrypt
        implementations of Web Crypto into the shared layer. This patch focuses on
        the EC-based algorithms.

        Functions with platform-specific implementations that are invoked from
        these asynchronous dispatches are made static and return an ExceptionOr or
        std::optional value. CryptoKey and CryptoAlgorithmParameters objects are
        passed to those through const references. Input data is passed through
        const references to the original Vector objects.

        No new tests -- no changes in behavior that's covered by existing tests.

        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::sign):
        (WebCore::CryptoAlgorithmECDSA::verify):
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmECDSAGCrypt.cpp:
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):
        * crypto/keys/CryptoKeyEC.h:
        * crypto/mac/CryptoAlgorithmECDHMac.cpp:
        (WebCore::CryptoAlgorithmECDH::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmECDSAMac.cpp:
        (WebCore::CryptoAlgorithmECDSA::platformSign):
        (WebCore::CryptoAlgorithmECDSA::platformVerify):

2017-08-19  Sergio Villar Senin  <svillar@igalia.com>

        [SVG] Leak in SVGAnimatedListPropertyTearOff
        https://bugs.webkit.org/show_bug.cgi?id=172545

        Reviewed by Darin Adler.

        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.

        In order to effectively break the cycle without freeing too many wrappers we should take two
        measures:
        1) Break the reference cycle by storing raw pointers in the m_wrappers Vector
        2) Remove the ListItemTearOff which is being deleted (it notifies the animated property by
        calling propertyWillBeDeleted) from the m_wrappers Vector.

        This is a re-land of r219334 which caused early releases of custom data attribute objects
        added to SVG elements (wkb.ug/175023).

        Tests: svg/animations/animation-leak-list-property-instances.html
               svg/dom/SVGAnimatedListPropertyTearOff-crash-2.html
               svg/dom/SVGAnimatedListPropertyTearOff-crash.html
               svg/dom/SVGAnimatedListPropertyTearOff-leak.html

        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::getItemValuesAndWrappers):
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::removeItemFromList):

2017-08-29  Andy Estes  <aestes@apple.com>

        [Mac] Upstream WKSetMetadataURL() from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=176046

        Reviewed by Alex Christensen.

        * platform/FileSystem.cpp:
        (WebCore::setMetadataURL):
        * platform/FileSystem.h:
        (WebCore::setMetadataURL):
        * platform/mac/FileSystemMac.mm:
        (WebCore::setMetadataURL):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2017-08-29  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed WPE debug build fix.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::dispatchPendingDecryptionStructure):
        AppendState is an enum class, enum values have to be accessed
        using scope resolution.

2017-08-28  Andy Estes  <aestes@apple.com>

        [Cocoa] Upstream WKGetWebDefaultCFStringEncoding()
        https://bugs.webkit.org/show_bug.cgi?id=176039

        Reviewed by Alex Christensen.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::defaultTextEncodingNameForSystemLanguage):
        * platform/text/TextEncodingRegistry.h:
        * platform/text/ios/TextEncodingRegistryIOS.mm: Added.
        (WebCore::webDefaultCFStringEncoding):
        * platform/text/mac/TextEncodingRegistryMac.mm: Added.
        (WebCore::webDefaultCFStringEncoding):

2017-08-28  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r220278): Web Inspector: ContextMenu items are not getting triggered
        https://bugs.webkit.org/show_bug.cgi?id=176034

        Reviewed by Devin Rousso.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showContextMenu):
        Responses go through InspectorFrontendAPI not InspectorFrontendHost.

2017-08-28  Youenn Fablet  <youenn@apple.com>

        WebRTC MediaStream created without tracks does not update active state after tracks are added
        https://bugs.webkit.org/show_bug.cgi?id=175434

        Reviewed by Eric Carlson.

        Covered by updated test.

        Removing active/inactive events.
        active attribute is still kept and is updated synchronously on every track change.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::activeStatusChanged):
        (WebCore::MediaStream::internalAddTrack):
        (WebCore::MediaStream::updateActiveState):
        (WebCore::MediaStream::hasPendingActivity const):
        (WebCore::MediaStream::scheduleActiveStateChange): Deleted.
        (WebCore::MediaStream::activityEventTimerFired): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:

2017-08-28  Andy Estes  <aestes@apple.com>

        [Cocoa] Upstream CFNetwork-related WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=176032

        Reviewed by Alex Christensen.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::createPrivateStorageSession):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::setStorageSession):
        (WebCore::copyRequestWithStorageSession):
        (WebCore::cachedResponseForRequest):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::httpCookies):
        (WebCore::setHTTPCookiesForURL):
        (WebCore::deleteHTTPCookie):
        (WebCore::deleteAllHTTPCookies):
        (WebCore::setCookiesFromDOM):
        (WebCore::httpCookieAcceptPolicy):
        (WebCore::cookiesEnabled):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteAllCookies):
        (WebCore::deleteCookiesForHostnames):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):

2017-08-28  Brent Fulgham  <bfulgham@apple.com>

        Disable access to secure cookies if an HTTPS site loads mixed content (Part 2: Header Requests)
        https://bugs.webkit.org/show_bug.cgi?id=175992
        <rdar://problem/34086613>

        Reviewed by Daniel Bates.

        The original work in Bug 157053 did not properly handle the case of websockets. This patch completes
        the changes to secure cookie handling to make sure websockets are also protected.

        Tests: http/tests/websocket/tests/hybi/secure-cookie-insecure-connection.pl
               http/tests/websocket/tests/hybi/secure-cookie-secure-connection.pl

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::clientHandshakeRequest): Remove 'const' declaration so we can work with
        a mutable Document object. This allows us to mark the Document as having accessed secure cookies.
        (WebCore::WebSocketChannel::clientHandshakeRequest const): Deleted.
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage): Ditto.
        (WebCore::WebSocketHandshake::clientHandshakeRequest): Ditto.
        (WebCore::WebSocketHandshake::clientHandshakeMessage const): Deleted.
        (WebCore::WebSocketHandshake::clientHandshakeRequest const): Deleted.
        * Modules/websockets/WebSocketHandshake.h:
        * loader/CookieJar.cpp:
        (WebCore::cookies): Small naming cleanup.
        (WebCore::cookieRequestHeaderFieldValue): Pass a flag indicating whether secure cookies should be
        included in the result or not. Set the document flag indicating secure cookies were accessed (if
        they were), and return the resulting cookie string.
        * loader/CookieJar.h:
        * platform/CookiesStrategy.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::headerValueForVary): Revise to pass a flag indicating whether secure cookies should be included
        or not.
        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::doesContainSecureCookies): Added helper method.
        (WebCore::cookiesForDOM): Revise to use new helper function.
        (WebCore::cookieRequestHeaderFieldValue): Revise to accept a flag indicating if secure cookies should
        be included in the result. Return a pair consisting of the cookie string, and a flag indicating whether
        secure cookies were accessed or not.
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::CookieJarCurlFileSystem::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForSession): Ditto.
        (WebCore::cookiesForDOM): Update for new 'cookiesForSession' signature.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieRequestHeaderFieldValue): Revise to accept a flag indicating if secure cookies should
        be included in the result. Return a pair consisting of the cookie string, and a flag indicating whether
        secure cookies were accessed or not.

2017-08-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [WPE] Rename EventHandlerGlib to EventHandlerGLib
        https://bugs.webkit.org/show_bug.cgi?id=175864

        Unreviewed cosmetic follow-up patch after r221075.

        No new tests. No change in behavior.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * platform/glib/EventHandlerGLib.cpp: Renamed from Source/WebCore/platform/glib/EventHandlerGlib.cpp.
        (WebCore::EventHandler::tabsToAllFormControls const):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView const):
        (WebCore::EventHandler::widgetDidHandleWheelEvent):
        (WebCore::EventHandler::createDraggingDataTransfer const):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::accessKeyModifiers):
        (WebCore::EventHandler::shouldTurnVerticalTicksIntoHorizontal const):

2017-08-28  Zan Dobersek  <zdobersek@igalia.com>

        [WebCrypto] Push WorkQueue dispatches for AES algorithms into shared code
        https://bugs.webkit.org/show_bug.cgi?id=175539

        Reviewed by Sam Weinig.

        Push the WorkQueue dispatch code and other code duplicated between the
        Mac and libgcrypt implementations of Web Crypto into the shared layer.
        This patch focuses on the AES-based algorithms.

        Functions with platform-specific implementations that are invoked from
        these asynchronous dispatches are made static and return an ExceptionOr
        value. CryptoAlgorithmParameters objects are passed through non-const
        references because data getters could lazily construct the underlying
        Vector objects. CryptoKey objects are passed through const references.
        Implementations can then manually retrieve and further validate any key
        or parameter data, as required for that specific implementation. Input
        data is passed through const references to the original Vector objects.

        No new tests -- no changes in behavior that's covered by existing tests.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::encrypt):
        (WebCore::CryptoAlgorithmAES_CTR::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::wrapKey):
        (WebCore::CryptoAlgorithmAES_KW::unwrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):

2017-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Web process crashes after changing selection to the end of the document when speaking a selection
        https://bugs.webkit.org/show_bug.cgi?id=176011
        <rdar://problem/32614095>

        Reviewed by Ryosuke Niwa.

        Adds a null check to visiblePositionForPositionWithOffset. This is a crash point for accessibility codepaths,
        since indexForVisiblePosition is not guaranteed to set the given `root` outparam to a non-null value, yet
        visiblePositionForIndex requires root to be non-null. This causes a crash when selecting some text, hitting
        'Speak', and then changing the selection to somewhere near the end of the document, since accessibility code
        will attempt to speak words at an offset past the end of the document. While this is a bug in and of itself, the
        web process should still handle this case gracefully and not crash. To fix this, we simply bail and return a
        null VisiblePosition if a root container node was not found.

        Currently, visiblePositionForPositionWithOffset is implemented twice, in WebCore (AXObjectCache.cpp) and also in
        WebKit (WebPageIOS.mm), as identical static functions. This patch moves this helper into Editing.cpp and removes
        it from AXObjectCache and WebPageIOS.

        Tests: AccessibilityTests.RectsForSpeakingSelectionBasic
               AccessibilityTests.RectsForSpeakingSelectionWithLineWrapping
               AccessibilityTests.RectsForSpeakingSelectionDoNotCrashWhenChangingSelection

        * accessibility/AXObjectCache.cpp:
        (WebCore::visiblePositionForPositionWithOffset): Deleted.
        * editing/Editing.cpp:
        (WebCore::visiblePositionForPositionWithOffset):
        * editing/Editing.h:

2017-08-27  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Record actions performed on WebGLRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=174483
        <rdar://problem/34040722>

        Reviewed by Matt Baker.

        Tests: inspector/canvas/recording-webgl.html
               inspector/canvas/recording-webgl-snapshots.html

        * bindings/js/CallTracerTypes.h:
        Add types for WebGL parameters.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeSetterBodyDefinition):
        (GenerateImplementationFunctionCall):
        (GenerateCallTracerParameter):
        Modify the generated code for `CallTracingCallback` so that optional/nullable types are only
        dereferenced if they have a value.

        * html/canvas/WebGLRenderingContext.idl:
        Add `CallTracingCallback` to interface to record all API calls.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::shouldSnapshotWebGLAction):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::releaseInitialState):
        (WebCore::InspectorCanvas::releaseFrames):
        (WebCore::InspectorCanvas::appendActionSnapshotIfNeeded):
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):
        For all non-primitive WebGL objects, send a string corresponding to the object's name. The
        value isn't needed since the preview will be generated by the `toDataURL` snapshots taken
        after every visual action.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):

        * bindings/scripts/test/TestCallTracer.idl:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgument):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgument):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgument):

2017-08-26  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r220105): Storage service appears in macOS Activity Monitor as “localized string not found”
        https://bugs.webkit.org/show_bug.cgi?id=176007

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings: Updated using update-webkit-localizable-strings.

2017-08-26  Alex Christensen  <achristensen@webkit.org>

        Remove PolicyChecker::cancelCheck
        https://bugs.webkit.org/show_bug.cgi?id=176002

        Reviewed by Darin Adler.

        cancelCheck is conceptually equivalent to not calling a completion handler.
        stopCheck is conceptually equivalent to calling a completion handler with PolicyIgnore just before cleaning up everything,
        which is semantically cleaner and necessary when I replace the last use of PolicyCallback with a CompletionHandler.
        Before this change, we were probably causing some loading objects to hang right before deleting them, and this cleans them up better.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::cancelCheck): Deleted.
        * loader/PolicyChecker.h:

2017-08-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, tighten up scope of variable in previous commit

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookiesForSession):

2017-08-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Update cookie jar implementation to filter out secure cookies
        https://bugs.webkit.org/show_bug.cgi?id=175850

        Reviewed by Brent Fulgham.

        Filter out secure cookies when indicated.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookiesForSession):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):

2017-08-26  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME][GStreamer] Connect CDM to GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=175983

        Reviewed by Žan Doberšek.

        This is still a version that will need some changes for some other
        use cases but it should be enough to begin with some passes in the
        tests and some basic use cases.

        We use the attach CDMInstance interface in the private player to
        get the instance in time for the initializationDataEncountered
        event, which is handled when the demuxer reports synchronously the
        events even before configuring the decryptors. We wait there in
        case we don't have the CDMInstance attached (which contains info
        about the key system now) and when we get it we report it back to
        the demuxer and continue sending the event.

        We also handled the events when handled by the decryptors but for
        now this will remain a FIXME. The events handled by the
        AppendPipeline will end up here too for now.

        The CDM instance is created with the key system because some CDMs
        can handle more than one, not ClearKey yet but others in the
        (near) future.

        MockCDMFactory is adapted to the changes as expected.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::CDM):
        * platform/encryptedmedia/CDMFactory.h:
        * platform/encryptedmedia/CDMInstance.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMFactoryClearKey::createCDM):
        (WebCore::CDMInstanceClearKey::keySystem const):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::extractEventsAndSystemsFromMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateGStreamerBase::attemptToDecryptWithInstance):
        (WebCore::MediaPlayerPrivateGStreamerBase::attemptToDecryptWithLocalInstance):
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchDecryptionKey):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::appendPipelineElementMessageCallback):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::AppendPipeline::handleNeedContextSyncMessage):
        (WebCore::AppendPipeline::handleElementMessage):
        (WebCore::AppendPipeline::handleAppsrcNeedDataReceived):
        (WebCore::AppendPipeline::appsinkNewSample):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::createCDM):
        (WebCore::MockCDMInstance::keySystem const):
        * testing/MockCDMFactory.h:

2017-08-26  Zan Dobersek  <zdobersek@igalia.com>

        [WebCrypto] Push WorkQueue dispatches for RSA algorithms into shared code
        https://bugs.webkit.org/show_bug.cgi?id=175621

        Reviewed by Darin Adler.

        Push the WorkQueue dispatch code and other code duplicated between the
        Mac and libgcrypt implementations of Web Crypto into the shared layer.
        This patch focuses on the RSA-based algorithms.

        The WorkQueue dispatch code is condensed into two static functions on
        the CryptoAlgorithm class, the first variation handling VectorCallback
        as the callback type and the other handling BoolCallback. The operation
        is kept in a WTF::Function<> object that returns an ExceptionOr<> value
        embedding either a Vector<uint8_t> object or a boolean value, as
        appropriate for the callback type.

        Functions with platform-specific implementations that are invoked from
        these asynchronous dispatches are made static and return an ExceptionOr
        value. CryptoAlgorithmParameters objects are passed through non-const
        references because data getters could lazily construct the underlying
        Vector objects. CryptoKey objects are passed through const references.
        Implementations can then manually retrieve and further validate any key
        or parameter data, as required for that specific implementation. Input
        data is passed through const references to the original Vector objects.

        No new tests -- no changes in behavior that's covered by existing tests.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::dispatchOperationImpl):
        (WebCore::CryptoAlgorithm::dispatchOperation):
        * crypto/CryptoAlgorithm.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):

2017-08-25  Daniel Bates  <dabates@apple.com>

        Demarcate code added due to lack of NSDMI for aggregates
        https://bugs.webkit.org/show_bug.cgi?id=175990

        Reviewed by Andy Estes.

        * html/canvas/CanvasStyle.h:
        * platform/mediastream/IceCandidate.h:
        (WebCore::IceCandidate::IceCandidate):
        * platform/text/StringWithDirection.h: Replace const String& and String&& constructor
        overloads with a single user-defined constructor that takes a String by value to handle
        both cases.
        (WebCore::StringWithDirection::StringWithDirection):
        (WebCore::truncateFromEnd):
        * style/StyleUpdate.h:
        (WebCore::Style::ElementUpdate::ElementUpdate):
        (WebCore::Style::TextUpdate::TextUpdate):

2017-08-25  Daniel Bates  <dabates@apple.com>

        InlineTextBox::paintDocumentMarker() does not need to special case painting of grammar and
        dictation alternatives
        https://bugs.webkit.org/show_bug.cgi?id=175966

        Reviewed by Tim Horton.

        Remove code that forced computing the marker rect for grammar and dictation alternative
        regardless of whether the marker spans the entire width of the line box. InlineTextBox::paintDocumentMarker()
        has performance optimizations to avoid computing the marker rect if it spans the entire line box.
        Prior to r190363 we had to opt out of these optimizations for grammar and dictation alternative
        markers so that we could store their computed marker rect. In r190363 we removed the logic in
        InlineTextBox::paintDocumentMarker() to store the computed marker rect and hence no longer
        needed to opt out of the optimization for these marker types, but inadvertently left in the
        conditional code that opts them out.

        No functionality changed. So no new tests.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarker): Remove unnecessary argument grammar and
        code that special cased handling of grammar an dictation alternative markers.
        (WebCore::InlineTextBox::paintDocumentMarkers): Update as necessary.
        * rendering/InlineTextBox.h:

2017-08-25  Chris Dumez  <cdumez@apple.com>

        Land stubs for File and Directory Entries API interfaces
        https://bugs.webkit.org/show_bug.cgi?id=175993
        <rdar://problem/34087477>

        Reviewed by Ryosuke Niwa.

        Land stubs for File and Directory Entries API interfaces:
        - https://wicg.github.io/entries-api/#idl-index

        Those will be needed to support drag and drop.

        Test: http/wpt/entries-api/interfaces.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/entriesapi/DOMFileSystem.cpp: Added.
        (WebCore::DOMFileSystem::DOMFileSystem):
        (WebCore::DOMFileSystem::~DOMFileSystem):
        * Modules/entriesapi/DOMFileSystem.h: Added.
        (WebCore::DOMFileSystem::create):
        (WebCore::DOMFileSystem::name const):
        (WebCore::DOMFileSystem::root const):
        * Modules/entriesapi/DOMFileSystem.idl: Added.
        * Modules/entriesapi/ErrorCallback.h: Added.
        * Modules/entriesapi/ErrorCallback.idl: Added.
        * Modules/entriesapi/FileCallback.h: Added.
        * Modules/entriesapi/FileCallback.idl: Added.
        * Modules/entriesapi/FileSystemDirectoryEntry.cpp: Added.
        (WebCore::FileSystemDirectoryEntry::FileSystemDirectoryEntry):
        (WebCore::FileSystemDirectoryEntry::getFile):
        (WebCore::FileSystemDirectoryEntry::getDirectory):
        * Modules/entriesapi/FileSystemDirectoryEntry.h: Added.
        * Modules/entriesapi/FileSystemDirectoryEntry.idl: Added.
        * Modules/entriesapi/FileSystemEntry.cpp: Added.
        (WebCore::FileSystemEntry::FileSystemEntry):
        * Modules/entriesapi/FileSystemEntry.h: Added.
        (WebCore::FileSystemEntry::~FileSystemEntry):
        (WebCore::FileSystemEntry::isFile const):
        (WebCore::FileSystemEntry::isDirectory const):
        (WebCore::FileSystemEntry::name const):
        (WebCore::FileSystemEntry::fullPath const):
        (WebCore::FileSystemEntry::filesystem const):
        * Modules/entriesapi/FileSystemEntry.idl: Added.
        * Modules/entriesapi/FileSystemEntryCallback.h: Added.
        * Modules/entriesapi/FileSystemEntryCallback.idl: Added.
        * Modules/entriesapi/FileSystemFileEntry.cpp: Added.
        (WebCore::FileSystemFileEntry::FileSystemFileEntry):
        (WebCore::FileSystemFileEntry::file):
        * Modules/entriesapi/FileSystemFileEntry.h: Added.
        * Modules/entriesapi/FileSystemFileEntry.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:

2017-08-25  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r221017): Quip stuck in a perpetual loading loop
        https://bugs.webkit.org/show_bug.cgi?id=175991
        <rdar://problem/34044445>

        Reviewed by Daniel Bates.

        This is a quick fix to return proper function to WebKit. I'll relate a follow-up fix that
        addresses WebSockets more completely.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookieRequestHeaderFieldValue): Don't hard code a value of 'No' for returning secure
        cookies. HTTPS connection should get secure cookies.

2017-08-25  Youenn Fablet  <youenn@apple.com>

        Add support for ReadableStream storage in FetchBody
        https://bugs.webkit.org/show_bug.cgi?id=175866

        Reviewed by Sam Weinig.

        Test: http/wpt/beacon/beacon-readablestream.html

        Add support for IDLInterface<ReadableStream>, in particular to handle union conversions.
        Adding a ReadableStream that guards JSReadableStream from being collected.
        With this object, FetchBody will be able to store and manipulate ReadableStream.

        Ensure conversion of BodyInit union with ReadableStream is working by adding support for beacon rejection in case of request body streams. 

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/beacon/NavigatorBeacon.idl:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchRequestInit.idl:
        * Modules/fetch/FetchResponse.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMConvertInterface.h:
        (WebCore::JSToWrappedOverloader::toWrapped):
        (WebCore::Converter<IDLInterface<T>>::convert):
        * bindings/js/JSDOMConvertUnion.h:
        * bindings/js/ReadableStream.h: Added.
        (WebCore::JSReadableStreamWrapperConverter::toWrapped):

2017-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Using the touchbar, both align left and align justify send a beforeinput event with the 'formatJustifyLeft' inputType.
        https://bugs.webkit.org/show_bug.cgi?id=168669
        <rdar://problem/30639155>

        Reviewed by Beth Dakin.

        Small tweak to add a "formatJustifyFull" inputType when justifying text using the touch bar's rich text
        formatting controls. Currently, the EditActionJustify edit command incorrectly maps to "formatJustifyLeft".

        Test: fast/events/input-events-text-alignment.html

        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):

2017-08-25  Brady Eidson  <beidson@apple.com>

        Introduce ServerWorkerRegistration task queues.
        https://bugs.webkit.org/show_bug.cgi?id=175851

        Reviewed by Andy Estes.

        Test: http/tests/workers/service/registration-task-queue-scheduling-1.html

        This change introduces:
        - A task thread/queue owned by each SWServer object.
        - The SWServerRegistration object, which is the in-server representation of a
          service worker registration scope.
        - A registration job queue per SWServerRegistration object which actually runs the
          jobs as tasks on the owning SWServer's thread.

        With that infrastructure in place, it moves the "register" job to something that is
        scheduled and rejected asynchronously, as opposed to synchronously rejected.

        The test verifies that two different registration scopes (localhost and 127.0.0.1) 
        can both spam the SWServer with registration requests, but neither of their queues
        starve the other.

        The rest of this change is a lot of support and plumbing for making the above happen.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * dom/ExceptionData.cpp:
        (WebCore::ExceptionData::isolatedCopy const):
        * dom/ExceptionData.h:
        
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::connectionIdentifier):
        * workers/service/ServiceWorkerContainer.h:
        
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::ServiceWorkerJob):
        (WebCore::ServiceWorkerJob::data const): Deleted.
        * workers/service/ServiceWorkerJob.h:
        (WebCore::ServiceWorkerJob::create):
        (WebCore::ServiceWorkerJob::data const):
        (WebCore::ServiceWorkerJob::createRegisterJob): Deleted.
        
        * workers/service/ServiceWorkerJobClient.h:
        
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        (WebCore::ServiceWorkerJobData::registrationKey const):
        (WebCore::ServiceWorkerJobData::isolatedCopy const):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::jobIdentifier const):
        (WebCore::ServiceWorkerJobData::connectionIdentifier const):
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::emptyKey):
        (WebCore::ServiceWorkerRegistrationKey::hash const):
        (WebCore::ServiceWorkerRegistrationKey::operator== const):
        * workers/service/ServiceWorkerRegistrationKey.h:
        (WTF::ServiceWorkerRegistrationKeyHash::hash):
        (WTF::ServiceWorkerRegistrationKeyHash::equal):
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::emptyValue):
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::constructDeletedValue):
        (WTF::HashTraits<WebCore::ServiceWorkerRegistrationKey>::isDeletedValue):

        * workers/service/ServiceWorkerRegistrationOptions.cpp:
        (WebCore::RegistrationOptions::isolatedCopy const):
        * workers/service/ServiceWorkerRegistrationOptions.h:
        (WebCore::RegistrationOptions::encode const):
        (WebCore::RegistrationOptions::decode):

        * workers/service/server/SWClientConnection.h:

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        (WebCore::SWServer::~SWServer):
        (WebCore::SWServer::Connection::scheduleJobInServer):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::rejectJob):
        (WebCore::SWServer::taskThreadEntryPoint):
        (WebCore::SWServer::postTask):
        (WebCore::SWServer::postTaskReply):
        (WebCore::SWServer::handleTaskRepliesOnMainThread):
        (WebCore::SWServer::registerConnection):
        (WebCore::SWServer::unregisterConnection):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::identifier const):

        * workers/service/server/SWServerRegistration.cpp: Added.
        (WebCore::SWServerRegistration::SWServerRegistration):
        (WebCore::SWServerRegistration::~SWServerRegistration):
        (WebCore::SWServerRegistration::enqueueJob):
        (WebCore::SWServerRegistration::startNextJob):
        (WebCore::SWServerRegistration::performCurrentJob):
        (WebCore::SWServerRegistration::rejectCurrentJob):
        (WebCore::SWServerRegistration::finishCurrentJob):
        * workers/service/server/SWServerRegistration.h:

2017-08-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, add comment warning that some flags have been copied into Epiphany

        * platform/URLParser.cpp:
        (WebCore::URLParser::internationalDomainNameTranscoder):

2017-07-25  Frederic Wang  <fwang@igalia.com>

        Add flag allow-modals to iframe sandbox
        https://bugs.webkit.org/show_bug.cgi?id=171321

        This patch implements the "allow-modals" value for the iframe sandbox attribute. It changes
        the behavior for sandboxed document so that alert, confirm, prompt, print as well as dialogs
        generated from a beforeunload event are blocked when allow-modals is not set, as defined in
        the specification. For consistency, we do the same for document.execCommand('print', ...).
        Users should use the allow-modals flag in order to explictly allow modal dialogs.

        See https://html.spec.whatwg.org/multipage/origin.html#sandboxed-modals-flag

        Reviewed by Brent Fulgham.

        Tests: http/tests/security/sandboxed-iframe-ALLOWED-modals.html
               http/tests/security/sandboxed-iframe-DENIED-modals.html

        * dom/SecurityContext.cpp: Implement parsing for allow-modals
        (WebCore::SecurityContext::isSupportedSandboxPolicy):
        (WebCore::SecurityContext::parseSandboxPolicy):
        * dom/SecurityContext.h: Introduce flag for allow-modals
        * loader/FrameLoader.cpp:
        (WebCore::shouldAskForNavigationConfirmation): Prevent confirm dialog from beforeunload when
        allow-modals is not set.
        * page/Chrome.h: Change the signature of print, so it may return a failure when the
        allow-modals flag is not set.
        * page/Chrome.cpp:
        (WebCore::Chrome::print): Returns false and print a message error when the allow-modals flag
        on the frame's document is not set. Otherwise, execute the command and returns true.
        * editing/EditorCommand.cpp:
        (WebCore::executePrint): Ensure that document.execCommand for 'print' returns false when the
        allow-modals flag is not set.
        * page/DOMWindow.cpp: Add early exit when alert, confirm or prompt when the allow-modals flag
        for that document is not set. Note that print is handled in Chrome.cpp.
        (WebCore::DOMWindow::alert): Add early exit.
        (WebCore::DOMWindow::confirm): Add early exit with the return value indicated in the spec.
        (WebCore::DOMWindow::prompt): Ditto.

2017-08-25  Brady Eidson  <beidson@apple.com>

        Unreviewed, rolling out r221181.

        Broke builds that use CryptoAlgorithmRSA_PSSMac.cpp

        Reverted changeset:

        "[WebCrypto] Push WorkQueue dispatches for RSA algorithms into
        shared code"
        https://bugs.webkit.org/show_bug.cgi?id=175621
        http://trac.webkit.org/changeset/221181

2017-08-25  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME][ClearKey] Fixed warning in CDM compilation
        https://bugs.webkit.org/show_bug.cgi?id=175979

        Reviewed by Žan Doberšek.

        * platform/encryptedmedia/clearkey/CDMClearKey.h: Added a final to
        avoid the compiler warning about the missing override keyword.

2017-08-25  Miguel Gomez  <magomez@igalia.com>

        [GTK] Completely garbled display in Transifex in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=174632

        Reviewed by Michael Catanzaro.

        Remove the copy constructor from PlatformContextCairo::State. This is because it will be used by WTF::Vector
        to copy the instances around when allocating new memory, but it doesn't copy the m_imageMaskInformation
        attribute, so it will be lost when the Vector reallocates its contents. When this happens, renderings that use
        GraphicsContext::clipToImageBuffer() fail to render properly.

        Covered by existent tests.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::State::State):
        (WebCore::PlatformContextCairo::save):

2017-08-25  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME][GStreamer] Move createDescryptor function to GStreamerEMEUtilities
        https://bugs.webkit.org/show_bug.cgi?id=175930

        Reviewed by Žan Doberšek.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::createGstDecryptor): Deleted.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp:
        (WebCore::GStreamerEMEUtilities::createDecryptor): Created.
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps): Use
        GStreamerEMEUtilities::createDecryptor instead.

2017-08-25  Zan Dobersek  <zdobersek@igalia.com>

        [WebCrypto] Push WorkQueue dispatches for RSA algorithms into shared code
        https://bugs.webkit.org/show_bug.cgi?id=175621

        Reviewed by Darin Adler.

        Push the WorkQueue dispatch code and other code duplicated between the
        Mac and libgcrypt implementations of Web Crypto into the shared layer.
        This patch focuses on the RSA-based algorithms.

        The WorkQueue dispatch code is condensed into two static functions on
        the CryptoAlgorithm class, the first variation handling VectorCallback
        as the callback type and the other handling BoolCallback. The operation
        is kept in a WTF::Function<> object that returns an ExceptionOr<> value
        embedding either a Vector<uint8_t> object or a boolean value, as
        appropriate for the callback type.

        Functions with platform-specific implementations that are invoked from
        these asynchronous dispatches are made static and return an ExceptionOr
        value. CryptoAlgorithmParameters objects are passed through non-const
        references because data getters could lazily construct the underlying
        Vector objects. CryptoKey objects are passed through const references.
        Implementations can then manually retrieve and further validate any key
        or parameter data, as required for that specific implementation. Input
        data is passed through const references to the original Vector objects.

        No new tests -- no changes in behavior that's covered by existing tests.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::dispatchOperationImpl):
        (WebCore::CryptoAlgorithm::dispatchOperation):
        * crypto/CryptoAlgorithm.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):

2017-08-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, add File and Directory Entries API to status page.

        * features.json:

2017-08-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update status of Beacon API.

        It is now supported in Safari Technology Preview.

        * features.json:

2017-08-24  Chris Dumez  <cdumez@apple.com>

        [Directory Upload] Add basic support for input.webkitdirectory
        https://bugs.webkit.org/show_bug.cgi?id=175950
        <rdar://problem/33951915>

        Reviewed by Geoffrey Garen.

        Add basic support for input.webkitdirectory attribute, as per:
        - https://wicg.github.io/entries-api/#html-forms

        The following is supported:
        - input.webkitdirectory IDL and content attributes
        - The webkitdirectory content attribute is properly consulted
          to communicate to the client that the file picker should
          allow selecting directories.
        - When WebCore gets the list of selected files from the file picker,
          it properly resolves folders in a background thread to properly
          initialize input.files before firing the 'change' event at the
          input element.
        - When resolving files in a directory, we ignore both hidden files and
          symbolic links for security reasons. I did not check symlinks but Firefox
          and Chrome both seem to upload hidden files (such as .DS_Store files).
        - File.webkitRelativePath IDL attribute is properly populated for
          files coming from a selected directory.
        - Form submission just works because it relies on input.files being
          properly populated. No change needed in this area.

        What is not supported:
        - input.webkitEntries IDL attribute.
        - FileSystemEntry / FileSystemDirectoryEntry / FileSystemDirectoryReader
          /  FileSystemFileEntry / FileSystem IDL interfaces.
        - dataTransferItem.webkitGetAsEntry() for proper drag and drop support.

        Those will be taken care of in follow-up patches.

        The feature is currently behind an experimental feature flag, disabled by
        default.

        Tests: fast/forms/file/webkitdirectory-drag-folder.html
               fast/forms/file/webkitdirectory-open-panel.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/File.cpp:
        (WebCore::File::createWithRelativePath):
        * fileapi/File.h:
        * fileapi/File.idl:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::~FileInputType):
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::allowsDirectories const):
        (WebCore::FileInputType::filesChosen):
        * html/FileInputType.h:
        * html/FileListCreator.cpp: Added.
        (WebCore::appendDirectoryFiles):
        (WebCore::FileListCreator::FileListCreator):
        (WebCore::FileListCreator::createFileList):
        (WebCore::FileListCreator::cancel):
        * html/FileListCreator.h: Copied from Source/WebKit/UIProcess/API/APIOpenPanelParameters.h.
        (WebCore::FileListCreator::create):
        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.idl:
        * page/Settings.in:
        * platform/FileChooser.h:
        (WebCore::FileChooserFileInfo::isolatedCopy const):
        * platform/FileMetadata.h:
        * platform/FileSystem.cpp:
        (WebCore::fileIsDirectory):
        * platform/FileSystem.h:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::getFileMetadata):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::getFileMetadata):
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileMetadata):

2017-08-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221139.

        This change did not resolve the LayoutTest assertion failure.

        Reverted changeset:

        "REGRESSION (r220052): ASSERTION FAILED:
        !frame().isMainFrame() || !needsStyleRecalcOrLayout()  in
        WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive()"
        https://bugs.webkit.org/show_bug.cgi?id=175270
        http://trac.webkit.org/changeset/221139

2017-08-24  Jon Lee  <jonlee@apple.com>

        Unreviewed.

        * Modules/mediastream/MediaStreamTrack.idl: Remove extraneous and confusing comment in IDL.
        The 'new' enum was removed via r215198, so we can remove this specific FIXME.

2017-08-24  Alex Christensen  <achristensen@webkit.org>

        Stop using PolicyCallback for new window policies
        https://bugs.webkit.org/show_bug.cgi?id=175907

        Reviewed by Andy Estes.

        PolicyCallback is an artifact from the days before C++11.  Let's use lambdas instead!
        No change in behaviour.

        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::continueAfterNewWindowPolicy): Deleted.
        * loader/PolicyChecker.h:

2017-08-24  Michael Saboff  <msaboff@apple.com>

        Add support for RegExp "dotAll" flag
        https://bugs.webkit.org/show_bug.cgi?id=175924

        Reviewed by Keith Miller.

        Changed due to refactoring NewlineClassID to DotClassID.

        No new tests. No change in behavior.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::PatternParser::atomBuiltInCharacterClass):

2017-08-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, revert part of r221152 to fix internal builds.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::create):

2017-08-24  Kirill Ovchinnikov  <kirill.ovchinn@gmail.com>

        HTMLTrackElement behavior violates the standard
        https://bugs.webkit.org/show_bug.cgi?id=175888

        Reviewed by Eric Carlson.

        Test: media/track/text-track-src-change.html: added asserts

        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::parseAttribute):
        (WebCore::HTMLTrackElement::loadTimerFired):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::scheduleLoad):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::removeAllCues):
        * html/track/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::removeAll):
        * html/track/TextTrackCueList.h:

2017-08-24  David Kilzer  <ddkilzer@apple.com>

        Fix -Wcast-qual and -Wunused-lambda-capture warnings in WebCore with new clang compiler
        <https://webkit.org/b/175910>
        <rdar://problem/33667497>

        Reviewed by Alex Christensen.

        Fix -Wunused-lambda-capture warnings:

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::setBodyData): Remove unused lambda
        capture of 'this'.
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createRenderer): Add
        UNUSED_PARAM(style) when ENABLE(CSS_REGIONS) is turned off.

        Fix -Wcast-qual warnings:

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::create): Switch from C-style cast to
        reinterpret_cast with const keyword.  This better matches the
        argument types used in CCRSACryptorCreateFromData().
        * platform/audio/mac/FFTFrameMac.cpp:
        (WebCore::FFTFrame::doFFT): Switch from C-style cast to
        reinterpret_cast with const keyword.  This better matches the
        argument type used in vDSP_ctoz().
        * platform/graphics/FontPlatformData.h: Only define
        WebCore::toCTFont() and WebCore::toNSFont() when building for
        Objective-C++.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        Switch from C-style cast to reinterpret_cast with const keyword.
        This better matches the argument type used in
        Uint8Array::setRange().
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::CMTimebaseEffectiveRateChangedCallback): Use
        const_cast to avoid warning.
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString): Use const_cast to
        avoid warning, and switch C-style cast to reinterpret_cast.
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::transformToString):
        - Use const_cast to avoid warning, and switch C-style cast to
          reinterpret_cast.
        - Switch C-style cast to reinterpret_cast and add const keyword.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLParserContext::createMemoryParser): Use const_cast
        to avoid warning, and switch C-style cast to reinterpret_cast.

2017-08-22  Dave Hyatt  <hyatt@apple.com>

        [Repaint Outside Layout] Add a pref for repainting outside of layout
        https://bugs.webkit.org/show_bug.cgi?id=175729

        Reviewed by Daniel Bates.

        * page/Settings.in:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::checkForRepaintDuringLayout):

2017-08-22  Darin Adler  <darin@apple.com>

        REGRESSION (r220052): ASSERTION FAILED: !frame().isMainFrame() || !needsStyleRecalcOrLayout()  in WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive()
        https://bugs.webkit.org/show_bug.cgi?id=175270

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_styleRecalcTimer with a lamdba so it can work
        with a function that returns a bool and ignore the return value.
        (WebCore::Document::updateStyleIfNeeded): Added a boolean return value indicating if the
        function did any work or not.
        * dom/Document.h: Updated for above change.

        * page/FrameView.cpp:
        (WebCore::appendRenderedChildren): Added helper that will later replace the
        FrameView::renderedChildFrameViews function and is used below.
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive): Instead of always doing two
        passes of style and layout update do up to four passes, but stop as soon as a pass does
        no work. This is slightly more efficient in cases where no layout and style update is
        needed, and works correctly when a third pass is needed, which is what happens in the
        test that was failing. We can eventually improve this further, but this resolves the
        immediate problem we are seeing in the test.

2017-08-24  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use find_package for SQLite
        https://bugs.webkit.org/show_bug.cgi?id=175803

        Reviewed by Konstantin Tokarev.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * PlatformWinCairo.cmake:

2017-08-23  Adrian Perez de Castro  <aperez@igalia.com>

        Geoclue2 based backend should provide the right desktop ID
        https://bugs.webkit.org/show_bug.cgi?id=129879

        Reviewed by Michael Catanzaro.

        * platform/geoclue/GeolocationProviderGeoclue.cpp:
        (GeolocationProviderGeoclue::createGeoclueClientProxyCallback): Try first obtaining the application
        identifier using GApplication first, keeping a fallback to the value returned by g_get_prgname().

2017-08-24  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Implement HTMLMediaElement dispatch of the onencrypted event
        https://bugs.webkit.org/show_bug.cgi?id=175927

        Reviewed by Xabier Rodriguez-Calvar.

        Add the MediaPlayerClient::mediaPlayerInitializationDataEncountered()
        method that the platform-layer media pipeline can invoke when it hits
        encrypted content in the media data. The initialization data and its type
        are passed by the caller, allowing the HTMLMediaElement override to
        process it further.

        This is done in the mediaPlayerInitializationDataEncountered() override
        in the HTMLMediaElement class. Partially implementing the 'Initialization
        Data Encountered' algorithm, the 'encrypted' event is dispatched, with the
        MediaEncryptedEvent interface being leveraged to embed init data and init
        data type information. CORS and mixed-content validation of the media data
        is skipped for now.

        MediaPlayer::initializationDataEncountered() method should be used to
        dispatch the corresponding method on the client, passing on the given init
        data and init data type values.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::initializationDataEncountered):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerInitializationDataEncountered):

2017-08-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        DeleteSelectionCommand should be robust when starting and ending editable positions cannot be found
        https://bugs.webkit.org/show_bug.cgi?id=175914
        <rdar://problem/29792688>

        Reviewed by Ryosuke Niwa.

        DeleteSelectionCommand can cause a null dereference if editable start and end positions are not found. This can
        happen when attempting to delete after selecting the contents within a canvas or output element with `read-write`
        `-webkit-user-modify` style. To fix this, we make the initialization step of the DeleteSelectionCommand robust
        when editable start and end positions are missing.

        Test: editing/execCommand/forward-delete-read-write-canvas.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):

        Make this initialization helper indicate failure via a bool return value. DeleteSelectionCommand::doApply bails
        early if initializePositionData returned false.

        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:

2017-08-23  Youenn Fablet  <youenn@apple.com>

        [Cache API] Unify WebCore and WebKit error handling
        https://bugs.webkit.org/show_bug.cgi?id=175902
        <rdar://problem/34045933>

        Unreviewed.

        * Modules/cache/DOMCache.h: Fixing Windows build.

2017-08-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r221109.

        This change caused assertion failures on iOS and macOS debug
        bots.

        Reverted changeset:

        "Stop using PolicyCallback for new window policies"
        https://bugs.webkit.org/show_bug.cgi?id=175907
        http://trac.webkit.org/changeset/221109

2017-08-23  Jer Noble  <jer.noble@apple.com>

        [EME] WebCoreDecompressionSession should only report having an available frame if it has one for the current time.
        https://bugs.webkit.org/show_bug.cgi?id=175901

        Reviewed by Eric Carlson.

        The WebCoreDecompressionSession will trigger the hasAvailableFrame callback whenever a frame is decoded,
        regardless of its presentation time. For formats which have out-of-order decoding, the newly decoded frame could
        have a presentation time far in the future. Instead, only fire the callback if the decoded frame's presentation
        times contains the timebase's current time.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):

2017-08-23  Youenn Fablet  <youenn@apple.com>

        [Cache API] Unify WebCore and WebKit error handling
        https://bugs.webkit.org/show_bug.cgi?id=175902

        Reviewed by Alex Christensen.

        No change of behavior.

        Introducing a DOMCache namespace enclosing structures, callbacks and function definitions
        previously found in either WebCore::CacheStorageConnection or WebKit::CacheStorage.

        Some previously used callbacks had no way to pass errors in WebCore while they had in WebKit.
        Updated Cache, CacheStorage, CacheStorageConnection and WorkerCacheStorageConnection to deal with these potential errors.

        * CMakeLists.txt:
        * Modules/cache/Cache.cpp:
        (WebCore::FetchTasksHandler::FetchTasksHandler):
        (WebCore::FetchTasksHandler::records const):
        (WebCore::FetchTasksHandler::addRecord):
        (WebCore::Cache::addAll):
        (WebCore::Cache::put):
        (WebCore::Cache::retrieveRecords):
        (WebCore::queryCacheMatch):
        (WebCore::Cache::batchDeleteOperation):
        (WebCore::toConnectionRecord):
        (WebCore::Cache::batchPutOperation):
        (WebCore::Cache::updateRecords):
        * Modules/cache/Cache.h:
        * Modules/cache/CacheStorage.cpp:
        (WebCore::CacheStorage::retrieveCaches):
        (WebCore::CacheStorage::open):
        (WebCore::CacheStorage::remove):
        * Modules/cache/CacheStorage.h:
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::open):
        (WebCore::CacheStorageConnection::remove):
        (WebCore::CacheStorageConnection::retrieveCaches):
        (WebCore::CacheStorageConnection::batchDeleteOperation):
        (WebCore::CacheStorageConnection::batchPutOperation):
        (WebCore::CacheStorageConnection::openOrRemoveCompleted):
        (WebCore::CacheStorageConnection::updateCaches):
        (WebCore::CacheStorageConnection::updateRecords):
        (WebCore::CacheStorageConnection::deleteRecordsCompleted):
        (WebCore::CacheStorageConnection::putRecordsCompleted):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::openCompleted):
        (WebCore::CacheStorageConnection::removeCompleted):
        (WebCore::CacheStorageConnection::doOpen):
        (WebCore::CacheStorageConnection::doRemove):
        (WebCore::CacheStorageConnection::doBatchDeleteOperation):
        (WebCore::CacheStorageConnection::doBatchPutOperation):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::toCrossThreadRecordData):
        (WebCore::fromCrossThreadRecordData):
        (WebCore::WorkerCacheStorageConnection::doOpen):
        (WebCore::WorkerCacheStorageConnection::doRemove):
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        (WebCore::recordsDataFromRecords):
        (WebCore::recordsDataOrErrorFromRecords):
        (WebCore::recordsFromRecordsData):
        (WebCore::recordsOrErrorFromRecordsData):
        (WebCore::WorkerCacheStorageConnection::doRetrieveRecords):
        (WebCore::WorkerCacheStorageConnection::doBatchDeleteOperation):
        (WebCore::WorkerCacheStorageConnection::doBatchPutOperation):
        * Modules/cache/DOMCache.cpp: Added.
        * Modules/cache/DOMCache.h: Added.
        * Modules/cache/WorkerCacheStorageConnection.h:
        * WebCore.xcodeproj/project.pbxproj:

2017-08-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Optimize Map iteration with intrinsic
        https://bugs.webkit.org/show_bug.cgi?id=174355

        Reviewed by Saam Barati.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):

2017-08-23  Alex Christensen  <achristensen@webkit.org>

        Stop using PolicyCallback for new window policies
        https://bugs.webkit.org/show_bug.cgi?id=175907

        Reviewed by Andy Estes.

        PolicyCallback is an artifact from the days before C++11.  Let's use lambdas instead!
        No change in behaviour.

        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::continueAfterNewWindowPolicy): Deleted.
        * loader/PolicyChecker.h:

2017-08-23  Alex Christensen  <achristensen@webkit.org>

        Stop using PolicyChecker for ContentPolicy
        https://bugs.webkit.org/show_bug.cgi?id=175904

        Reviewed by Tim Horton.

        PolicyChecker is an artifact from the days before C++11.  Now we have lambdas which
        have a cleaner flow than one class that exists to be effectively one of three lambda types.
        Let's remove them one at a time, starting with ContentPolicy checks.
        
        No change in behaviour.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy):
        * loader/FrameLoader.h:
        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkContentPolicy): Deleted.
        (WebCore::PolicyChecker::continueAfterContentPolicy): Deleted.
        * loader/PolicyChecker.h:

2017-08-23  Jer Noble  <jer.noble@apple.com>

        Build fix for 32-bit Mac after r221098. Make sure constant used in WebCoreDecompressionSession is SoftLinked.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:

2017-08-23  Jer Noble  <jer.noble@apple.com>

        Track VideoPlaybackQuality metrics when using WebCoreDecompressionSession.
        https://bugs.webkit.org/show_bug.cgi?id=175835
        <rdar://problem/34022234>

        Reviewed by Eric Carlson.

        Test: platform/mac/media/media-source/videoplaybackquality-decompressionsession.html

        Track the total number of frames decoded, dropped, & corrupted, as well as the total
        delay imposed by decoding in the WebCoreDecompressionSession.

        Drive-by fix: implement frame dropping by skipping frames whose presentation times are
        before the video's current time and which aren't depended upon by other frames.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics):
        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        (WebCore::WebCoreDecompressionSession::totalVideoFrames):
        (WebCore::WebCoreDecompressionSession::droppedVideoFrames):
        (WebCore::WebCoreDecompressionSession::corruptedVideoFrames):
        (WebCore::WebCoreDecompressionSession::totalFrameDelay):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::shouldDecodeSample):
        (WebCore::WebCoreDecompressionSession::decodeSample):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):

2017-08-23  Andy Estes  <aestes@apple.com>

        [Payment Request] Update to "In Development" in features.json
        https://bugs.webkit.org/show_bug.cgi?id=175897

        Reviewed by Sam Weinig.

        * features.json:

2017-08-22  Dean Jackson  <dino@apple.com>

        Default passive touch event listeners on the root
        https://bugs.webkit.org/show_bug.cgi?id=175346
        <rdar://problem/33164597>

        Reviewed by Sam Weinig.

        Make any touchstart or touchmove event listeners passive by default
        if they are on the document, window, body or document element targets.
        This follows the "intervention" first implemented by Chrome/Blink:

        https://github.com/WICG/interventions/issues/35
        https://docs.google.com/document/d/1II7oSIpd8pK91V5kEM3tDLKcIj398jOJn8Niqy6_loI/edit
        https://github.com/whatwg/dom/issues/365

        If the event listener explicitly defines "passive" to false in their
        options dictionary, then they'll still get a non-passive listener.

        NOTE: Any fallout from this bug should be collected in:
        https://bugs.webkit.org/show_bug.cgi?id=175869
        Please do not revert this change just because a site is broken. We'll
        gather the issues and see if we can evangelise or detect via code.

        Tests: fast/events/touch/ios/passive-by-default-on-document-and-window.html
               fast/events/touch/ios/passive-by-default-overridden-on-document-and-window.html

        * dom/EventNames.h:
        (WebCore::EventNames::isTouchScrollBlockingEventType const): Added this helper
        to identify the types of touches we want to check for.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener): Check for the event being one of the touch-types
        that we care about, and the target being one of the Node/Window types we care about. If
        so, tell the event listener to be passive.
        * dom/EventTarget.h: Use an optional for the passive member.
        (WebCore::EventTarget::AddEventListenerOptions::AddEventListenerOptions):
        * dom/EventTarget.idl: Change "passive" to not have a default value, so we
        can detect if it was explicitly set to false.

2017-08-23  Tim Horton  <timothy_horton@apple.com>

        Try to fix the WinCairo build after r221068

        * platform/win/PlatformScreenWin.cpp:

2017-08-23  Youenn Fablet  <youenn@apple.com>

        [Cache API] Enable persistent coder to encode FetchOptions
        https://bugs.webkit.org/show_bug.cgi?id=175883

        Reviewed by Alex Christensen.

        No change of behavior.
        Adding encode/decode routines for FetchOptions.

        * loader/FetchOptions.h:
        (WebCore::FetchOptions::encode const):
        (WebCore::FetchOptions::decode):
        * platform/ReferrerPolicy.h:

2017-08-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        Race condition in StartWebThread causing crash
        https://bugs.webkit.org/show_bug.cgi?id=175852

        Reviewed by Mark Lam.

        When starting web thread, the main thread waits for completion of web thread initialization
        by using pthread_cond_t. However, the main thread may be woken up due to the existence of
        the spurious wake up of pthread_cond_t.

        Instead, we should use WTF::Lock and WTF::Condition. Since our StartWebThread already calls
        WTF::initializeThreading, it is safe to use WTF::Lock and WTF::Condition. And our WTF::Condition
        does not have the spurious wake up problem as described in Condition.h.

        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread):
        (StartWebThread):

2017-08-23  Brent Fulgham  <bfulgham@apple.com>

        Ensure media controls host exists before using it
        https://bugs.webkit.org/show_bug.cgi?id=175833
        <rdar://problem/34001219>

        Reviewed by Jer Noble.

        Although we ensure that the media controls shadow root exists before updating the text track
        container, we don't check that the media controls host has been created yet. We do check
        and create in other places in HTMLMediaElement.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateTextTrackDisplay): 

2017-08-23  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Some event handlers not working.
        https://bugs.webkit.org/show_bug.cgi?id=175864

        Reviewed by Michael Catanzaro.

        Share the EventHandler implementation with the GTK port and add ifdefs where needed.

        Covered by existing tests.

        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * page/wpe/EventHandlerWPE.cpp: Removed.
        * platform/glib/EventHandlerGlib.cpp: Renamed from Source/WebCore/page/gtk/EventHandlerGtk.cpp.
        (WebCore::EventHandler::shouldTurnVerticalTicksIntoHorizontal const):

2017-08-22  Tim Horton  <timothy_horton@apple.com>

        _WKThumbnailView should use the screen color space instead of sRGB
        https://bugs.webkit.org/show_bug.cgi?id=175858
        <rdar://problem/33925559>

        Reviewed by Dean Jackson.

        * platform/PlatformScreen.h:
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenColorSpace):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenColorSpace):
        (WebCore::screenSupportsExtendedColor):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenColorSpace):
        Add screenColorSpace, which returns the active color space for the
        given Widget's screen. On Windows, just fall back to sRGB like we usually do.

2017-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        Consolidate the code to normalize MIME type in DataTransfer
        https://bugs.webkit.org/show_bug.cgi?id=175810

        Rubber-stamped by Wenson Hsieh.

        Address the forgotten review comment by Wenson.

        Tests: editing/pasteboard/datatransfer-getdata-plaintext.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::clearData):

2017-08-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] WKWebView schedules nonstop layout after pressing cmb+b,i,u inside a contenteditable div
        https://bugs.webkit.org/show_bug.cgi?id=175116
        <rdar://problem/28279301>

        Reviewed by Darin Adler and Ryosuke Niwa.

        WebCore support for WebPage::editorState refactoring. See WebKit ChangeLogs for more detail.

        Tests: EditorStateTests.TypingAttributesBold
               EditorStateTests.TypingAttributesItalic
               EditorStateTests.TypingAttributesUnderline
               EditorStateTests.TypingAttributesTextAlignmentAbsoluteAlignmentOptions
               EditorStateTests.TypingAttributesTextAlignmentStartEnd
               EditorStateTests.TypingAttributesTextAlignmentDirectionalText
               EditorStateTests.TypingAttributesTextColor
               EditorStateTests.TypingAttributesMixedStyles
               EditorStateTests.TypingAttributesLinkColor

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::propertyAsColor const):
        (WebCore::StyleProperties::propertyAsValueID const):

        Introduces some helper functions in StyleProperties to convert CSS property values to Color or a CSSValueID.

        * css/StyleProperties.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::hasStyle):

        Pull out logic in selectionStartHasStyle that asks for a style TriState into EditingStyle::hasStyle. This is
        because WebPage::editorState will now query for multiple styles at the selection start, but
        selectionStartHasStyle currently recomputes styleAtSelectionStart every time it is called. To prevent extra work
        from being done, we can just call selectionStartHasStyle once and use ask for EditingStyle::hasStyle on the
        computed EditingStyle at selection start.

        * editing/EditingStyle.h:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle const):

2017-08-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WK2] EditorState updates should be rolled into the layer update lifecycle when possible
        https://bugs.webkit.org/show_bug.cgi?id=175370
        <rdar://problem/33799806>

        Reviewed by Ryosuke Niwa.

        Remove didChangeSelectionAndUpdateLayout -- EditorState updates that are scheduled due to missing post-layout
        data will now be scheduled for the next presentation update. Additionally, add editor client hooks to notify the
        WebKit layer when we've updated the current composition. See WebKit ChangeLog for more details. This patch
        adjusts and rebaselines existing layout tests.

        * editing/Editor.cpp:
        (WebCore::SetCompositionScope::SetCompositionScope):
        (WebCore::SetCompositionScope::~SetCompositionScope):

        Introduce a helper RAII class to ensure that we ignore selection changes during the scope of
        Editor::setComposition and call out to the client with WebEditorClient::didUpdateComposition afterwards. This
        also maintains a UserTypingGestureIndicator over its lifetime, so we don't additionally need to create a
        UserTypingGestureIndicator in Editor::setComposition.

        (WebCore::Editor::setComposition):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::updateAndRevealSelection):
        (WebCore::FrameSelection::setSelectedRange):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::defaultSetSelectionOptions):

        Plumb state about whether or not the selection change was triggered by the user to FrameSelection::setSelection,
        and if so, notify the editing client. A separate SetSelectionOptions flag is used here instead of
        RevealSelection to avoid calling out to the client in places where we want to reveal the selection regardless of
        whether or not the selection is user triggered.

        * loader/EmptyClients.cpp:
        * page/EditorClient.h:

2017-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Consolidate the code to normalize MIME type in DataTransfer
        https://bugs.webkit.org/show_bug.cgi?id=175810

        Reviewed by Wenson Hsieh.

        Factored out the code to convert MIME type to lowercase after stripping whitespace,
        and treat "text" as "text/plain" and "url" as "text/uri-list".

        Specifications:
        https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-getdata-2
        https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-setdata-2
        https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-cleardata-2

        Stripping of whitespace only happens in WebKit/Blink but it's probably required for compatbility.
        Spec bug: https://github.com/whatwg/html/issues/2946

        Test: editing/pasteboard/datatransfer-getdata-plaintext.html

        * dom/DataTransfer.cpp:
        (WebCore::normalizeType):
        (WebCore::DataTransfer::clearData):
        (WebCore::DataTransfer::getData const):
        (WebCore::DataTransfer::setData):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::selectionDataTypeFromHTMLClipboardType):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):
        * platform/mac/PasteboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):
        * platform/win/PasteboardWin.cpp:
        (WebCore::clipboardTypeFromMIMEType):

2017-08-22  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r221033.

        This revision caused assertion failures on all Open Source
        Debug testers. See Radar for more information.

        Reverted changeset:

        "Ensure media controls host exists before using it"
        https://bugs.webkit.org/show_bug.cgi?id=175833
        http://trac.webkit.org/changeset/221033

2017-08-22  Per Arne Vollan  <pvollan@apple.com>

        [Win] Fix compile errors.
        https://bugs.webkit.org/show_bug.cgi?id=175860

        Reviewed by Brent Fulgham.

        Add required header files. 

        * platform/network/cf/CookieJarCFNet.cpp:

2017-08-22  Brent Fulgham  <bfulgham@apple.com>

        Correct SOUP builds after r221017 and r221050.
        https://bugs.webkit.org/show_bug.cgi?id=175846

        Reviewed by Michael Catanzaro.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookiesForDOM): Revise return type.

2017-08-22  Brent Fulgham  <bfulgham@apple.com>

        Correct SOUP and cURL builds after r221017.
        https://bugs.webkit.org/show_bug.cgi?id=175846

        Reviewed by Michael Catanzaro.

        Correct the method signatures for 'cookiesForDOM' on the SOUP and cURL backends.
        Note that these ports will need to add specific logic to find/filter secure cookies
        if requested by the caller.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::CookieJarCurlFileSystem::cookiesForDOM):
        (WebCore::cookiesForDOM):
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookiesForDOM):

2017-08-22  Chris Dumez  <cdumez@apple.com>

        [EnabledBySetting] in WebIDL uses Document but does not include Document.h
        https://bugs.webkit.org/show_bug.cgi?id=175843

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2017-08-22  Jer Noble  <jer.noble@apple.com>

        Refactor videoPerformanceQuality() MediaPlayer methods into single call.
        https://bugs.webkit.org/show_bug.cgi?id=175830

        Reviewed by Eric Carlson.

        Allow MediaPlayerPrivate subclasses to return all the metrics required for VideoPerformanceQuality in
        a single call. For clients which incur significant overhead to request this data, this reduces the cost
        of requesting data by the number of calls removed.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getVideoPlaybackQuality):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::videoPlaybackQualityMetrics):
        (WebCore::MediaPlayer::totalVideoFrames): Deleted.
        (WebCore::MediaPlayer::droppedVideoFrames): Deleted.
        (WebCore::MediaPlayer::corruptedVideoFrames): Deleted.
        (WebCore::MediaPlayer::totalFrameDelay): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::PlatformVideoPlaybackQualityMetrics::PlatformVideoPlaybackQualityMetrics):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::videoPlaybackQualityMetrics):
        (WebCore::MediaPlayerPrivateInterface::totalVideoFrames): Deleted.
        (WebCore::MediaPlayerPrivateInterface::droppedVideoFrames): Deleted.
        (WebCore::MediaPlayerPrivateInterface::corruptedVideoFrames): Deleted.
        (WebCore::MediaPlayerPrivateInterface::totalFrameDelay): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalVideoFrames): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::droppedVideoFrames): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::corruptedVideoFrames): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::videoPlaybackQualityMetrics):
        (WebCore::MockMediaPlayerMediaSource::totalVideoFrames): Deleted.
        (WebCore::MockMediaPlayerMediaSource::droppedVideoFrames): Deleted.
        (WebCore::MockMediaPlayerMediaSource::corruptedVideoFrames): Deleted.
        (WebCore::MockMediaPlayerMediaSource::totalFrameDelay): Deleted.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::videoPlaybackQualityMetrics):
        * platform/mock/mediasource/MockMediaSourcePrivate.h:

2017-08-22  Brent Fulgham  <bfulgham@apple.com>

        Ensure media controls host exists before using it
        https://bugs.webkit.org/show_bug.cgi?id=175833
        <rdar://problem/34001219>

        Reviewed by Jer Noble.

        Although we ensure that the media controls shadow root exists before updating the text track
        container, we don't check that the media controls host has been created yet. We do check
        and create in other places in HTMLMediaElement.

        Tests: media/track/track-display-before-controls-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateTextTrackDisplay): 

2017-08-22  Youenn Fablet  <youenn@apple.com>

        [Cache API] Optimize whitespace trimming in Vary header values
        https://bugs.webkit.org/show_bug.cgi?id=175837

        Reviewed by Alex Christensen.

        No change of behavior.

        Introducing a StringView version of stripLeadingAndTrailingHTTPSpaces.

        * Modules/cache/Cache.cpp:
        (WebCore::hasResponseVaryStarHeaderValue):
        * platform/network/HTTPParsers.h:
        (WebCore::stripLeadingAndTrailingHTTPSpaces):

2017-08-22  Alex Christensen  <achristensen@webkit.org>

        Remove ChromeClient::scrollbarsModeDidChange
        https://bugs.webkit.org/show_bug.cgi?id=175805

        Reviewed by Daniel Bates.

        No change in behavior.  It was never called, and no implementations did anything.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::scrollbarsModeDidChange const): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:

2017-08-22  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: provide way for ShaderPrograms to be enabled/disabled
        https://bugs.webkit.org/show_bug.cgi?id=175400

        Reviewed by Matt Baker.

        Test: inspector/canvas/setShaderProgramDisabled.html

        * inspector/InspectorShaderProgram.h:
        (WebCore::InspectorShaderProgram::disabled):
        (WebCore::InspectorShaderProgram::setDisabled):

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::drawArrays):
        (WebCore::WebGLRenderingContextBase::drawElements):
        If the current program is disabled, return early. This will prevent the current shader
        program from drawing anything to the canvas.

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::setShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::isShaderProgramDisabled):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::isShaderProgramDisabled):
        (WebCore::InspectorInstrumentation::isShaderProgramDisabledImpl):

2017-08-22  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add support for overwriting responses with put on an existing record
        https://bugs.webkit.org/show_bug.cgi?id=175825

        Reviewed by Geoffrey Garen.

        Tests: http/wpt/cache-storage/cache-put-keys.https.any.html
               http/wpt/cache-storage/cache-put-keys.https.any.worker.html

        Adding support for the new response update counter.
        Overwriting local cached response with new retrieved response when the counter is different.
        Adding support for passing this value from/to workers.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::queryCacheWithTargetStorage):
        (WebCore::toConnectionRecord):
        (WebCore::Cache::updateRecords):
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::Record::copy const):
        * Modules/cache/CacheStorageConnection.h:
        * Modules/cache/CacheStorageRecord.h:
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::toCrossThreadRecordData):
        (WebCore::fromCrossThreadRecordData):

2017-08-22  Alex Christensen  <achristensen@webkit.org>

        Remove ChromeClient::hasOpenedPopup
        https://bugs.webkit.org/show_bug.cgi?id=175804

        Reviewed by Sam Weinig.

        No change in behavior.  All implementations just returned false.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::hasOpenedPopup const): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::showPopup):

2017-08-22  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement error checking for show(), abort(), and canMakePayment()
        https://bugs.webkit.org/show_bug.cgi?id=175789

        Reviewed by Brady Eidson.

        Implement many of the exceptions and promise rejections specified for PaymentRequest's
        show(), abort(), and canMakePayment() methods. Also implement basic state tracking.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::create): Changed serializedMethodData from a
        HashMap<String, String> to a Vector<PaymentRequest::Method>.
        (WebCore::PaymentRequest::PaymentRequest):
        (WebCore::PaymentRequest::show): Added promise rejection for invalid state, updated the
        state to Interactive, stored the promise in m_showPromise, and dispatched finishShowing().
        (WebCore::PaymentRequest::finishShowing): Added JSON parsing of payment method serialized
        data and exception propagation. If there are no exceptions, rejected m_showPromise with
        NotSupportedError since we don't yet support any payment methods.
        (WebCore::PaymentRequest::abort): Added promise rejection for invalid state and stored the
        promise in m_abortPromise. Dispatched a lambda to update the state to Closed, reject
        m_showPromise, and resolve m_abortPromise.
        (WebCore::PaymentRequest::canMakePayment): Added promise rejection for invalid state and
        stored the promise in m_canMakePaymentPromise. Dispatched a lambda to resolve
        m_canMakePaymentPromise with false since we don't yet support any payment methods.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl: Annotated abort() with MayThrowException.

2017-08-22  Brent Fulgham  <bfulgham@apple.com> and Pranjal Jumde  <pjumde@apple.com>

        Disable access to secure cookies if an HTTPS site loads mixed content
        https://bugs.webkit.org/show_bug.cgi?id=157053
        <rdar://problem/11290808>

        Reviewed by Dan Bates.

        Tests: http/tests/security/mixedContent/insecure-css-with-secure-cookies.html
               http/tests/security/mixedContent/insecure-image-with-securecookie-block.html
               http/tests/security/mixedContent/insecure-image-with-securecookie.html
               http/tests/security/mixedContent/insecure-script-with-secure-cookies.html
               http/tests/security/mixedContent/redirect-https-to-http-image-secure-cookies-block.html
               http/tests/security/mixedContent/redirect-https-to-http-image-secure-cookies.html

        * dom/SecurityContext.h: 
        (WebCore::SecurityContext::secureCookiesAccessed): Added.
        (WebCore::SecurityContext::setSecureCookiesAccessed): Added.
        * loader/CookieJar.cpp:
        (WebCore::cookies): Pass Document as non-const so we can call 'setSecureCookiesAccessed' if necessary.
        * loader/CookieJar.h:
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::canRunInsecureContent): Updated checks to avoid running insecure content
        if secure cookies were accessed. 
        * platform/CookiesStrategy.h:
        (WebCore::CookiesStrategy::cookiesForDOM): Pass new argument indicating whether secure cookies should be included in the response.
        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        (copyCookiesForURLWithFirstPartyURL): Revise to accept new 'IncludeSecureCookiesOrNot' argument.
        (WebCore::cookiesForSession): Updated to accept new 'IncludeSecureCookiesOrNot' argument. Also determine if secure cookies were
        included in the response, and return this to the caller.
        (WebCore::cookieRequestHeaderFieldValue): Revise for new 'copyCookiesForURLWithFirstPartyURL' signature.
        (WebCore::getRawCookies): Ditto.
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForSession): Updated checks to keep track of secure cookies and filter out secure cookies if insecure content
        was accessed.
        (WebCore::cookiesForDOM): Update for new arguments and to return a pair.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.

2017-08-22  Jer Noble  <jer.noble@apple.com>

        Autoplay Muted Videos Don't Play When Outside Viewport
        https://bugs.webkit.org/show_bug.cgi?id=175748
        <rdar://problem/33974383>

        Reviewed by Eric Carlson.

        Test: media/video-restricted-invisible-autoplay-not-allowed-source.html

        The media session is notified that its client (the media element) will begin autoplaying inside
        prepareForLoad(), where the m_autoplaying flag is also set. But loading via <source> elements does not go
        through prepareForLoad(); the HTML standard states that the <source> element loading path does not trigger the
        "media element load algorithm" which is implemented in prepareForLoad(). Since the m_autoplaying flag is
        initially set to true, notify the media session that the element will begin autoplaying inside the element's
        constructor.

        Drive-by fix: Doing the above causes other tests to crash, as purturbing play state during style change can cause
        re-entrancy in the native controls code, or fail, since we will transition from autoplay -> play even if there's
        not yet a src or source to the media element. Add a task queue for updating the autoplay state and check the ready
        state before allowing autoplay to transition to play.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay const):
        (WebCore::HTMLMediaElement::isVisibleInViewportChanged):

2017-08-21  Matt Rajca  <mrajca@apple.com>

        Call updateIsPlayingMedia whenever m_userHasInteractedWithMediaElement changes
        https://bugs.webkit.org/show_bug.cgi?id=175796

        Reviewed by Eric Carlson.

        Test: media/video-user-gesture-tracking.html

        The page media state depends on m_userHasInteractedWithMediaElement, so force it to update
        as soon as m_userHasInteractedWithMediaElement changes. This fixes an issue where the media
        state would not reflect the user interaction flag until a call to updateIsPlayingMedia was made.

        * dom/Document.cpp:
        (WebCore::Document::noteUserInteractionWithMediaElement):
        * dom/Document.h:
        (WebCore::Document::noteUserInteractionWithMediaElement): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::pageMediaState):

2017-08-22  Zan Dobersek  <zdobersek@igalia.com>

        GLContext: zero-initialize the GLContext pointer in ThreadGlobalGLContext
        https://bugs.webkit.org/show_bug.cgi?id=175819

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/GLContext.cpp: The ThreadGlobalGLContext object is
        allocated on heap, so the embedded GLContext pointer can contain a
        non-null value that can cause problems when e.g. checking for a current
        GLContext on some specific thread on which a GLContext hasn't yet been
        made current. Zero-initializing this pointer will avoid false positives
        that can occur in these circumstances.

2017-08-21  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add support for Cache.add/addAll
        https://bugs.webkit.org/show_bug.cgi?id=175677

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        Cache.addAll implementation is then as follow:
        - Fetch the resources in parallel.
        - Wait for all them to complete using FetchTaskCounter.
        - If an error happens in any load or if the response is not as expected for Cache API, reject the promise.
        - Call the batch put operation with all received FetchResponse objects.

        FetchTaskCounter is responsible to wait for each response to arrive.
        It then checks whether the response is fine,
        If not, the addAll promise is rejected.
        Otherwise, it waits for the body to be received.

        Introducing a helper routine to create a FetchRequest from a given RequestInfo.
        Introducing a helper routine to check for Vary Header '*' value in response headers.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::doMatch):
        (WebCore::Cache::add):
        (WebCore::queryCacheMatch):
        (WebCore::hasResponseVaryStarHeaderValue):
        (WebCore::FetchTaskCounter::FetchTaskCounter):
        (WebCore::FetchTaskCounter::~FetchTaskCounter):
        (WebCore::FetchTaskCounter::addRecord):
        (WebCore::FetchTaskCounter::isDone const):
        (WebCore::FetchTaskCounter::reject):
        (WebCore::Cache::requestFromInfo):
        (WebCore::Cache::addAll):
        (WebCore::Cache::put):
        (WebCore::Cache::remove):
        (WebCore::Cache::keys):
        (WebCore::toConnectionRecord):
        (WebCore::Cache::batchPutOperation):
        * Modules/cache/Cache.h:

2017-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        DataInteractionTests.ExternalSourceAttributedStringToContentEditable hits a debug assertion
        https://bugs.webkit.org/show_bug.cgi?id=175787
        <rdar://problem/33996612>

        Reviewed by Wenson Hsieh.

        The variation axis values of San Francisco changed from the GX-style scale to the CSS-style
        scale. Previously, we were normalizing the values we got from Core Text to fit the CSS scale;
        however, this is no longer necessary since the font now does this itself.

        The assertion was getting hit because the normalized values were huge and were overflowing
        a single FontSelectionValue (and going negative). This patch adds handling for this
        situation.

        Test: DataInteractionTests.ExternalSourceBoldSystemAttributedStringToContentEditable

        * platform/graphics/FontSelectionAlgorithm.h: Typedef the backing type for a FontSelectionValue.
        (WebCore::FontSelectionValue::rawValue const):
        (WebCore::FontSelectionValue::maximumValue):
        (WebCore::FontSelectionValue::minimumValue):
        (WebCore::FontSelectionValue::FontSelectionValue):
        * platform/graphics/cocoa/FontCacheCoreText.cpp: Opt-out of normalization for San Francisco.
        (WebCore::variationCapabilitiesForFontDescriptor):
        (WebCore::capabilitiesForFontDescriptor):

2017-08-21  Chris Dumez  <cdumez@apple.com>

        [Beacon] Content extensions should be able to intercept Beacon / Ping redirects
        https://bugs.webkit.org/show_bug.cgi?id=175746
        <rdar://problem/33946050>

        Reviewed by Alex Christensen.

        Update PingLoad to process content extension rules upon redirect. This allows content
        extensions to block and upgrade to HTTPS beacon / ping loads.

        Because ping loads can outlive the WebProcess, the content extensions rules are passed
        to the NetworkProcess when starting the Ping load. The PingLoad can then consult those
        rules upon redirect, on the NetworkProcess side.

        Tests: http/wpt/beacon/contentextensions/beacon-blocked.html
               http/wpt/beacon/contentextensions/beacon-redirect-blocked.html

        * contentextensions/ContentExtensionActions.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::forEach):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForPingLoad):
        * contentextensions/ContentExtensionsBackend.h:
        * page/Page.h:
        * page/UserContentProvider.cpp:
        (WebCore::UserContentProvider::forEachContentExtension):
        * page/UserContentProvider.h:

2017-08-21  Brady Eidson  <beidson@apple.com>

        ASSERTION FAILED: !m_connections.contains(&connection) in WebCore::SWServer::unregisterConnection(WebCore::SWServer::Connection&).
        https://bugs.webkit.org/show_bug.cgi?id=175795

        Rubber-stamped by Andy Estes.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::unregisterConnection): Flip the ASSERT to be... correct.

2017-08-21  Daniel Bates  <dabates@apple.com>

        Cleanup TextPainter
        https://bugs.webkit.org/show_bug.cgi?id=175782

        Reviewed by Myles C. Maxfield.

        Remove redundant mention of "text" in the name of TextPainter member functions, add separate
        setters for selection and non-selection shadows, and do some other minor cleanups.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Update code for renamed functions.
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow): Ditto.
        * rendering/TextPainter.cpp: Include ShadowData.h.
        (WebCore::ShadowApplier::ShadowApplier): Use C++11 brace-initialization syntax.
        (WebCore::ShadowApplier::isLastShadowIteration): Moved from TextPainter.h.
        (WebCore::ShadowApplier::shadowIsCompletelyCoveredByText): Ditto.
        (WebCore::TextPainter::paintTextOrEmphasisMarks): Renamed; formerly named drawTextOrEmphasisMarks.
        (WebCore::TextPainter::paintTextWithShadows): Update code for renamed functions.
        (WebCore::TextPainter::paintRange): Renamed; formerly named paintTextInRange.
        (WebCore::TextPainter::paint): Renamed; formerly named paintText.
        (WebCore::TextPainter::drawTextOrEmphasisMarks): Renamed to paintTextOrEmphasisMarks() to match
        the naming convention of all the other paint functions in this class.
        (WebCore::TextPainter::paintTextInRange): Renamed to paintRange.
        (WebCore::TextPainter::paintText): Renamed to paint.
        * rendering/TextPainter.h: Forward declare ShadowData.
        (WebCore::TextPainter::setStyle): Renamed; formerly named setTextPaintStyle.
        (WebCore::TextPainter::setSelectionStyle): Renamed; formerly named setSelectionPaintStyle.
        (WebCore::TextPainter::setShadow): Added.
        (WebCore::TextPainter::setSelectionShadow): Added.
        (WebCore::TextPainter::setEmphasisMark): Renamed; formerly named addEmphasis. 
        (WebCore::TextPainter::setTextPaintStyle): Renamed to setStyle.
        (WebCore::TextPainter::setSelectionPaintStyle): Renamed to setSelectionStyle.
        (WebCore::TextPainter::addEmphasis): Renamed to setEmphasisMark.
        (WebCore::TextPainter::addTextShadow): Split functionality into setShadow and setSelectionShadow.
        (WebCore::ShadowApplier::isLastShadowIteration): Moved to TextPainter.cpp.
        (WebCore::ShadowApplier::shadowIsCompletelyCoveredByText): Ditto.

2017-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments after r220725
        https://bugs.webkit.org/show_bug.cgi?id=175382

        Reviewed by Darin Adler.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::setUnicodeRange):

2017-08-21  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add support for CacheStorage.match
        https://bugs.webkit.org/show_bug.cgi?id=175747

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        Introducing Cache::doMatch so that CacheStorage can use it.
        Make Cache::match use Cache::doMatch as well.

        Implementing CacheStorage.match as per spec:
        - If name is provided, query only the cache with the given name.
        - Otherwise pick the first matching response in the caches.
        The sequential asynchronous search is done in doSequentialMatch.

        Making sure that response with a status code are returning false to isNull.
        This allows passing more tests.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::match):
        (WebCore::Cache::doMatch):
        (WebCore::Cache::matchAll):
        (WebCore::toConnectionRecord):
        * Modules/cache/Cache.h:
        * Modules/cache/CacheStorage.cpp:
        (WebCore::doSequentialMatch):
        (WebCore::copyCaches):
        (WebCore::CacheStorage::match):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::setHTTPStatusCode):

2017-08-21  Dean Jackson  <dino@apple.com>

        Persistent WebGL Warning "vertex WARNING: 0:1: extension 'GL_ARB_gpu_shader5' is not supported" in Safari 10.1.2
        https://bugs.webkit.org/show_bug.cgi?id=175783
        <rdar://problem/33623867>

        Reviewed by Alex Christensen.

        The version of ANGLE we use inserts this line into each shader:
        #extension GL_ARB_gpu_shader5 : enable
        It causes our lower-level GLSL compiler to give a warning, which is
        confusing to developers because they didn't write this code.

        Until we upgrade our OpenGL support to version 4.1, we should remove
        this error message from the log returned to the developer.
        See https://bugs.webkit.org/show_bug.cgi?id=175785

        Test: fast/canvas/webgl/no-info-log-for-simple-shaders.html

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Search for and remove
        this warning.

2017-08-21  Andy Estes  <aestes@apple.com>

        [Payment Request] Use ExistingExceptionError to propagate JS exceptions thrown during JSON stringification
        https://bugs.webkit.org/show_bug.cgi?id=175776

        Reviewed by Darin Adler.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::create):
        * Modules/paymentrequest/PaymentRequest.h:

2017-08-21  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [PAL] Move spi/mac directory into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175649

        Reviewed by Myles C. Maxfield.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/DataDetection.mm:
        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        * page/mac/ServicesOverlayController.mm:
        * page/mac/WheelEventDeltaFilterMac.mm:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/mac/MediaTimeQTKit.h:
        * platform/mac/MediaRemoteSoftLink.cpp:
        * platform/mac/MediaRemoteSoftLink.h:
        * platform/mac/PasteboardWriter.mm:
        * platform/mac/PlatformEventFactoryMac.mm:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        * platform/mac/WebVideoFullscreenController.mm:
        * rendering/RenderThemeMac.mm:

2017-08-21  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE][GSTREAMER_GL] Overriden virtual function not marked “override” in MediaPlayerPrivateGStreamerBase.h
        https://bugs.webkit.org/show_bug.cgi?id=175780

        Reviewed by Konstantin Tokarev.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h: Add missing "override" qualifier.

2017-08-21  Brady Eidson  <beidson@apple.com>

        Split the one SWServer::Connection into SWClientConnection and SWServer::Connection.
        https://bugs.webkit.org/show_bug.cgi?id=175745

        Reviewed by Andy Estes.

        No new tests (No behavior change).

        Each of these has a much different environment that it lives in, so being the same object
        hinders clean development.
        
        This split will also make it easier for the WebCore objects to directly handle WK2 messages.
        
        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * platform/Logging.h:

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::scheduleJob):
        * workers/service/ServiceWorkerContainer.h:

        * workers/service/ServiceWorkerProvider.h:

        * workers/service/server/SWClientConnection.cpp: Copied from Source/WebCore/workers/service/server/SWServer.cpp.
        (WebCore::SWClientConnection::SWClientConnection):
        (WebCore::SWClientConnection::~SWClientConnection):
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::jobRejectedInServer):
        * workers/service/server/SWClientConnection.h: Copied from Source/WebCore/workers/service/server/SWServer.h.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        (WebCore::SWServer::Connection::~Connection):
        (WebCore::SWServer::~SWServer):
        (WebCore::SWServer::Connection::scheduleJobInServer):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::registerConnection):
        (WebCore::SWServer::unregisterConnection):
        (WebCore::SWServer::Connection::scheduleJob): Deleted.
        (WebCore::SWServer::Connection::jobRejected): Deleted.
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::server):
        (WebCore::SWServer::Connection::~Connection): Deleted.

2017-08-21  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement the PaymentRequest constructor
        https://bugs.webkit.org/show_bug.cgi?id=175755

        Reviewed by Darin Adler.

        * Modules/paymentrequest/PaymentDetailsModifier.h: Changed total to an std::optional<PaymentItem>.
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::isWellFormedCurrencyCode): Implements the IsWellFormedCurrencyCode abstract operation from ECMA 402.
        (WebCore::isValidDecimalMonetaryValue): Implements the "valid decimal monetary value" validity checker.
        (WebCore::checkAndCanonicalizeAmount): Implements the "check and canonicalize amount" validity checker.
        (WebCore::checkAndCanonicalizeTotal): Implements the "check and canonicalize total" validity checker.
        (WebCore::PaymentRequest::create): Implements the PaymentRequest Constructor
        (WebCore::PaymentRequest::PaymentRequest):
        (WebCore::PaymentRequest::id const): Implements the PaymentRequest id attribute.
        (WebCore::PaymentRequest::shippingType const): Implements the PaymentRequest shippingType attribute.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl: Annotated PaymentRequest with ConstructorMayThrowException.
        * WebCore.xcodeproj/project.pbxproj:

2017-08-21  Per Arne Vollan  <pvollan@apple.com>

        [Win] DRT should only allow any https certificate for localhost.
        https://bugs.webkit.org/show_bug.cgi?id=175147

        Reviewed by Brent Fulgham.

        Disabling validation of certificate chains, breaks SSL on Windows. In order
        for SSL tests to succeed on Windows, we should avoid disabling it.

        No new tests, covered by existing tests.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):

2017-08-21  Zan Dobersek  <zdobersek@igalia.com>

        [EME] HTMLMediaElement: basic implementations of 'Attempt to Decrypt', 'Attempt to Resume Playback If Necessary'
        https://bugs.webkit.org/show_bug.cgi?id=175761

        Reviewed by Xabier Rodriguez-Calvar.

        Add initial and incomplete implementations of the 'Attempt to Decrypt' and
        'Attempt to Resume Playback If Necessary' algorithms.  The implementations
        are interleaved with the specification text for clarity.

        'Attempt to Decrypt' implementation doesn't yet address the encrypted block
        queue or the 'decryption blocked waiting for key' flag since it's not yet
        clear whether it would make more sense for this state to reside lower, in
        the platform layer. The gist of the algorithm is to invoke the decryption
        attempt through the MediaPlayer object, passing along the CDMInstance object
        retrieved from the MediaKeys object that is associated with this media
        element.

        'Attempt to Resume Playback if Necessary' implementation similarly for now
        omits the various state flag operations. The main task at this point is to
        dispatch the 'Attempt to Decrypt' algorithm.

        HTMLMediaElement::cdmClientAttemptToResumePlaybackIfNecessary() method now
        invokes the attemptToResumePlaybackIfNecessary() method.

        MediaKeys::hasOpenSessions() is introduced, returning true if any session
        that was created through this MediaKeys instance is still open. This allows
        the 'Attempt to Decrypt' algorithm to proceed with the decryption attempt
        dispatch into the MediaPlayer hierarchy.

        For that, the MediaPlayer::attemptToDecryptWithInstance() method is added,
        which simply dispatches the mirror method on MediaPlayerPrivate interface.
        This will enable the platform-layer implementations to use the passed-in
        CDMInstance object for decryption purposes.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::hasOpenSessions const):
        * Modules/encryptedmedia/MediaKeys.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attemptToDecrypt):
        (WebCore::HTMLMediaElement::attemptToResumePlaybackIfNecessary):
        (WebCore::HTMLMediaElement::cdmClientAttemptToResumePlaybackIfNecessary):
        * html/HTMLMediaElement.h: Mark cdmClientAttemptToResumePlaybackIfNecessary() as final.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::attemptToDecryptWithInstance):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::attemptToDecryptWithInstance):

2017-08-20  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Add basic implementation of HTMLMediaElement::setMediaKeys()
        https://bugs.webkit.org/show_bug.cgi?id=175717

        Reviewed by Xabier Rodriguez-Calvar.

        Add an initial and incomplete implementation of HTMLMediaElement::setMediaKeys(),
        interleaved with the specification wording of how this operation should behave.
        The implementation still doesn't cover cases of CDM instances being already
        associated with a different HTMLMediaElement, of CDM instances that can't be
        disassociated from the current HTMLMediaElement, and of failures during both
        association and disassociation of MediaKeys with the HTMLMediaElement.

        The HTMLMediaElement (as a CDMClient inheritor) has to be attached or detached
        from the MediaKeys object as appropriate. This attachment allows MediaKeys to
        initiate an attempt to resume playback whenever the key statuses of the
        associated MediaKeys object are updated.

        Upon association and disassociation with MediaKeys, the CDMInstance object of
        that specific MediaKeys instance is attached to or detached from the MediaPlayer
        instance. This allows the platform layer to gather information about the
        CDMInstance that will be used for decryption of media content for this specific
        media element.

        Additionally, the detachment from both MediaKeys and MediaPlayer is done upon
        HTMLMediaElement destruction.

        Upon setting the MediaKeys object, a task is queued that launches the 'Attempt to
        Resume Playback If Necessary' algorithm. A placeholder method is added that will
        implement the algorithm in the future.

        The HTMLMediaElement::mediaKeys() getter is also implemented, returning pointer
        held in m_mediaKeys.

        Covered to a degree by existing imported W3C tests, with a setMediaKeys()-oriented
        test having WPE-specific baseline update.

        * Modules/encryptedmedia/MediaKeys.h:
        (WebCore::MediaKeys::cdmInstance const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::mediaKeys const):
        (WebCore::HTMLMediaElement::setMediaKeys):
        (WebCore::HTMLMediaElement::attemptToResumePlaybackIfNecessary):
        (WebCore::HTMLMediaElement::contextDestroyed):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::cdmInstanceAttached):
        (WebCore::MediaPlayer::cdmInstanceDetached):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateInterface::cdmInstanceDetached):

2017-08-20  Chris Dumez  <cdumez@apple.com>

        Simplify calls to LoaderStrategy::startPingLoad()
        https://bugs.webkit.org/show_bug.cgi?id=175756

        Reviewed by Sam Weinig.

        Simplify calls to LoaderStrategy::startPingLoad() by passing the Frame to it
        and let its implementation gets what it needs from the frame. This reduces
        the number of parameters to startPingLoad() and is more easily extensible.

        * dom/Document.h:
        * loader/LoaderStrategy.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        * loader/PingLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

2017-08-20  Antti Koivisto  <antti@apple.com>

        Factor :before/:after render tree mutations into a RenderTreeUpdater helper class
        https://bugs.webkit.org/show_bug.cgi?id=175752

        Reviewed by Andreas Kling.

        Move code that constructs generated content renderers out from PseudoElement.
        Also refactor the related code from RenderTreeUpdater main class into
        RenderTreeUpdater::GeneratedContent helper class.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::resolveCustomStyle): Deleted.

            Not needed anymore.

        (WebCore::PseudoElement::didAttachRenderers): Deleted.

            Moves to createContentRenderers in GeneratedContent.

        (WebCore::PseudoElement::didRecalcStyle): Deleted.

            Moves to updateStyleForContentRenderers in GeneratedContent.

        * dom/PseudoElement.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::RenderTreeUpdater):
        (WebCore::RenderTreeUpdater::~RenderTreeUpdater):
        (WebCore::RenderTreeUpdater::commit):
        (WebCore::RenderTreeUpdater::updateBeforeDescendants):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        (WebCore::needsPseudoElement): Deleted.
        (WebCore::RenderTreeUpdater::updateBeforeOrAfterPseudoElement): Deleted.
        (WebCore::RenderTreeUpdater::updateQuotesUpTo): Deleted.

            Quotes and other :before/:after support moves to GeneratedContent helpwe.

        * style/RenderTreeUpdater.h:
        (WebCore::RenderTreeUpdater::generatedContent):
        * style/RenderTreeUpdaterGeneratedContent.cpp: Added.
        (WebCore::RenderTreeUpdater::GeneratedContent::GeneratedContent):
        (WebCore::RenderTreeUpdater::GeneratedContent::updateBeforePseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::updateAfterPseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::updateRemainingQuotes):
        (WebCore::RenderTreeUpdater::GeneratedContent::updateQuotesUpTo):
        (WebCore::createContentRenderers):
        (WebCore::updateStyleForContentRenderers):
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::needsPseudoElement):
        * style/RenderTreeUpdaterGeneratedContent.h: Added.

2017-08-19  Andy Estes  <aestes@apple.com>

        [Payment Request] Add interface stubs
        https://bugs.webkit.org/show_bug.cgi?id=175730

        Reviewed by Youenn Fablet.

        * DerivedSources.make:
        * Modules/paymentrequest/PaymentAddress.h: Added.
        * Modules/paymentrequest/PaymentAddress.idl: Added.
        * Modules/paymentrequest/PaymentComplete.h: Added.
        * Modules/paymentrequest/PaymentComplete.idl: Added.
        * Modules/paymentrequest/PaymentCurrencyAmount.h: Added.
        * Modules/paymentrequest/PaymentCurrencyAmount.idl: Added.
        * Modules/paymentrequest/PaymentDetailsBase.h: Added.
        * Modules/paymentrequest/PaymentDetailsBase.idl: Added.
        * Modules/paymentrequest/PaymentDetailsInit.h: Added.
        * Modules/paymentrequest/PaymentDetailsInit.idl: Added.
        * Modules/paymentrequest/PaymentDetailsModifier.h: Added.
        * Modules/paymentrequest/PaymentDetailsModifier.idl: Added.
        * Modules/paymentrequest/PaymentDetailsUpdate.h: Added.
        * Modules/paymentrequest/PaymentDetailsUpdate.idl: Added.
        * Modules/paymentrequest/PaymentItem.h: Added.
        * Modules/paymentrequest/PaymentItem.idl: Added.
        * Modules/paymentrequest/PaymentMethodData.h: Added.
        * Modules/paymentrequest/PaymentMethodData.idl: Added.
        * Modules/paymentrequest/PaymentOptions.h: Added.
        * Modules/paymentrequest/PaymentOptions.idl: Added.
        * Modules/paymentrequest/PaymentRequest.cpp: Added.
        (WebCore::PaymentRequest::create):
        (WebCore::PaymentRequest::PaymentRequest):
        (WebCore::PaymentRequest::~PaymentRequest):
        (WebCore::PaymentRequest::show):
        (WebCore::PaymentRequest::abort):
        (WebCore::PaymentRequest::canMakePayment):
        * Modules/paymentrequest/PaymentRequest.h: Added.
        * Modules/paymentrequest/PaymentRequest.idl: Added.
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp: Added.
        (WebCore::PaymentRequestUpdateEvent::~PaymentRequestUpdateEvent):
        (WebCore::PaymentRequestUpdateEvent::updateWith):
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h: Added.
        * Modules/paymentrequest/PaymentRequestUpdateEvent.idl: Added.
        * Modules/paymentrequest/PaymentRequestUpdateEventInit.h: Added.
        * Modules/paymentrequest/PaymentRequestUpdateEventInit.idl: Added.
        * Modules/paymentrequest/PaymentResponse.cpp: Added.
        (WebCore::PaymentResponse::complete):
        * Modules/paymentrequest/PaymentResponse.h: Added.
        * Modules/paymentrequest/PaymentResponse.idl: Added.
        * Modules/paymentrequest/PaymentShippingOption.h: Added.
        * Modules/paymentrequest/PaymentShippingOption.idl: Added.
        * Modules/paymentrequest/PaymentShippingType.h: Added.
        * Modules/paymentrequest/PaymentShippingType.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:

2017-08-19  Sam Weinig  <sam@webkit.org>

        [WebCrypto] Remove the KeyAlgorithm type hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=175750

        Reviewed by Chris Dumez.

        Removes the unnecessary indirection that existed to generate a
        KeyAlgorithm dictionary (or rather, one of its derived dictionaries)
        for a CryptoKey. We were calling the virtual buildAlgorithm(), which
        return a std::unique_ptr<KeyAlgorithm>, which we then casted to the 
        correct derived class and called dictionary() on. This can now be
        simplified by making each CryptoKey derived class override a function
        that returns the KeyAlgorithm variant.

        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::algorithm const): Deleted.
        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::extractable const):
        (WebCore::KeyAlgorithm::~KeyAlgorithm): Deleted.
        (WebCore::KeyAlgorithm::name const): Deleted.
        (WebCore::KeyAlgorithm::KeyAlgorithm): Deleted.
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::algorithm const):
        (WebCore::CryptoKeyRSA::buildAlgorithm const): Deleted.
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::algorithm const):
        (WebCore::AesKeyAlgorithm::dictionary const): Deleted.
        (WebCore::CryptoKeyAES::buildAlgorithm const): Deleted.
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::algorithm const):
        (WebCore::EcKeyAlgorithm::dictionary const): Deleted.
        (WebCore::CryptoKeyEC::buildAlgorithm const): Deleted.
        * crypto/keys/CryptoKeyEC.h:
        (WebCore::EcKeyAlgorithm::EcKeyAlgorithm): Deleted.
        (WebCore::EcKeyAlgorithm::namedCurve const): Deleted.
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::algorithm const):
        (WebCore::HmacKeyAlgorithm::dictionary const): Deleted.
        (WebCore::CryptoKeyHMAC::buildAlgorithm const): Deleted.
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::RsaKeyAlgorithm::dictionary const): Deleted.
        (WebCore::RsaHashedKeyAlgorithm::dictionary const): Deleted.
        * crypto/keys/CryptoKeyRSA.h:
        (WebCore::RsaKeyAlgorithm::RsaKeyAlgorithm): Deleted.
        (WebCore::RsaKeyAlgorithm::modulusLength const): Deleted.
        (WebCore::RsaKeyAlgorithm::publicExponent const): Deleted.
        * crypto/keys/CryptoKeyRaw.cpp:
        (WebCore::CryptoKeyRaw::algorithm const):
        (WebCore::RawKeyAlgorithm::dictionary const): Deleted.
        (WebCore::CryptoKeyRaw::buildAlgorithm const): Deleted.
        * crypto/keys/CryptoKeyRaw.h:
        (WebCore::RawKeyAlgorithm::RawKeyAlgorithm): Deleted.
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::algorithm const):
        (WebCore::CryptoKeyRSA::buildAlgorithm const): Deleted.

2017-08-19  Sam Weinig  <sam@webkit.org>

        [Mac] Change uint8_t* to Vector<uint8_t> type in all crypto algorithm implementation
        https://bugs.webkit.org/show_bug.cgi?id=164939

        Reviewed by Chris Dumez.

        Address FIXMEs, replacing uint8_t*/size_t parameters with Vector<uint8_t>&.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::wrapKeyAES_KW):
        (WebCore::unwrapKeyAES_KW):
        (WebCore::CryptoAlgorithmAES_KW::platformWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::platformUnwrapKey):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::encryptRSAES_PKCS1_v1_5):
        (WebCore::decryptRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::signRSASSA_PKCS1_v1_5):
        (WebCore::verifyRSASSA_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::encryptRSA_OAEP):
        (WebCore::decryptRSA_OAEP):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):

2017-08-18  Ryosuke Niwa  <rniwa@webkit.org>

        Forbid setDragImage after dragstart
        https://bugs.webkit.org/show_bug.cgi?id=175751

        Reviewed by Wenson Hsieh.

        Removed the code to allow setting the drag mage after dragstart had happened.

        The feature was apparently used in Mac WebKit1 port but using it today causes the drag image
        to disapepar while the user is moving the mouse cursor and being drawn once it's stopped
        and results in the contionus flickering of the drag image.

        The feaure was never supported in WebKit2 and doesn't match the HTML5 specification:
        https://html.spec.whatwg.org/multipage/dnd.html#concept-dnd-rw
        https://html.spec.whatwg.org/multipage/dnd.html#dom-datatransfer-setdragimage
        or the behaviors of other browsers such as Chrome and Firefox.

        No new tests. This patch simply removes code.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setDragImage):
        (WebCore::DataTransfer::canSetDragImage const): Deleted.
        * dom/DataTransfer.h:
        (WebCore::DataTransfer::makeDragImageWritable): Deleted.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):

2017-08-18  Sam Weinig  <sam@webkit.org>

        [WebCrypto] Get rid of CryptoKeyData class and all its subclasses
        https://bugs.webkit.org/show_bug.cgi?id=169806

        Reviewed by Chris Dumez.

        - Replaces the CryptoKeyData type hierarchy 

            CryptoKeyData
              - CryptoKeyDataOctetSequence
              - CryptoKeyDataRSAComponents

          with the renamed CryptoKeyRSAComponents.

        - Removes pure virtual exportData function on CryptoKey, and all
          the implementations except the one on CryptoKeyRSA, which now is
          non-virtual, and returns a CryptoKeyRSAComponents. Update the one
          external caller, SerializedScriptValue, to handle this.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/SerializedScriptValue.cpp:
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyData.h: Removed.
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::exportData const):
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::exportData const): Deleted.
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.cpp: Removed.
        * crypto/keys/CryptoKeyDataOctetSequence.h: Removed.
        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Removed.
        * crypto/keys/CryptoKeyDataRSAComponents.h: Removed.
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::exportData const): Deleted.
        * crypto/keys/CryptoKeyEC.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::exportData const): Deleted.
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.cpp:
        (WebCore::CryptoKeyRSA::importJwk):
        (WebCore::CryptoKeyRSA::exportJwk const):
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeyRSAComponents.cpp: Copied from crypto/keys/CryptoKeyDataRSAComponents.cpp.
        (WebCore::CryptoKeyRSAComponents::CryptoKeyRSAComponents):
        (WebCore::CryptoKeyRSAComponents::~CryptoKeyRSAComponents):
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents): Deleted.
        (WebCore::CryptoKeyDataRSAComponents::~CryptoKeyDataRSAComponents): Deleted.
        * crypto/keys/CryptoKeyRSAComponents.h: Copied from crypto/keys/CryptoKeyDataRSAComponents.h.
        (WebCore::CryptoKeyRSAComponents::createPublic):
        (WebCore::CryptoKeyRSAComponents::createPrivate):
        (WebCore::CryptoKeyRSAComponents::createPrivateWithAdditionalData):
        * crypto/keys/CryptoKeyRaw.cpp:
        (WebCore::CryptoKeyRaw::exportData const): Deleted.
        * crypto/keys/CryptoKeyRaw.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPrivateKeyComponents):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::exportData const):

2017-08-18  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add support for being loaded responses
        https://bugs.webkit.org/show_bug.cgi?id=175732

        Reviewed by Chris Dumez.

        Covered by existing and rebased tests.

        Introducing a callback-based method to consume the body when the load is finished.
        Using that new method in Cache::put and calling batchPutOperation when the load is finished.

        Fixing the case of a fetch response being cloned, in which case its body should be marked as ReadableStream.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::put): Changing order of checks to reduce test flakiness risks as there is not yet support for putting responses with ReadableStream.
        (WebCore::toConnectionRecord):
        (WebCore::Cache::batchPutOperation):
        * Modules/cache/Cache.h:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::readableStreamBody): Deleted.
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::loadingBody):
        (WebCore::FetchBody::setAsReadableStream):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):
        (WebCore::FetchResponse::consumeBody):
        (WebCore::FetchResponse::consumeBodyWhenLoaded):
        * Modules/fetch/FetchResponse.h:

2017-08-18  Chris Dumez  <cdumez@apple.com>

        [Beacon] Improve error reporting
        https://bugs.webkit.org/show_bug.cgi?id=175723

        Reviewed by Darin Adler.

        Have Ping loads such as beacons report errors via their completion handler.
        The Beacon API is using this error to log a console message when beacon loads
        fail, provided that the page is still alive.

        Test: http/wpt/beacon/beacon-async-error-logging.html

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::NavigatorBeacon):
        (WebCore::NavigatorBeacon::~NavigatorBeacon):
        (WebCore::NavigatorBeacon::from):
        (WebCore::NavigatorBeacon::supplementName):
        (WebCore::NavigatorBeacon::notifyFinished):
        (WebCore::NavigatorBeacon::logError):
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/beacon/NavigatorBeacon.h:
        * loader/LoaderStrategy.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestBeaconResource):
        * loader/cache/CachedResourceLoader.h:
        * platform/network/PingHandle.h:

2017-08-18  Sam Weinig  <sam@webkit.org>

        Remove the deprecated WebKitSubtleCrypto interface
        https://bugs.webkit.org/show_bug.cgi?id=164938
        <rdar://problem/29894563>

        Reviewed by Chris Dumez.

        Remove WebKitSubtleCrypto and all of its helper classes / functionality.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp: Removed.
        * bindings/js/JSCryptoAlgorithmDictionary.h: Removed.
        * bindings/js/JSCryptoKeySerializationJWK.cpp: Removed.
        * bindings/js/JSCryptoKeySerializationJWK.h: Removed.
        * bindings/js/JSCryptoOperationData.cpp: Removed.
        * bindings/js/JSCryptoOperationData.h: Removed.
        * bindings/js/JSWebKitSubtleCryptoCustom.cpp: Removed.
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::deriveKey): Deleted.
        (WebCore::CryptoAlgorithm::encryptForWrapKey): Deleted.
        (WebCore::CryptoAlgorithm::decryptForUnwrapKey): Deleted.
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmParametersDeprecated.h: Removed.
        * crypto/CryptoKeySerialization.h: Removed.
        * crypto/WebKitSubtleCrypto.cpp: Removed.
        * crypto/WebKitSubtleCrypto.h: Removed.
        * crypto/WebKitSubtleCrypto.idl: Removed.
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::keyAlgorithmMatches const): Deleted.
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::encryptForWrapKey): Deleted.
        (WebCore::CryptoAlgorithmAES_KW::decryptForUnwrapKey): Deleted.
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches const): Deleted.
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::keyAlgorithmMatches const): Deleted.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::keyAlgorithmMatches const): Deleted.
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmAES_KWGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt): Deleted.
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt): Deleted.
        * crypto/gcrypt/CryptoAlgorithmHMACGCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        * crypto/keys/CryptoKeySerializationRaw.cpp: Removed.
        * crypto/keys/CryptoKeySerializationRaw.h: Removed.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt): Deleted.
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt): Deleted.
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        * crypto/parameters/CryptoAlgorithmAesCbcParamsDeprecated.h: Removed.
        * crypto/parameters/CryptoAlgorithmAesKeyGenParamsDeprecated.h: Removed.
        * crypto/parameters/CryptoAlgorithmHmacKeyParamsDeprecated.h: Removed.
        * crypto/parameters/CryptoAlgorithmHmacParamsDeprecated.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParamsDeprecated.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHashDeprecated.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaOaepParamsDeprecated.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaSsaParamsDeprecated.h: Removed.
        * features.json:
        * page/Crypto.cpp:
        * page/Crypto.h:
        * page/Crypto.idl:

2017-08-18  Tim Horton  <timothy_horton@apple.com>

        Remove classic mode screen scale clamping
        https://bugs.webkit.org/show_bug.cgi?id=175739
        <rdar://problem/33894531>

        Reviewed by Andy Estes.

        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenScaleFactor):
        This code is no longer needed.

2017-08-18  Daewoong Jang  <daewoong.jang@navercorp.com>

        [Curl] Improve multi-threaded networking
        https://bugs.webkit.org/show_bug.cgi?id=175713

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        (WebCore::ResourceHandleInternal::m_failureTimer): Deleted.
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::didReceiveResponse):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::cancel):
        (WebCore::CurlDownload::retain):
        (WebCore::CurlDownload::release):
        (WebCore::CurlDownload::setupRequest):
        (WebCore::CurlDownload::notifyFinish):
        (WebCore::CurlDownload::notifyFail):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlJobManager.cpp:
        (WebCore::CurlJobList::isEmpty const):
        (WebCore::CurlJobList::startJobs):
        (WebCore::CurlJobList::finishJobs):
        (WebCore::CurlJobList::notifyResult):
        (WebCore::CurlJobManager::add):
        (WebCore::CurlJobManager::cancel):
        (WebCore::CurlJobManager::callOnJobThread):
        (WebCore::CurlJobManager::startThreadIfNeeded):
        (WebCore::CurlJobManager::updateJobList):
        (WebCore::CurlJobManager::workerThread):
        (WebCore::CurlJobList::append): Deleted.
        (WebCore::CurlJobList::cancel): Deleted.
        (WebCore::CurlJobList::complete): Deleted.
        (WebCore::CurlJobList::withJob): Deleted.
        (WebCore::CurlJobList::withCurlHandle): Deleted.
        (WebCore::CurlJob::invoke): Deleted.
        (WebCore::CurlJobManager::updateJobs): Deleted.
        * platform/network/curl/CurlJobManager.h:
        (WebCore::CurlJob::CurlJob): Deleted.
        (WebCore::CurlJob::~CurlJob): Deleted.
        (WebCore::CurlJob::operator=): Deleted.
        (WebCore::CurlJob::curlHandle const): Deleted.
        (WebCore::CurlJob::ticket const): Deleted.
        (WebCore::CurlJob::finished): Deleted.
        (WebCore::CurlJob::error): Deleted.
        (WebCore::CurlJob::cancel): Deleted.
        (WebCore::CurlJobManager::isActiveJob const): Deleted.
        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::didReceiveData):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandleInternal::initialize): Deleted.
        (WebCore::ResourceHandleInternal::applyAuthentication): Deleted.
        (WebCore::getFormElementsCount): Deleted.
        (WebCore::ResourceHandleInternal::setupPUT): Deleted.
        (WebCore::ResourceHandleInternal::setupPOST): Deleted.
        (WebCore::ResourceHandleInternal::setupFormData): Deleted.
        (WebCore::ResourceHandleInternal::didFinish): Deleted.
        (WebCore::ResourceHandleInternal::didFail): Deleted.
        (WebCore::ResourceHandleInternal::calculateWebTimingInformations): Deleted.
        (WebCore::ResourceHandleInternal::handleLocalReceiveResponse): Deleted.
        (WebCore::isHttpInfo): Deleted.
        (WebCore::isHttpRedirect): Deleted.
        (WebCore::isHttpAuthentication): Deleted.
        (WebCore::isHttpNotModified): Deleted.
        (WebCore::isAppendableHeader): Deleted.
        (WebCore::removeLeadingAndTrailingQuotes): Deleted.
        (WebCore::getProtectionSpace): Deleted.
        (WebCore::ResourceHandleInternal::willPrepareSendData): Deleted.
        (WebCore::ResourceHandleInternal::didReceiveHeaderLine): Deleted.
        (WebCore::ResourceHandleInternal::didReceiveAllHeaders): Deleted.
        (WebCore::ResourceHandleInternal::didReceiveContentData): Deleted.
        (WebCore::ResourceHandleInternal::readCallback): Deleted.
        (WebCore::ResourceHandleInternal::headerCallback): Deleted.
        (WebCore::ResourceHandleInternal::writeCallback): Deleted.
        (WebCore::ResourceHandleInternal::dispatchSynchronousJob): Deleted.
        (WebCore::ResourceHandleInternal::handleDataURL): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.cpp: Added.
        (WebCore::ResourceHandleCurlDelegate::ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::~ResourceHandleCurlDelegate):
        (WebCore::ResourceHandleCurlDelegate::hasHandle const):
        (WebCore::ResourceHandleCurlDelegate::releaseHandle):
        (WebCore::ResourceHandleCurlDelegate::start):
        (WebCore::ResourceHandleCurlDelegate::cancel):
        (WebCore::ResourceHandleCurlDelegate::setDefersLoading):
        (WebCore::ResourceHandleCurlDelegate::setAuthentication):
        (WebCore::ResourceHandleCurlDelegate::dispatchSynchronousJob):
        (WebCore::ResourceHandleCurlDelegate::retain):
        (WebCore::ResourceHandleCurlDelegate::release):
        (WebCore::ResourceHandleCurlDelegate::setupRequest):
        (WebCore::ResourceHandleCurlDelegate::notifyFinish):
        (WebCore::ResourceHandleCurlDelegate::notifyFail):
        (WebCore::ResourceHandleCurlDelegate::response):
        (WebCore::ResourceHandleCurlDelegate::setupAuthentication):
        (WebCore::removeLeadingAndTrailingQuotes):
        (WebCore::ResourceHandleCurlDelegate::getProtectionSpace):
        (WebCore::isHttpInfo):
        (WebCore::isHttpRedirect):
        (WebCore::isHttpAuthentication):
        (WebCore::isHttpNotModified):
        (WebCore::isAppendableHeader):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeaderLine):
        (WebCore::ResourceHandleCurlDelegate::didReceiveAllHeaders):
        (WebCore::ResourceHandleCurlDelegate::didReceiveContentData):
        (WebCore::ResourceHandleCurlDelegate::handleLocalReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::prepareSendData):
        (WebCore::ResourceHandleCurlDelegate::didFinish):
        (WebCore::ResourceHandleCurlDelegate::didFail):
        (WebCore::ResourceHandleCurlDelegate::handleDataURL):
        (WebCore::ResourceHandleCurlDelegate::setupPOST):
        (WebCore::ResourceHandleCurlDelegate::setupPUT):
        (WebCore::ResourceHandleCurlDelegate::getFormElementsCount):
        (WebCore::ResourceHandleCurlDelegate::setupFormData):
        (WebCore::ResourceHandleCurlDelegate::applyAuthentication):
        (WebCore::ResourceHandleCurlDelegate::setWebTimings):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeader):
        (WebCore::ResourceHandleCurlDelegate::didReceiveData):
        (WebCore::ResourceHandleCurlDelegate::willSendData):
        (WebCore::ResourceHandleCurlDelegate::didReceiveHeaderCallback):
        (WebCore::ResourceHandleCurlDelegate::didReceiveDataCallback):
        (WebCore::ResourceHandleCurlDelegate::willSendDataCallback):
        * platform/network/curl/ResourceHandleCurlDelegate.h: Added.

2017-08-18  Ryosuke Niwa  <rniwa@webkit.org>

        iOS 10 debug build fix.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer):

2017-08-18  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DataTransferAccessPolicy to match spec and refactor related node
        https://bugs.webkit.org/show_bug.cgi?id=175704

        Reviewed by Wenson Hsieh.

        Renamed DataTransferAccessPolicy to DataTransfer::StoreMode to match the drag data store mode concept
        in the HTML5 specification:
        https://html.spec.whatwg.org/multipage/dnd.html#drag-data-store-mode

        DataTransfer in addition to those states can be disassociated from the drag data store when it becomes
        no longer valid. We also support a special mode which allows only updating the drag image.
        These two states, Invalid and DragImageWritable, are added in addition to the three states in the spec.

        Also split DragAndDrop type of DataTransfer into DragAndDropData and DragAndDropFiles, and refactored
        the related code.

        No new tests since there should be no behavioral change.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer): No longer takes forFileDrag boolean since it's folded into type.
        (WebCore::DataTransfer::createForCopyAndPaste):
        (WebCore::DataTransfer::~DataTransfer):
        (WebCore::DataTransfer::setAccessPolicy): Deleted.
        (WebCore::DataTransfer::canReadTypes const):
        (WebCore::DataTransfer::canReadData const):
        (WebCore::DataTransfer::canWriteData const):
        (WebCore::DataTransfer::createForInputEvent):
        (WebCore::DataTransfer::createForDrag):
        (WebCore::DataTransfer::createForDrop):
        (WebCore::DataTransfer::canSetDragImage const):
        * dom/DataTransfer.h:
        (WebCore::DataTransfer::makeInvalidForSecurity): Added.
        (WebCore::DataTransfer::makeDragImageWritable): Added.
        * dom/DataTransferAccessPolicy.h: Removed.
        * editing/Editor.cpp:
        (WebCore::dispatchClipboardEvent): Moved and renamed from dispatchCPPEvent. Now computes the store mode
        inside the function to match the spec: https://w3c.github.io/clipboard-apis/#fire-a-clipboard-event
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canDHTMLPaste):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::tryDHTMLPaste):
        (WebCore::Editor::dispatchCPPEvent): Deleted.
        * editing/Editor.h:
        * page/DragController.cpp:
        (WebCore::createDataTransferToUpdateDrag): Extracted to share code.
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::tryDHTMLDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::invalidateDataTransfer):
        (WebCore::EventHandler::handleDrag):

2017-08-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Followup (r220289): RenderImageResourceStyleImage code clean up
        https://bugs.webkit.org/show_bug.cgi?id=175444

        Reviewed by Darin Adler.

        RenderImageResourceStyleImage may be created with a StyleImage of type
        StyleGeneratedImage. It may also be associated with a CachedImage which 
        is loaded through a source URL. In this case, adding and removing m_renderer
        as a client of the CachedImage will be done through 
        RenderImageResource::setCachedImage().

        RenderImageResource::setCachedImage() is already called from 
        ImageLoader::updateRenderer() when the CachedImage finishes loading. This
        call adds m_renderer to the clients of the CachedImage. 
        RenderImageResource::setCachedImage() will also be called from 
        RenderImageResourceStyleImage::shutdown() via RenderImageResource::shutdown()
        to remove m_renderer from the clients of CachedImage by passing a null pointer.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleWillChange):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::initialize):
        (WebCore::RenderImageResource::shutdown):
        (WebCore::RenderImageResource::setCachedImage):
        (WebCore::RenderImageResource::resetAnimation):
        (WebCore::RenderImageResource::image const):
        (WebCore::RenderImageResource::setContainerSizeForRenderer):
        (WebCore::RenderImageResource::imageSize const):
        (WebCore::RenderImageResource::~RenderImageResource): Deleted.
        (WebCore::RenderImageResource::errorOccurred const): Deleted.
        (WebCore::RenderImageResource::imageHasRelativeWidth const): Deleted.
        (WebCore::RenderImageResource::imageHasRelativeHeight const): Deleted.
        (WebCore::RenderImageResource::intrinsicSize const): Deleted.
        (WebCore::RenderImageResource::getImageSize const): Deleted.
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::initialize):
        (WebCore::RenderImageResource::renderer const):
        (WebCore::RenderImageResource::errorOccurred const):
        (WebCore::RenderImageResource::imageHasRelativeWidth const):
        (WebCore::RenderImageResource::imageHasRelativeHeight const):
        (WebCore::RenderImageResource::imageSize const):
        (WebCore::RenderImageResource::intrinsicSize const):
        (WebCore::RenderImageResource::imagePtr const):
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::initialize):
        (WebCore::RenderImageResourceStyleImage::shutdown):
        (WebCore::RenderImageResourceStyleImage::image const):
        (WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer):
        (WebCore::RenderImageResourceStyleImage::~RenderImageResourceStyleImage): Deleted.
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):

2017-08-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto][Mac] Replace CCECCryptorGetKeyComponents with CCECCryptorExportKey for exporting ECC JWKs
        https://bugs.webkit.org/show_bug.cgi?id=175657
        <rdar://problem/33797150>

        Reviewed by Brent Fulgham.

        CCECCryptorGetKeyComponents returns components in unpadded formats. In some minor cases, the ECC components
        do need padding. Therefore, we occasionally see some corrupted outputs in JWKs. To overcome that, this patch
        replaces CCECCryptorGetKeyComponents with CCECCryptorExportKey which does padding all the time.

        In the meantime, this patch also makes export* methods return OperationError if any error occur in the
        underlying operations though very unlikely.

        Test: crypto/subtle/ecdsa-generate-export-import-jwk-sign-verify.html

        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::exportKey):
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::exportKey):
        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::exportRaw const):
        (WebCore::CryptoKeyEC::exportJwk const):
        (WebCore::CryptoKeyEC::exportSpki const):
        (WebCore::CryptoKeyEC::exportPkcs8 const):
        * crypto/keys/CryptoKeyEC.h:
        * crypto/mac/CryptoKeyECMac.cpp:
        (WebCore::CryptoKeyEC::platformExportRaw const):
        (WebCore::CryptoKeyEC::platformAddFieldElements const):
        (WebCore::CryptoKeyEC::platformExportSpki const):
        (WebCore::CryptoKeyEC::platformExportPkcs8 const):

2017-08-18  Per Arne Vollan  <pvollan@apple.com>

        [Win] accessibility/heading-crash-after-hidden.html is a flaky crash.
        https://bugs.webkit.org/show_bug.cgi?id=173536

        Reviewed by Brent Fulgham.

        If the tree state is dirty, accessible objects are deleted while iterating over children
        under AccessibilityNodeObject::textUnderElement when the style is updated. Make sure the
        style is updated before this method is called.

        No new tests, covered by existing tests.

        * accessibility/win/AccessibilityObjectWrapperWin.cpp:
        (WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue):

2017-08-18  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add response body storage
        https://bugs.webkit.org/show_bug.cgi?id=175658

        Reviewed by Alex Christensen.

        Covered by rebased tests.
        Tests are still flaky until waiting for end of fetch load is implemented.

        Adding a response body within CacheStorageConnection::Record.
        Adding ability to pass this body from/to the main thread.

        Adding response body consumption into a CacheStorageConnection::Record.
        Adding response body setting from a CacheStorageConnection::Record.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/cache/Cache.cpp:
        (WebCore::Cache::put):
        (WebCore::toConnectionRecord):
        (WebCore::Cache::updateRecords):
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::copyResponseBody):
        (WebCore::CacheStorageConnection::isolatedResponseBody):
        (WebCore::CacheStorageConnection::Record::copy const):
        * Modules/cache/CacheStorageConnection.h:
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::toCrossThreadRecordData):
        (WebCore::fromCrossThreadRecordData):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::bodyAsFormData const):
        (WebCore::FetchBody::take):
        (WebCore::FetchBody::bodyForInternalRequest const): Deleted.
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::setAsFormData):
        * Modules/fetch/FetchBodyConsumer.h:
        (WebCore::FetchBodyConsumer::setData):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::resourceRequest const):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::consumeBody):
        (WebCore::FetchResponse::setBodyData):
        * Modules/fetch/FetchResponse.h:

2017-08-18  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Add support for a callback-based fetch
        https://bugs.webkit.org/show_bug.cgi?id=175710

        Reviewed by Alex Christensen.

        No change of behavior.

        Moving from a DOMPromise to a Callback taking an ExceptionOr<FetchResponse&>.
        Updating window and worker call sites.

        * Modules/fetch/DOMWindowFetch.cpp:
        (WebCore::DOMWindowFetch::fetch):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::didFail):
        (WebCore::FetchResponse::BodyLoader::BodyLoader):
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse):
        (WebCore::FetchResponse::BodyLoader::stop):
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/WorkerGlobalScopeFetch.cpp:
        (WebCore::WorkerGlobalScopeFetch::fetch):

2017-08-18  Brady Eidson  <beidson@apple.com>

        Bounce ServiceWorker jobs to the Storage Process.
        https://bugs.webkit.org/show_bug.cgi?id=175650

        Reviewed by Andy Estes.

        No new tests (Covered by both changes and consistencies in existing tests)

        This lays the groundwork for the SW job queue being in the StorageProcess by actually
        setting up some objects for IPC communication and actually sending things over the wire.

        The main point of IPC is the WebCore abstract base class "SWServer::Connection"

        A collection of them will soon be managed by the SWServer itself in the StorageProcess.

        That object will be the stand-in for IPC on both the WebProcess and StorageProcess side.

        Currently, any job that we try to schedule still immediately rejects (though now it does
        so asynchronously instead of synchronously).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/ExceptionData.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
        (WebCore::ExceptionData::toException const):
        (WebCore::ExceptionData::encode const):
        (WebCore::ExceptionData::decode):

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::scheduleJob):
        * workers/service/ServiceWorkerContainer.h:

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::failedWithException):
        (WebCore::ServiceWorkerJob::data const):
        * workers/service/ServiceWorkerJob.h:

        * workers/service/ServiceWorkerJobData.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):

        * workers/service/ServiceWorkerJobType.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.

        * workers/service/ServiceWorkerProvider.h:

        * workers/service/ServiceWorkerRegistrationParameters.h:

        * workers/service/server/SWServer.cpp: Copied from Source/WebKit/WebProcess/Storage/WebServiceWorkerProvider.cpp.
        (WebCore::SWServer::Connection::scheduleJob):
        (WebCore::SWServer::Connection::jobRejected):
        * workers/service/server/SWServer.h: Copied from Source/WebCore/workers/service/ServiceWorkerProvider.h.
        (WebCore::SWServer::Connection::~Connection):

2017-08-18  Chris Dumez  <cdumez@apple.com>

        [Beacon] Add support for quota limitation
        https://bugs.webkit.org/show_bug.cgi?id=175443
        <rdar://problem/33729002>

        Reviewed by Youenn Fablet.

        LoaderStrategy::startPingLoad() now takes a completion handler parameter, allowing CachedResource::load()
        to know when a Beacon load is complete. This was needed in order for the fetch in-flight keepalive request
        quota limit to work properly for beacon loads as well. We need to know when the beacon load completes in
        order to know if the beacon is in-flight or not and only free up its allocated quota once it is no longer
        in-flight.

        No new tests, updated existing test.

        * loader/LoaderStrategy.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::startPingLoad):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * platform/network/PingHandle.h:

2017-08-18  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add a WK2 implementation of CacheStorageConnection
        https://bugs.webkit.org/show_bug.cgi?id=175640

        Reviewed by Alex Christensen & Chris Dumez.

        * Modules/cache/CacheStorageConnection.cpp: Adding Internal error.
        * Modules/cache/CacheStorageConnection.h: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Exporting CacheQueryOptions.h header.

2017-08-18  Antti Koivisto  <antti@apple.com>

        Factor render tree mutation code from RenderListItem to RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=175718

        Reviewed by Andreas Kling.

        We already stopped doing layout time mutations. We can now move the code out too.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderListItem.cpp:
        (WebCore::isHTMLListElement):
        (WebCore::getParentOfFirstLineBox): Deleted.
        (WebCore::firstNonMarkerChild): Deleted.
        (WebCore::RenderListItem::updateMarkerRenderer): Deleted.

            Moved to RenderTreeUpdater::ListItem.

        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::willBeDestroyed):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::pushParent):
        (WebCore::RenderTreeUpdater::popParent):
        (WebCore::RenderTreeUpdater::updateBeforeDescendants):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):

            Factor pre/post update into functions.

        (WebCore::RenderTreeUpdater::updateBeforeOrAfterPseudoElement):
        * style/RenderTreeUpdater.h:
        * style/RenderTreeUpdaterListItem.cpp: Added.

            Mutation functions move here.

        (WebCore::getParentOfFirstLineBox):
        (WebCore::firstNonMarkerChild):
        (WebCore::RenderTreeUpdater::ListItem::updateMarker):
        * style/RenderTreeUpdaterListItem.h: Added.

2017-08-18  Ms2ger  <Ms2ger@gmail.com>

        [GTK] Show controls if a video element isn't allowed to play inline.
        https://bugs.webkit.org/show_bug.cgi?id=141705

        Reviewed by Xabier Rodriguez-Calvar.

        Test: covered by media/video-fullscreeen-only-controls.html [sic].

        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.shouldHaveControls):

2017-08-18  Zan Dobersek  <zdobersek@igalia.com>

        [EME] MediaKeySession has to initiate playback resume on HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=175671

        Reviewed by Xabier Rodriguez-Calvar.

        In MediaKeySession::updateKeyStatuses(), HTMLMediaElement objects that are
        associated with the MediaKeys instance that created this session have to
        be notified in order to run the 'Attempt to Resume Playback If Necessary'
        algorithm.

        MediaKeys object now tracks the sessions that were created through it.
        MediaKeySession object is passed a MediaKeys reference, and has that
        reference invalidated if/when the MediaKeys object is destroyed.

        In MediaKeySession::updateKeyStatuses(), a task is now queued, notifying
        the MediaKeys object, if any, that the associated HTMLMediaElement
        instances have to run the mentioned algorithm. The associated media
        elements are stored through CDMClient pointers, with HTMLMediaElement
        class inheriting from the newly-introduced CDMClient interface.

        HTMLMediaElement::cdmClientAttemptToResumePlaybackIfNecessary() is left
        unimplemented for now. The object will attach itself to and detach from
        the associated MediaKeys object in setMediaKeys() and the destructor,
        enabling the MediaKeys object to properly dispatch the playback resume
        requests for the attached clients.

        * Modules/encryptedmedia/CDMClient.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeys.h.
        (WebCore::CDMClient::~CDMClient):
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::create):
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::detachKeys):
        (WebCore::MediaKeySession::updateKeyStatuses):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::~MediaKeys):
        (WebCore::MediaKeys::createSession):
        (WebCore::MediaKeys::attachCDMClient):
        (WebCore::MediaKeys::detachCDMClient):
        (WebCore::MediaKeys::attemptToResumePlaybackOnClients):
        * Modules/encryptedmedia/MediaKeys.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::cdmClientAttemptToResumePlaybackIfNecessary):
        * html/HTMLMediaElement.h:

2017-08-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r220854.
        https://bugs.webkit.org/show_bug.cgi?id=175716

        I'm not sure we really need this (Requested by KaL on
        #webkit).

        Reverted changeset:

        "[GTK][WPE] Add NTLM authentication enabled API"
        https://bugs.webkit.org/show_bug.cgi?id=122952
        http://trac.webkit.org/changeset/220854

2017-08-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Input Events] Rename inputType "formatForeColor" to "formatFontColor"
        https://bugs.webkit.org/show_bug.cgi?id=175703

        Reviewed by Ryosuke Niwa.

        Renames an inputType value to match the spec. There is no other change in behavior.
        Rebaselines fast/events/input-events-selection-forecolor-data.html and fast/events/input-events-forecolor-data.html.

        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):

2017-08-17  Daewoong Jang  <daewoong.jang@navercorp.com>

        [Curl] Improve multi-threaded networking
        https://bugs.webkit.org/show_bug.cgi?id=175253

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlMultiHandle::CurlMultiHandle):
        (WebCore::CurlHandle::CurlHandle):
        (WebCore::CurlHandle::initialize):
        (WebCore::CurlHandle::setSslKeyPassword):
        (WebCore::CurlHandle::setSslErrors):
        (WebCore::CurlHandle::getSslErrors):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::getResponse const):
        (WebCore::CurlDownload::setupRequest):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::didReceiveData):
        (WebCore::CurlDownload::headerCallback):
        (WebCore::CurlDownload::getTempPath const): Deleted.
        (WebCore::CurlDownload::getUrl const): Deleted.
        (WebCore::CurlDownload::downloadFinishedCallback): Deleted.
        (WebCore::CurlDownload::downloadFailedCallback): Deleted.
        (WebCore::CurlDownload::receivedDataCallback): Deleted.
        (WebCore::CurlDownload::receivedResponseCallback): Deleted.
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::sslErrors const):
        (WebCore::ResourceError::setSSLErrors): Deleted.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::initialize):
        (WebCore::ResourceHandleInternal::didFail):
        (WebCore::ResourceHandleInternal::dispatchSynchronousJob):
        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowedClientHosts):
        (WebCore::addAllowedClientCertificate):
        (WebCore::getSSLClientCertificate):
        (WebCore::certVerifyCallback):
        (WebCore::setSSLVerifyOptions):
        (WebCore::setSSLClientCertificate): Deleted.
        * platform/network/curl/SSLHandle.h:

2017-08-17  Chris Dumez  <cdumez@apple.com>

        Regression(r220817): We should only copy the original request headers for Ping loads
        https://bugs.webkit.org/show_bug.cgi?id=175679

        Reviewed by Youenn Fablet.

        For performance reason, we should only copy the original request headers for Ping loads
        (Beacon at the moment), not for all CachedResourceRequests.

        * loader/LoaderStrategy.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::shouldUsePingLoad):
        (WebCore::CachedResource::setOriginalRequestHeaders):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::releaseResourceRequest):
        (WebCore::CachedResourceRequest::releaseOriginalRequestHeaders): Deleted.

2017-08-17  Don Olmstead  <don.olmstead@sony.com>

        [PAL] Relocate SessionID to root
        https://bugs.webkit.org/show_bug.cgi?id=175684

        Reviewed by Alex Christensen.

        No new tests. No change in functionality.

        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        * loader/cache/MemoryCache.h:
        * loader/cocoa/DiskCacheMonitorCocoa.h:
        * page/CacheStorageProvider.h:
        * page/Page.h:
        * page/PlugInClient.h:
        * page/SocketProvider.h:
        * platform/CookiesStrategy.h:
        * platform/WebCoreCrossThreadCopier.cpp:
        * platform/network/CacheValidation.h:
        * platform/network/NetworkStorageSession.cpp:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImpl.h:
        * workers/WorkerGlobalScope.h:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistrationParameters.h:

2017-08-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix the build on other platforms after r220865
        https://bugs.webkit.org/show_bug.cgi?id=175683

        Reviewed by Tim Horton.

        Instead of special casing iOS 10 behavior with __IPHONE_OS_VERSION_MAX_ALLOWED < 110000, revert to special
        casing iOS 11 behavior with __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000. This is because other targets that are
        neither iOS 10 nor 11 will fail the "before iOS 11" compile-time check, and subsequently assume that item
        providers exist. To fix this, flip the compiler-time checks and the order of codeblocks in the
        PlatformPasteboard::write methods.

        There is no change in behavior.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::registerItemToPasteboard):
        (WebCore::PlatformPasteboard::write):

2017-08-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wreturn-type warnings in CryptoKey.cpp and SubtleCrypto.cpp
        https://bugs.webkit.org/show_bug.cgi?id=175675

        Reviewed by Jiewen Tan.

        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::algorithm const):
        * crypto/SubtleCrypto.cpp:
        (WebCore::toCryptoKeyUsageBitmap):
        (WebCore::toKeyData):

2017-08-17  Andreas Kling  <akling@apple.com>

        Disable CSS regions at compile time
        https://bugs.webkit.org/show_bug.cgi?id=175630

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2017-08-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Respect type fidelities when copying image elements to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=175638
        <rdar://problem/26556043>

        Reviewed by Ryosuke Niwa.

        Ensures that we respect type fidelities when copying on iOS, by unifying pasteboard writing codepaths across
        dragging and copying. When dragging and copying, we now generate and set UIItemProviders on the UIPasteboard.

        Tests: ActionSheetTests.CopyImageElementWithHREF
               ActionSheetTests.CopyImageElementWithoutHREF

        * platform/PlatformPasteboard.h:

        Remove all variants of the writeObjectRepresentations helper method. Now that both paths for writing to the
        pasteboard are unified, it's no longer useful to separate out item-provider-based pasteboard logic.

        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:

        Replaces -setItemsUsingRegistrationInfoLists: with -setRegistrationInfoLists:. Rather than have a helper that
        both sets up item providers and item registration lists, split this functionality out into two setters. This is
        because UIPasteboard does not need to know about the registration info lists used to set up the item providers
        in the first place, but internal drag-and-drop clients require this information immediately when starting a drag
        in order to construct custom drag previews.

        (WebCore::richTextRepresentationsForPasteboardWebContent):
        (WebCore::registerItemToPasteboard):

        Add a new helper to register item providers to the pasteboard, given an WebItemProviderRegistrationInfoList.

        (WebCore::PlatformPasteboard::write):
        (WebCore::PlatformPasteboard::writeObjectRepresentations): Deleted.

        Refactors PlatformPasteboard::write to always generate and set item providers, unless we're building for an SDK
        prior to iOS 11. For images, strings and URLs, we can simply transition to using the new item-provider-based
        codepaths used for drag and drop. For web content, we add two additional UTIs that were present when copying,
        but not when dragging: flat RTFD and a string constant used to indicate to UIKit that the pasteboard contains
        rich text.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList init]):
        (-[WebItemProviderRegistrationInfoList addData:forType:]):
        (-[WebItemProviderRegistrationInfoList addRepresentingObject:]):
        (-[WebItemProviderRegistrationInfoList numberOfItems]):
        (-[WebItemProviderRegistrationInfoList itemAtIndex:]):
        (-[WebItemProviderRegistrationInfoList itemProvider]):
        (-[WebItemProviderRegistrationInfoList description]):

        Make some small tweaks in WebItemProviderPasteboard (and related classes):
        1. Transition to preferredPresentationSize from estimatedDisplayedSize, which is now deprecated.
        2. Remove calls to -initWithItemProviderData:typeIdentifier:error:, which is deprecated.
        3. Rename _items to _representations to better reflect the role of WebItemProviderRegistrationInfo.
        4. Implement -description for WebItemProviderRegistrationInfoList for debugging purposes.

        (-[WebItemProviderPasteboard valuesForPasteboardType:inItemSet:]):
        (-[WebItemProviderPasteboard setRegistrationInfoLists:]):
        (-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]): Deleted.

2017-08-17  Youenn Fablet  <youenn@apple.com>

        Add a DOMPromiseDeferred method to handle ExceptionOr<> results
        https://bugs.webkit.org/show_bug.cgi?id=175603

        Reviewed by Darin Adler.

        No change of behavior.

        Introduce DOMPromiseDeferred::settle to reject/resolve a promise with an ExceptionOr<>.
        Making batchPutOperation/batchDeleteOperation take a Function with an ExceptionOr<>.
        Using DOMPromiseDeferred::settle in Cache put/remove.
        Updated CacheStorageConnection to create ExceptionOr<> from CacheStorageConnection::Error.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::put):
        (WebCore::Cache::remove):
        (WebCore::Cache::batchDeleteOperation):
        (WebCore::Cache::batchPutOperation):
        * Modules/cache/Cache.h:
        * Modules/cache/CacheStorage.cpp:
        (WebCore::CacheStorage::open):
        (WebCore::CacheStorage::remove):
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::errorToException):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::errorToException):
        (WebCore::CacheStorageConnection::exceptionOrResult):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DOMPromiseDeferred::settle):
        (WebCore::DOMPromiseDeferred<void>::settle):

2017-08-17  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] AppendPipeline: support dispatch of decryption-specific GstStructure into the pipeline
        https://bugs.webkit.org/show_bug.cgi?id=175668

        Reviewed by Xabier Rodriguez-Calvar.

        Add the AppendPipeline::dispatchDecryptionStructure() method. Callers can
        pass in a GstStructure object that contains all the information the
        decryption elements in the pipeline will require to properly decrypt the
        content. In case the decryptor element isn't available yet, the
        GstStructure is stored and dispatched when that element becomes available.

        The dispatch itself simply creates a new custom GstEvent that adopts the
        given GstStructure object, sends that into the pipeline element, and
        shifts the state to 'ongoing'.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        (WebCore::AppendPipeline::dispatchPendingDecryptionStructure):
        (WebCore::AppendPipeline::dispatchDecryptionStructure):
        * platform/graphics/gstreamer/mse/AppendPipeline.h: Remove a redundant private: label.

2017-08-17  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] GstStructure shouldn't be handled through GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=175673

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformCaps): GstStructure isn't
        ref-counted, so it should be handled through the GUniquePtr<GstStructure>
        smart pointer.

2017-08-17  Youenn Fablet  <youenn@apple.com>

        [Mac/iOS] Increase the audio buffer size when audio capture is on but web audio is not used
        https://bugs.webkit.org/show_bug.cgi?id=175631

        Reviewed by Eric Carlson.

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState): Change value from 128 to the equivalent of 20ms when audio capture happens but not web audio.

2017-08-17  Antti Koivisto  <antti@apple.com>

        RenderListItem - Avoid render tree mutation during layout
        https://bugs.webkit.org/show_bug.cgi?id=175666

        Reviewed by Andreas Kling.

        Mutations should be done by RenderTreeUpdater only.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerRenderer):

            This is now called by RenderTreeUpdater only.
            Remove code dealing with this being called at layout time.
            Merged marker construction code from styleDidChange here and renamed for clarity.

        (WebCore::RenderListItem::layout):
        (WebCore::RenderListItem::computePreferredLogicalWidths):

            Remove mutating calls.

        (WebCore::RenderListItem::styleDidChange): Deleted.
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded): Deleted.
        * rendering/RenderListItem.h:
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):

            Call updateMarkerRenderer.

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::popParent):
        (WebCore::RenderTreeUpdater::updateBeforeOrAfterPseudoElement):

            Call updateMarkerRenderer.

2017-08-17  Don Olmstead  <don.olmstead@sony.com>

        [PAL] Move SessionID into PAL
        https://bugs.webkit.org/show_bug.cgi?id=174192

        Reviewed by Antti Koivisto.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::sessionID const):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::elementWithID):
        (WebCore::HTMLMediaElement::finishParsingChildren):
        (WebCore::HTMLMediaElement::scheduleEvent):
        (WebCore::HTMLMediaElement::canPlayType const):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::textTracksAreReady const):
        (WebCore::HTMLMediaElement::textTrackModeChanged):
        (WebCore::HTMLMediaElement::noneSupported):
        (WebCore::HTMLMediaElement::mediaLoadingFailedFatally):
        (WebCore::HTMLMediaElement::mediaLoadingFailed):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::addPlayedRange):
        (WebCore::HTMLMediaElement::seekTask):
        (WebCore::HTMLMediaElement::refreshCachedTime const):
        (WebCore::HTMLMediaElement::currentMediaTime const):
        (WebCore::HTMLMediaElement::setWebkitPreservesPitch):
        (WebCore::HTMLMediaElement::ended const):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::togglePlayState):
        (WebCore::HTMLMediaElement::beginScrubbing):
        (WebCore::HTMLMediaElement::playbackProgressTimerFired):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack):
        (WebCore::HTMLMediaElement::didAddTextTrack):
        (WebCore::HTMLMediaElement::didRemoveTextTrack):
        (WebCore::controllerJSValue):
        (WebCore::HTMLMediaElement::configureTextTracks):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::sourceWasRemoved):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::potentiallyPlaying const):
        (WebCore::HTMLMediaElement::endedPlayback const):
        (WebCore::HTMLMediaElement::stoppedDueToErrors const):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::userCancelledLoad):
        (WebCore::HTMLMediaElement::canSuspendForDocumentSuspension const):
        (WebCore::HTMLMediaElement::addEventListener):
        (WebCore::HTMLMediaElement::isFullscreen const):
        (WebCore::HTMLMediaElement::toggleStandardFullscreenState):
        (WebCore::HTMLMediaElement::waitForPreparedForInlineThen):
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        (WebCore::HTMLMediaElement::updateTextTrackDisplay):
        (WebCore::HTMLMediaElement::mediaControls const):
        (WebCore::HTMLMediaElement::configureTextTrackDisplay):
        (WebCore::HTMLMediaElement::setMediaGroup):
        (WebCore::HTMLMediaElement::setControllerForBindings):
        (WebCore::HTMLMediaElement::isBlockedOnMediaController const):
        (WebCore::HTMLMediaElement::prepareMediaFragmentURI):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::fileSize const):
        (WebCore::HTMLMediaElement::mediaSessionTitle const):
        (WebCore::needsSeekingSupportQuirk):
        (WebCore::HTMLMediaElement::supportsSeeking const):
        (WebCore::HTMLMediaElement::doesHaveAttribute const):
        (WebCore::HTMLMediaElement::isVideoTooSmallForInlinePlayback):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/EmptyClients.cpp:
        * loader/FrameLoaderClient.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::sessionID const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::sessionID const):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::CachedSVGFont):
        * loader/cache/CachedSVGFont.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::CachedTextTrack):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::sessionResourceMap const):
        (WebCore::MemoryCache::ensureSessionResourceMap):
        (WebCore::MemoryCache::resourceForRequest):
        (WebCore::MemoryCache::addImageToCache):
        (WebCore::MemoryCache::removeImageFromCache):
        (WebCore::MemoryCache::forEachSessionResource):
        (WebCore::MemoryCache::removeResourcesWithOrigins):
        (WebCore::MemoryCache::originsWithCache const):
        (WebCore::MemoryCache::evictResources):
        * loader/cache/MemoryCache.h:
        * loader/cocoa/DiskCacheMonitorCocoa.h:
        (WebCore::DiskCacheMonitor::sessionID const):
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::monitorFileBackingStoreCreation):
        (WebCore::DiskCacheMonitor::DiskCacheMonitor):
        * page/CacheStorageProvider.h:
        * page/DatabaseProvider.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::enableLegacyPrivateBrowsing):
        (WebCore::Page::sessionID const):
        (WebCore::Page::setSessionID):
        * page/Page.h:
        * page/PlugInClient.h:
        * page/SocketProvider.cpp:
        (WebCore::SocketProvider::createSocketStreamHandle):
        * page/SocketProvider.h:
        * platform/CookiesStrategy.h:
        * platform/WebCoreCrossThreadCopier.cpp:
        (WTF::PAL::SessionID>::copy):
        (WTF::WebCore::SessionID>::copy): Deleted.
        * platform/WebCoreCrossThreadCopier.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::headerValueForVary):
        (WebCore::collectVaryingRequestHeaders):
        (WebCore::verifyVaryingRequestHeaders):
        * platform/network/CacheValidation.h:
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::globalSessionMap):
        (WebCore::NetworkStorageSession::storageSession):
        (WebCore::NetworkStorageSession::destroySession):
        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::sessionID const):
        * platform/network/NetworkStorageSessionStub.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        (WebCore::NetworkStorageSession::defaultStorageSession):
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::defaultStorageSession):
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        * platform/network/cf/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
        * platform/network/curl/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::create):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::defaultStorageSession):
        (WebCore::NetworkStorageSession::ensurePrivateBrowsingSession):
        (WebCore::NetworkStorageSession::ensureSession):
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::create):
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        * workers/WorkerThread.h:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistrationParameters.h:

2017-08-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add NTLM authentication enabled API
        https://bugs.webkit.org/show_bug.cgi?id=122952

        Reviewed by Michael Catanzaro.

        Add/remove NTLM feature to/from soup session depending on whether the feature is enabled or disabled.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::setInitialNTLMAuthenticationEnabled):
        (WebCore::SoupNetworkSession::setNTLMAuthenticationEnabled):
        * platform/network/soup/SoupNetworkSession.h:

2017-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Add the support for mutating clipboard data via DataTransferItemList
        https://bugs.webkit.org/show_bug.cgi?id=175639

        Reviewed by Wenson Hsieh.

        Added the support for adding plaintext data via dataTransfer.items.add, clearing data via clear,
        and removing an entry via remove. When DataTransferItem is removed from DataTransferItemList,
        we must put into the disabled mode.

        To support the removal of DataTransferItem, this patch replaces a reference to DataTransfer by
        a WeakPtr to DataTransferItemList, and stops forwarding ref from DataTransferItem to DataTransfer.
        This means that DataTransfer can now be GC'ed before DataTransferItem is GC'ed.

        Because the identify and the order of DataTransferItems need to be preserved, we can't simply
        re-popluate m_itemList in DataTransferItemList. Instead, whenever the clipboard content is mutated,
        we make the parallel modifications to m_itemList. This includes changes made via DataTransfer
        methods such as setData and clearData.

        Test: editing/pasteboard/datatransfer-items-copy-plaintext.html

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::clearData): Invoke didClearStringData when m_itemList exists.
        (WebCore::DataTransfer::setData): Ditto.
        (WebCore::DataTransfer::createForInputEvent):
        (WebCore::DataTransfer::createForDrag):
        (WebCore::DataTransfer::createForDrop):
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::create):
        (WebCore::DataTransferItem::DataTransferItem):
        (WebCore::DataTransferItem::clearListAndPutIntoDisabledMode): Added.
        (WebCore::DataTransferItem::type const): Moved from the header.
        (WebCore::DataTransferItem::getAsString const):
        (WebCore::DataTransferItem::getAsFile const):
        * dom/DataTransferItem.h:
        (WebCore::DataTransferItem::ref): Deleted.
        (WebCore::DataTransferItem::deref): Deleted.
        (WebCore::DataTransferItem::isFile const): Added.
        (WebCore::DataTransferItem::type const): Move to the cpp file.
        * dom/DataTransferItemList.cpp:
        (WebCore::isSupportedType): Moved.
        (WebCore::DataTransferItemList::DataTransferItemList): Moved from the header.
        (WebCore::DataTransferItemList::~DataTransferItemList): Added.
        (WebCore::DataTransferItemList::item):
        (WebCore::DataTransferItemList::add): Implemented the variant to add string data.
        (WebCore::DataTransferItemList::remove): Implemented. For now, we don't have to deal with removing
        a file since a writable dataTransfer never contains a File object.
        (WebCore::DataTransferItemList::clear): Implemented.
        (WebCore::DataTransferItemList::ensureItems const):
        (WebCore::removeStringItemOfLowercasedType): Added.
        (WebCore::DataTransferItemList::didClearStringData): Called when dataTransfer.clear is called.
        (WebCore::DataTransferItemList::didSetStringData): Ditto for 
        * dom/DataTransferItemList.h:
        (WebCore::DataTransferItemList): Added a WeakPtrFactory. Also use a vector of Ref<DataTransferItem>
        instead of unique_ptr<DataTransferItem> since DataTransferItem can outlive DataTransferItemList.
        (WebCore::DataTransferItemList::dataTransfer): Added.
        * dom/DataTransferItemList.idl:

2017-08-16  Andy Estes  <aestes@apple.com>

        [Apple Pay] Rename PaymentRequest to ApplePaySessionPaymentRequest
        https://bugs.webkit.org/show_bug.cgi?id=175648

        Reviewed by Tim Horton.

        The W3C Payment Request API defines an interface called PaymentRequest, which conflicts with
        an existing Apple Pay class. This patch renames PaymentRequest to
        ApplePaySessionPaymentRequest so that a follow-on patch can introduce PaymentRequest for the
        W3C API.

        * Modules/applepay/ApplePayError.h:
        * Modules/applepay/ApplePayLineItem.h:
        * Modules/applepay/ApplePayPaymentRequest.h:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidateTotal):
        (WebCore::convertAndValidate):
        (WebCore::ApplePaySession::ApplePaySession):
        (WebCore::ApplePaySession::didSelectShippingMethod):
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePaySessionPaymentRequest.cpp: Renamed from Source/WebCore/Modules/applepay/PaymentRequest.cpp.
        (WebCore::ApplePaySessionPaymentRequest::ApplePaySessionPaymentRequest):
        (WebCore::ApplePaySessionPaymentRequest::~ApplePaySessionPaymentRequest):
        (WebCore::ApplePaySessionPaymentRequest::isValidSupportedNetwork):
        * Modules/applepay/ApplePaySessionPaymentRequest.h: Renamed from Source/WebCore/Modules/applepay/PaymentRequest.h.
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp:
        (WebCore::convert):
        (WebCore::ApplePayShippingMethodSelectedEvent::ApplePayShippingMethodSelectedEvent):
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::beginPaymentSession):
        (WebCore::PaymentCoordinator::didSelectShippingMethod):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/applepay/PaymentHeaders.h:
        * Modules/applepay/PaymentRequestValidator.cpp:
        (WebCore::PaymentRequestValidator::validate):
        (WebCore::PaymentRequestValidator::validateTotal):
        (WebCore::validateMerchantCapabilities):
        (WebCore::validateShippingMethod):
        (WebCore::validateShippingMethods):
        * Modules/applepay/PaymentRequestValidator.h:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:

2017-08-16  Chris Dumez  <cdumez@apple.com>

        Cross origin Beacon requests with a ArrayBuffer / ArrayBufferView payload should not do a CORS preflight
        https://bugs.webkit.org/show_bug.cgi?id=175628
        <rdar://problem/33919278>

        Reviewed by Geoffrey Garen.

        Cross origin Beacon requests with a ArrayBuffer / ArrayBufferView payload should not do a CORS preflight.
        To achieve this, the following changes were made:
        1. Revert r220779 which caused us to use a non CORS-safelisted Content-Type header for such payload
        2. Teach PingLoad how to deal with "simple" cross origin requests (i.e. Don't assume we need a CORS
           preflight merely because the fetch mode is set to "cors").

        Test: http/wpt/beacon/cors/crossorigin-arraybufferview-no-preflight.html

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * loader/CrossOriginAccessControl.h:
        * loader/LoaderStrategy.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        * loader/PingLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::CachedResourceRequest):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::releaseOriginalRequestHeaders):
        * platform/network/HTTPHeaderValues.cpp:
        * platform/network/HTTPHeaderValues.h:

2017-08-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: capture async stack trace when workers/main context posts a message
        https://bugs.webkit.org/show_bug.cgi?id=167084
        <rdar://problem/30033673>

        Reviewed by Brian Burg.

        Add instrumentation to DOMWindow to support showing asynchronous
        stack traces when the debugger pauses in a MessageEvent handler.

        Test: inspector/debugger/async-stack-trace.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didPostMessageImpl):
        (WebCore::InspectorInstrumentation::didFailPostMessageImpl):
        (WebCore::InspectorInstrumentation::willDispatchPostMessageImpl):
        (WebCore::InspectorInstrumentation::didDispatchPostMessageImpl):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didPostMessage):
        (WebCore::InspectorInstrumentation::didFailPostMessage):
        (WebCore::InspectorInstrumentation::willDispatchPostMessage):
        (WebCore::InspectorInstrumentation::didDispatchPostMessage):

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearAsyncStackTraceData):
        (WebCore::PageDebuggerAgent::didPostMessage):
        (WebCore::PageDebuggerAgent::didFailPostMessage):
        (WebCore::PageDebuggerAgent::willDispatchPostMessage):
        (WebCore::PageDebuggerAgent::didDispatchPostMessage):
        * inspector/PageDebuggerAgent.h:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::postMessageTimerFired):

2017-08-16  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the build

        * platform/ios/PlatformPasteboardIOS.mm:

2017-08-16  Simon Fraser  <simon.fraser@apple.com>

        Build fix after r220812

        Fix builds where LOG_DISABLED is defined.

        * css/MediaQueryEvaluator.cpp:

2017-08-16  Simon Fraser  <simon.fraser@apple.com>

        Add a log channel for media queries
        https://bugs.webkit.org/show_bug.cgi?id=175591

        Reviewed by Zalan Bujtas.

        Add a "MediaQueries" log channel which logs data about media query evaluation.

        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::MediaQuerySet):
        (WebCore::operator<<):
        * css/MediaList.h:
        * css/MediaQuery.cpp:
        (WebCore::operator<<):
        * css/MediaQuery.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::operator<<):
        (WebCore::MediaQueryEvaluator::evaluate const):
        (WebCore::aspectRatioValueAsString):
        (WebCore::orientationEvaluate):
        (WebCore::aspectRatioEvaluate):
        (WebCore::deviceAspectRatioEvaluate):
        (WebCore::evaluateResolution):
        (WebCore::deviceHeightEvaluate):
        (WebCore::deviceWidthEvaluate):
        (WebCore::heightEvaluate):
        (WebCore::widthEvaluate):
        * css/MediaQueryExpression.cpp:
        (WebCore::operator<<):
        * css/MediaQueryExpression.h:
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::styleResolverChanged):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::hasMediaQueriesAffectedByViewportChange const):
        (WebCore::StyleResolver::hasMediaQueriesAffectedByAccessibilitySettingsChange const):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::viewportChangeAffectedPicture const):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * platform/Logging.cpp:
        (WebCore::initializeLogChannelsIfNecessary):
        * platform/Logging.h:
        * platform/URL.cpp:
        (WebCore::isSchemeFirstChar):
        (WebCore::operator<<):
        * platform/URL.h:

2017-08-16  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove the need for JSSubtleCryptoCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=175526

        Reviewed by Chris Dumez.

        - Generates bindings for all of SubtleCrypto except AlgorithmIdentifier normalization, 
          which is defined in the WebCrypto spec to happen after normal IDL operations.
        - Adds initial support for IDL object types in unions (some, unneeded at the moment,
          edge cases remain).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp: Removed.

            Remove JSSubtleCryptoCustom.cpp, added CryptoKeyFormat.h

        * bindings/js/JSDOMConvertObject.h:

            Add needed, when included in generated code, #include of StrongInlines.h

        * bindings/js/JSDOMConvertUnion.h:
        
            Add initial support for object (needed for AlgorithmIdentifier which is 
            (object or DOMString)). Remaining support will be handled by https://webkit.org/b/175616

            Also add remaining spec comments while in the area.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::reject):

            Add support for the special ExistingExceptionError error code. Capturing
            the current exception and using it as the rejection value.

        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::~SubtleCrypto):
        (WebCore::toHashIdentifier):
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::toCryptoKeyUsageBitmap):
        (WebCore::rejectWithException):
        (WebCore::normalizeJsonWebKey):
        (WebCore::toKeyData):
        (WebCore::copyToVector):
        (WebCore::isSupportedExportKey):
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::digest):
        (WebCore::SubtleCrypto::generateKey):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::exportKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/SubtleCrypto.h:
        * crypto/SubtleCrypto.idl:

            Moves implementation from JSSubtleCryptoCustom.cpp -> here. Important changes that come
            with that are:
            - All parameters are now converted / type checked for us.
            - Rather than throwing exceptions and expecting the bindings layer to convert
              them to promise rejections, all rejections are now explicitly made.
            - Algorithms are no longer checked for being supported twice, once in normalizeCryptoAlgorithmParameters
              and then again in the operation. We instead rely on normalizeCryptoAlgorithmParameters to return
              an Exception if its not supported.
            - Shaves 251 lines off the file.

        * crypto/CryptoKeyFormat.h: Added.

            Add new header for unified key format enum. (For bindings purposes, SubtleCrypto
            re aliases it to SubtleCrypto::KeyFormat).

        * bindings/js/JSWebKitSubtleCryptoCustom.cpp:
        * crypto/CryptoAlgorithm.cpp:
        * crypto/CryptoAlgorithm.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:

            Use CryptoKeyFormat enum directly, rather than SubtleCrypto::KeyFormat,
            to allow not including SubtleCrypto.h.

        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHkdfParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedKeyGenParams.h:
        * crypto/parameters/EcdsaParams.idl:
        * crypto/parameters/HkdfParams.idl:
        * crypto/parameters/HmacKeyParams.idl:
        * crypto/parameters/Pbkdf2Params.idl:
        * crypto/parameters/RsaHashedImportParams.idl:
        * crypto/parameters/RsaHashedKeyGenParams.idl:

            Update IDLs and implementations to use the correct definition of HashAlgorithmIdentifier,
            which is (object or DOMString), now that it is supported.

2017-08-16  Youenn Fablet  <youenn@apple.com>

        [Cache API] Implement Worker connection to the Cache storage engine
        https://bugs.webkit.org/show_bug.cgi?id=175599

        Reviewed by Chris Dumez.

        Covered by existing tests.

        Adding a WorkerCacheStorageConnection to connect workers Cache/CacheStorage
        to the cache storage engine.
        WorkerCacheStorageConnection does this by hopping to the main thread to call the document cache storage connection to do the actual job.
        Doing some CacheStorageConnection refactoring to share code with WK2 implementation of the cache storage connection. 

        * Modules/cache/CacheQueryOptions.h:
        (WebCore::CacheQueryOptions::isolatedCopy const):
        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::open):
        (WebCore::CacheStorageConnection::remove):
        (WebCore::CacheStorageConnection::retrieveCaches):
        (WebCore::CacheStorageConnection::retrieveRecords):
        (WebCore::CacheStorageConnection::batchDeleteOperation):
        (WebCore::CacheStorageConnection::batchPutOperation):
        (WebCore::CacheStorageConnection::openOrRemoveCompleted):
        (WebCore::CacheStorageConnection::updateCaches):
        (WebCore::CacheStorageConnection::updateRecords):
        (WebCore::CacheStorageConnection::removeRecordsCompleted):
        (WebCore::CacheStorageConnection::putRecordsCompleted):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::openCompleted):
        (WebCore::CacheStorageConnection::removeCompleted):
        (WebCore::CacheStorageConnection::doOpen):
        (WebCore::CacheStorageConnection::doRemove):
        (WebCore::CacheStorageConnection::doRetrieveCaches):
        (WebCore::CacheStorageConnection::doRetrieveRecords):
        (WebCore::CacheStorageConnection::doBatchDeleteOperation):
        (WebCore::CacheStorageConnection::doBatchPutOperation):
        * Modules/cache/WorkerCacheStorageConnection.cpp: Added.
        (WebCore::toCrossThreadRecordData):
        (WebCore::fromCrossThreadRecordData):
        (WebCore::WorkerCacheStorageConnection::create):
        (WebCore::WorkerCacheStorageConnection::WorkerCacheStorageConnection):
        (WebCore::WorkerCacheStorageConnection::doOpen):
        (WebCore::WorkerCacheStorageConnection::doRemove):
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        (WebCore::WorkerCacheStorageConnection::doRetrieveRecords):
        (WebCore::WorkerCacheStorageConnection::doBatchDeleteOperation):
        (WebCore::WorkerCacheStorageConnection::doBatchPutOperation):
        * Modules/cache/WorkerCacheStorageConnection.h: Added.
        * Modules/cache/WorkerGlobalScopeCaches.cpp:
        (WebCore::WorkerGlobalScopeCaches::caches const):
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FetchOptions.h:
        (WebCore::FetchOptions::isolatedCopy const):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::cacheStorageConnection):
        * workers/WorkerGlobalScope.h:

2017-08-16  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [PAL] Move spi/ios and spi/win directories into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175171

        Reviewed by Antti Koivisto.

        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/DataDetection.mm:
        * loader/ios/PreviewLoader.mm:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/cocoa/MemoryReleaseCocoa.mm:
        * page/cocoa/SettingsCocoa.mm:
        * page/ios/UserAgentIOS.mm:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        * platform/graphics/ca/PlatformCALayer.cpp:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        * platform/graphics/opentype/OpenTypeCG.h:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        * platform/graphics/win/SimpleFontDataDirect2D.cpp:
        * platform/ios/Device.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/ios/QuickLookSoftLink.h:
        * platform/ios/QuickLookSoftLink.mm:
        * platform/ios/ValidationBubbleIOS.mm:
        * platform/ios/WebItemProviderPasteboard.mm:
        * platform/network/ios/PreviewConverter.mm:
        * platform/sql/SQLiteFileSystem.cpp:
        * rendering/RenderThemeIOS.mm:

2017-08-16  Tim Horton  <timothy_horton@apple.com>

        2-3% of main thread time under UTTypeCreatePreferredIdentifierForTag on wunderground map
        https://bugs.webkit.org/show_bug.cgi?id=175618

        Reviewed by Simon Fraser.

        No new tests, just a perf win.

        UTTypeCreatePreferredIdentifierForTag is fairly expensive, and is called
        under every toDataURL, which the Wunderground wundermap does a /lot/.

        Keep a 16-item LRU cache of MIMEType->UTI mappings.

        Also, make other callers of UTTypeCreatePreferredIdentifierForTag use
        the UTIUtilities version so they can share in the caching.

        Also, as a drive-by, add and make other callers use mimeTypeFromUTI too,
        and make the UTIUtilities operate on Strings for a slightly more WebCore-y feel.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::WebContentReader::readImage):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::createFileTypesSet):
        * platform/graphics/cg/ImageSourceCGMac.mm:
        (WebCore::MIMETypeForImageSourceType):
        Adopt newly-added MIMETypeFromUTI().

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::utiFromImageBufferMIMEType):
        (WebCore::ImageBuffer::toCFData const):
        (WebCore::cfData):
        (WebCore::utiFromMIMEType): Deleted.
        Adopt UTIFromMIMEType, and rename the local helper that does something
        different (a small static map) on iOS and Windows to not have an overlapping name.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::resourceMIMEType):
        (WebCore::utiTypeFromCocoaType):
        Adopt UTIFromMIMEType().

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::writeObjectRepresentations):
        * platform/mac/PasteboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):
        Adopt isDeclaredUTI and UTIFromMIMEType().

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::responseReceived):
        * platform/network/ios/WebCoreURLResponseIOS.mm:
        (WebCore::adjustMIMETypeIfNecessary):
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):
        * rendering/RenderThemeIOS.mm:
        (WebCore::iconForAttachment):
        * rendering/RenderThemeMac.mm:
        (WebCore::iconForAttachment):
        Deal with the fact that UTI utilities deal in Strings now.

        * platform/network/mac/UTIUtilities.h:
        * platform/network/mac/UTIUtilities.mm:
        (WebCore::MIMETypeFromUTI):
        Added. This doesn't crawl up the UTI tree if the first conversion fails,
        which is what most of the existing code does. It's possible we want to
        use MIMETypeFromUTITree's logic everywhere, but I didn't want to change
        that in this patch.

        (WebCore::MIMETypeFromUTITree):
        (WebCore::isDeclaredUTI):
        Take and return strings.

        (WebCore::UTIFromMIMETypeCachePolicy::createValueForKey):
        (WebCore::UTIFromMIMEType):
        Add the aforementioned cache.

2017-08-16  Simon Fraser  <simon.fraser@apple.com>

        Make RenderLayer and RenderLayerBacking TextStream-loggable, and clean up compositing logging
        https://bugs.webkit.org/show_bug.cgi?id=175634

        Reviewed by Zalan Bujtas.

        Add operator<<(TextStream&) for RenderLayer and RenderLayer backing, and use them for compositing logging.

        Convert CompositingUpdateType to an enum class.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayersAfterLayout):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportOffsetChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::operator<<):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        (WebCore::operator<<):
        * rendering/RenderLayerCompositor.h:

2017-08-16  Eric Carlson  <eric.carlson@apple.com>

        Consider allow gUM to be called from localhost without https
        https://bugs.webkit.org/show_bug.cgi?id=173457
        <rdar://problem/33900527>

        Reviewed by Youenn Fablet.

        Tests: http/tests/media/media-stream/get-user-media-localhost.html
               http/tests/media/media-stream/get-user-media-loopback-ip.html

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::isSecure): Call SchemeRegistry::shouldTreatURLSchemeAsSecure instead of looking for
        the string 'https'.
        (WebCore::canCallGetUserMedia): Allow localhost or loopback address.

        * page/SecurityOrigin.cpp:
        (WebCore::isLoopbackIPAddress): Add a comment.
        (WebCore::shouldTreatAsPotentionallyTrustworthy): Move tests for localhost and loopback address
        to isLocalHostOrLoopbackIPAddress, call it.
        (WebCore::SecurityOrigin::isLocalHostOrLoopbackIPAddress): 
        * page/SecurityOrigin.h:

2017-08-16  Chris Dumez  <cdumez@apple.com>

        EventSource: ignore IDs with U+0000
        https://bugs.webkit.org/show_bug.cgi?id=175178

        Reviewed by Darin Adler.

        EventSource: ignore IDs with U+0000 as per:
        https://github.com/whatwg/html/pull/2849

        Test: imported/w3c/web-platform-tests/eventsource/format-field-id-null.htm

        * page/EventSource.cpp:
        (WebCore::EventSource::parseEventStreamLine):

2017-08-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [HarfBuzz] Decomposed Vietnamese characters are rendered incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=174418

        Reviewed by Michael Catanzaro.

        HarfBuzzShaper should normalize the input text before collecting
        HarfBuzzRuns. Actually, HarfBuzzShaper::setNormalizedBuffer does
        the task. But, this function hasn't been called from anywhere
        since Bug 90951.

        Test: fast/text/international/vietnamese-nfd.html
              imported/blink/fast/text/international/text-shaping-arabic-diffs.html

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):
        Call setNormalizedBuffer instead of normalizeCharacters.
        (WebCore::normalizeCharacters): Deleted.
        (WebCore::normalizeSpacesAndMirrorChars) Use
        FontCascade::treatAsZeroWidthSpaceInComplexScript instead of
        FontCascade::treatAsZeroWidthSpace to preserve ZWJ and ZWNJ.

2017-08-16  Antti Koivisto  <antti@apple.com>

        Move first-letter renderer mutation code out of RenderBlock and into RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=175627

        Reviewed by Andreas Kling.

        Render tree should not mutate itself. We already fixed this for first-letter, supporting code
        can now move to RenderTreeUpdater too.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::styleForFirstLetter): Deleted.
        (WebCore::isPunctuationForFirstLetter): Deleted.
        (WebCore::shouldSkipForFirstLetter): Deleted.
        (WebCore::RenderBlock::updateFirstLetterStyle): Deleted.
        (WebCore::RenderBlock::createFirstLetterRenderer): Deleted.
        (WebCore::RenderBlock::updateFirstLetter): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::updateFirstLetter): Deleted.
        * rendering/RenderRubyRun.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateFirstLetter): Deleted.
        * rendering/RenderTable.h:

            Virtual overrides just disabled first letter for some RenderBlock subclasses. This is now achieved via
            supportsFirstLetter test in the first letter updater.

        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::updateFirstLetter): Deleted.
        * rendering/svg/RenderSVGText.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::popParent):
        * style/RenderTreeUpdater.h:
        * style/RenderTreeUpdaterFirstLetter.cpp: Added.
        (WebCore::styleForFirstLetter):
        (WebCore::isPunctuationForFirstLetter):
        (WebCore::shouldSkipForFirstLetter):
        (WebCore::updateFirstLetterStyle):
        (WebCore::createFirstLetterRenderer):
        (WebCore::supportsFirstLetter):
        (WebCore::RenderTreeUpdater::FirstLetter::update):
        * style/RenderTreeUpdaterFirstLetter.h: Added.

2017-08-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Rework handling key systems and UUIDs
        https://bugs.webkit.org/show_bug.cgi?id=175567

        Reviewed by Žan Doberšek.

        The UUIDs and key system strings were moved to the
        GStreamerEMEUtilities class because so far they were managed by
        the decryptors and that was ugly.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsKeySystem):
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp: Added.
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h: Added.
        (WebCore::GStreamerEMEUtilities::isClearKeyKeySystem):
        (WebCore::GStreamerEMEUtilities::keySystemToUuid):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webkit_media_clear_key_decrypt_class_init):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.h:

2017-08-16  Andy Estes  <aestes@apple.com>

        [Payment Request] Add an ENABLE flag and an experimental feature preference
        https://bugs.webkit.org/show_bug.cgi?id=175622

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * page/Settings.in:

2017-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Make DataTransferItemList work with plain text entries
        https://bugs.webkit.org/show_bug.cgi?id=175596

        Reviewed by Wenson Hsieh.

        Added the basic machinery to get the list of plain text items to DataTransferItemList and DataTransferItem.

        Each DataTransferItem now depends on DataTransfer so it does ref-forwarding like DataTransferItemList to make
        DataTransfer alive as long as any DataTransferItem is alive.

        Specifications: https://html.spec.whatwg.org/multipage/dnd.html#the-datatransferitem-interface
                        https://html.spec.whatwg.org/multipage/dnd.html#the-datatransferitemlist-interface

        Tests: editing/pasteboard/datatransfer-items-drop-plaintext-file.html
               editing/pasteboard/datatransfer-items-paste-plaintext.html

        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::DataTransferItem): Added two variants one for plain text and another one for a file.
        (WebCore::DataTransferItem::kind const): Rewritten.
        (WebCore::DataTransferItem::getAsString const): Implemented.
        (WebCore::DataTransferItem::getAsFile const): Implemented.
        * dom/DataTransferItem.h:
        (WebCore::DataTransferItem::ref): Added.
        (WebCore::DataTransferItem::deref): Added.
        (WebCore::DataTransferItem::type const): Returns String instead of AtomicString.
        (WebCore::DataTransferItem::kind const): Moved to cpp.
        * dom/DataTransferItem.idl: Removed NoInterfaceObject since the interface object should exist on DOMWindow.
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::length): Implemented.
        (WebCore::DataTransferItemList::item): Ditto.
        (WebCore::isSupportedType): Added. For now, we only support text/plain.
        (WebCore::DataTransferItemList::ensureItems): Added. Constructs the list of DataTransferItems.
        * dom/DataTransferItemList.h:
        (DataTransferItemList): Added m_items. The list is filled lazily by ensureItems.
        * dom/DataTransferItemList.idl: Removed NoInterfaceObject since the interface object should exist on DOMWindow.

2017-08-15  Simon Fraser  <simon.fraser@apple.com>

        Remove ScrollView::clipsRepaints() which was only used by Chromium
        https://bugs.webkit.org/show_bug.cgi?id=175594

        Reviewed by Tim Horton.

        clipsRepaints() was added in r74568 but was only used by Chromium. It's always
        true for other platforms, so remove conditionals that test for it and assume true.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::repaintContentRectangle):
        (WebCore::ScrollView::setClipsRepaints): Deleted.
        * platform/ScrollView.h:
        (WebCore::ScrollView::clipsRepaints const): Deleted.

2017-08-15  Simon Fraser  <simon.fraser@apple.com>

        Allow WebCore logging channels to be set from the UI process
        https://bugs.webkit.org/show_bug.cgi?id=175608

        Reviewed by Tim Horton.

        Change initializeLogChannelsIfNecessary() to take an optional String, which can
        be a list of log channels passed from the UI process.

        * platform/LogInitialization.h:
        * platform/Logging.cpp:
        (WebCore::initializeLogChannelsIfNecessary):

2017-08-15  Chris Dumez  <cdumez@apple.com>

        Fetch / Beacon: Use "application/octet-stream" Content-Type for payloads of type ArrayBuffer / ArrayBufferView
        https://bugs.webkit.org/show_bug.cgi?id=175600

        Reviewed by Youenn Fablet.

        Use "application/octet-stream" Content-Type for payloads of type ArrayBuffer / ArrayBufferView in Fetch & Beacon.
        If we don't set a Content-Type header, our underlying network stack is going to add a "application/x-www-form-urlencoded"
        Content-Type header, which is worse.

        Chrome is already using "application/octet-stream" Content-Type in Beacon, but use no Content-Type in Fetch.
        The Fetch/Beacon specification says we should have no Content-Type header in this case but this is unfortunately
        not something we can support at the moment. Using "application/octet-stream" Content-Type for now seems like the
        lesser evil.

        Test: http/wpt/fetch/fetch-request-arraybuffer-content-type.html

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * platform/network/HTTPHeaderValues.cpp:
        (WebCore::HTTPHeaderValues::octetStreamContentType):
        * platform/network/HTTPHeaderValues.h:

2017-08-15  Robin Morisset  <rmorisset@apple.com>

        Change the order of arguments of JSWithScope::create() for consistency
        https://bugs.webkit.org/show_bug.cgi?id=175585

        Reviewed by Saam Barati.

        No change of behavior.

        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::JSHTMLElement::pushEventHandlerScope const):

2017-08-15  Youenn Fablet  <youenn@apple.com>

        [Cache API] Ensure ResourceResponse is not null when redirected/tainting/type fields are set
        https://bugs.webkit.org/show_bug.cgi?id=175538

        Reviewed by Chris Dumez.

        No change of behavior.
        This change ensures that response type is preserved when encoding/decoding ResourceResponse, in particular the error type.
        This will allow Cache API to preserve responses when reading them from a different process.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::setType):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::setType):

2017-08-15  Chris Dumez  <cdumez@apple.com>

        Update CachedResourceLoader::requestResource() to return a WTF::Expected
        https://bugs.webkit.org/show_bug.cgi?id=175505

        Reviewed by Youenn Fablet.

        Update CachedResourceLoader::requestResource() to return a WTF::Expected
        type instead of using an out parameter for the ResourceError in case of
        synchronous failure.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestScriptWithCache const):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::loadBestFitImage):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::loadImage):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::startPreflight):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::castCachedResourceTo):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::requestMedia):
        (WebCore::CachedResourceLoader::requestIcon):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestBeaconResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        (WebCore::CachedResourceLoader::shouldContinueAfterNotifyingLoadedFromMemoryCache):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::load):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateExternalDocument):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):

2017-08-15  Don Olmstead  <don.olmstead@sony.com>

        [PAL] Move Sleep classes into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175456

        Reviewed by Ryosuke Niwa.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSessionManager.cpp:
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/mac/WebVideoFullscreenController.h:
        * platform/mac/WebVideoFullscreenController.mm:

2017-08-15  Youenn Fablet  <youenn@apple.com>

        [Cache API] Adding generic support for CacheStorage and Cache methods
        https://bugs.webkit.org/show_bug.cgi?id=175455

        Reviewed by Chris Dumez.

        Covered by existing tests.

        Adding a CacheStorageProvider abstraction that creates a CacheStorageConnection.
        The CacheStorageProvider is accessed from the page for Document calls.
        The CacheStorageConnection is responsible to implement the read/write operations on the cache database.
        At the moment, it does nothing but return not implemented errors.

        Implementing CacheStorage APIs and Cache APIs based on the CacheStorageConnection except for Cache add and addAll which will be implemented later on.
        CacheStoragConnection is responsible to read/write CacheStorage list of caches and each individual cache.
        The CacheStorageConnection is a generic connection and not tied to any document/context.
        CacheStorage objects are manipulated by providing to the connection the origin of the context.
        CacheStorage are global to all contexts with the same origin.
        Cache objects are manipulated by an ID that is given initially by the CacheStorageEngine when opening the Cache object.

        Adding various accessors and constructors for Fetch constructs as needed by the Cache API implementation.

        * Modules/cache/Cache.cpp:
        (WebCore::Cache::Cache):
        (WebCore::Cache::~Cache):
        The CacheStorageConnection is a generic connection and not tied to any document/context.
        (WebCore::Cache::match): Implementation of https://www.w3.org/TR/service-workers-1/#cache-match.
        Redirect to matchAll as per spec.
        (WebCore::Cache::matchAll): Implementation of https://www.w3.org/TR/service-workers-1/#cache-matchAll.
        Checks for request as per spec. Then either refresh the request to response map and return all responses.
        Or call the query cache algorithm and return copies of the responses (using clone).
        (WebCore::Cache::put):
        Check the request and response as per spec.
        Add temporary rejection cases (being loaded responses, responses with ReadableStream) as there is no support for them right now.
        Call the batch put operation.
        (WebCore::Cache::remove):
        Check the request and response as per spec.
        Call the batch delete operation.
        (WebCore::Cache::keys):
        Refresh the request to response map and return corresponding requests.
        Making sure to reuse the same request objects as per spec.
        As per spec, the request to response map is ordered. We implement it as a Vector.
        (WebCore::Cache::refreshRequestToResponseMap):
        Use the cache storage connection to get an up-to-date list of cached records.
        (WebCore::Cache::queryCacheMatch):
        Implements the match algorithm defined in https://www.w3.org/TR/service-workers-1/#query-cache-algorithm.
        This is split for queryCache as cache storage engine will need to use it when implementing the delete operation.
        (WebCore::Cache::queryCache):
        Full implementation of https://www.w3.org/TR/service-workers-1/#query-cache-algorithm with no targetStorage argument.
        (WebCore::Cache::queryCacheWithTargetStorage):
        Full implementation of https://www.w3.org/TR/service-workers-1/#query-cache-algorithm with a provided targetStorage argument.
        (WebCore::Cache::batchDeleteOperation):
        Implementation of https://www.w3.org/TR/service-workers-1/#batch-cache-operations-algorithm but dedicated to a delete operation.
        Delete operation are always done one at a time.
        (WebCore::Cache::batchPutOperation):
        Implementation of https://www.w3.org/TR/service-workers-1/#batch-cache-operations-algorithm dedicated to a put operation.
        Put operation takes one record for put but can take several records in the case of addAll, hence the current design.
        (WebCore::Cache::updateRequestToResponseMap):
        Update the cache request to response map based on the records retrieved from the cache storage connection.
        * Modules/cache/Cache.h:
        (WebCore::Cache::create):
        (WebCore::Cache::name const):
        * Modules/cache/Cache.idl:
        * Modules/cache/CacheStorage.cpp:
        (WebCore::CacheStorage::origin const):
        Computing the cache origin that is passed to the CacheStorageConnection.
        (WebCore::CacheStorage::has):
        Implementation of https://www.w3.org/TR/service-workers-1/#cache-storage-has.
        Call the cache storage connection to refresh its cache map.
        Then use it to check whether a cache exists.
        (WebCore::CacheStorage::refreshCacheMap):
        Use the cache storage connection to get the list of existing caches.
        (WebCore::CacheStorage::open):
        Implementation of https://www.w3.org/TR/service-workers-1/#cache-storage-open.
        Refreshing the cache map so as to return a pre-existing cache if any.
        (WebCore::CacheStorage::remove):
        Implementation of https://www.w3.org/TR/service-workers-1/#cache-storage-delete-method.
        Refreshing the cache map so as to do nothing if there is no cache to remove.
        (WebCore::CacheStorage::keys):
        Implementation of https://www.w3.org/TR/service-workers-1/#cache-storage-keys-method.
        Refreshing the cache map and returnin its keys.
        As per spec, the cache map is ordered. We implement it as a Vector.
        (WebCore::CacheStorage::cacheMap):
        Get the list of cache objects, used as a private accessor for JS built-ins.
        * Modules/cache/CacheStorage.h:
        (WebCore::CacheStorage::create):
        (WebCore::CacheStorage::CacheStorage):
        * Modules/cache/CacheStorageConnection.cpp: Added.
        (WebCore::CacheStorageConnection::exceptionFromError):
        * Modules/cache/CacheStorageConnection.h: Added.
        Makes the link between Web facing Cache API and the cache storage engine.
        Envisioned implementation are:
        - One main thread connection used by all documents in the given process.
        - One connection per worker that forwards the calls to the main thread and use the main thread connection afterwards.
        (WebCore::CacheStorageConnection::create):
        (WebCore::CacheStorageConnection::open):
        (WebCore::CacheStorageConnection::remove):
        (WebCore::CacheStorageConnection::refreshCacheMap):
        (WebCore::CacheStorageConnection::refreshRequestToResponseMap):
        (WebCore::CacheStorageConnection::batchDeleteOperation):
        (WebCore::CacheStorageConnection::batchPutOperation):
        * Modules/cache/CacheStorageRecord.h: Added. A fetch record from the Web facing cache API perspective.
        * Modules/cache/DOMWindowCaches.cpp:
        (WebCore::DOMWindowCaches::caches const):
        * Modules/cache/WorkerGlobalScopeCaches.cpp:
        (WebCore::WorkerGlobalScopeCaches::from):
        (WebCore::WorkerGlobalScopeCaches::caches const):
        * Modules/cache/WorkerGlobalScopeCaches.h:
        (WebCore::WorkerGlobalScopeCaches::WorkerGlobalScopeCaches):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::isReadableStreamBody const): Added getter as it is used by cache API.
        * Modules/fetch/FetchHeaders.h:
        (WebCore::FetchHeaders::create): Add another create as used by the cache API.
        (WebCore::FetchHeaders::guard const): Added getter and IPC serializer as this is something that will be stored by the cache engine.
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::buildOptions): In case FetchRequest::create is called from C++, there is no need to set init.window to a null value.
        Add a check so that no value at all is the same as a null/undefined value.
        (WebCore::FetchRequest::resourceRequest const):
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchResponse.h:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::overlayPage):
        * page/CacheStorageProvider.h: Added.
        Interface to create main thread cache storage connection for the given page.
        There will be one provider for each process.
        Passing a sessionID so that we will create a connection per session.
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::cacheStorageProvider):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2017-08-15  Chris Dumez  <cdumez@apple.com>

        Implement quota limitation for keepalive Fetch requests
        https://bugs.webkit.org/show_bug.cgi?id=175482

        Reviewed by Sam Weinig and Youenn Fablet.

        Implement quota limitation for keepalive Fetch requests as per:
        - https://fetch.spec.whatwg.org/#http-network-or-cache-fetch (Step 9)

        This partly works for Beacon as well, meaning that no Beacon with a body
        over 64Kb can be sent. However, we don't keep track about wether or not
        beacon loads are inflight or not.

        Also update CachedResourceLoader::requestResource() so that the caller
        can get a ResourceError when it returns null. This is useful for both
        Fetch and Beacon to return better error messages.

        Test: http/wpt/beacon/beacon-quota.html

        * CMakeLists.txt:
        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::BlobLoader::didReceiveResponse):
        (WebCore::FetchBodyOwner::BlobLoader::didFail):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        (WebCore::FetchLoader::didFail):
        * Modules/fetch/FetchLoaderClient.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didFail):
        * Modules/fetch/FetchResponse.h:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isMainOrMediaOrIconOrRawResource const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::requestMedia):
        (WebCore::CachedResourceLoader::requestIcon):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestBeaconResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/KeepaliveRequestTracker.cpp: Added.
        (WebCore::KeepaliveRequestTracker::~KeepaliveRequestTracker):
        (WebCore::KeepaliveRequestTracker::canLoadRequest):
        (WebCore::KeepaliveRequestTracker::registerRequest):
        (WebCore::KeepaliveRequestTracker::responseReceived):
        (WebCore::KeepaliveRequestTracker::notifyFinished):
        (WebCore::KeepaliveRequestTracker::unregisterRequest):
        * loader/cache/KeepaliveRequestTracker.h: Added.
        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::lengthInBytes const):
        (WebCore::FormData::lengthInBytes const):
        * platform/network/FormData.h:

2017-08-15  Darin Adler  <darin@apple.com>

        REGRESSION(r220052): http/tests/appcache/deferred-events-delete-while-raising-timer.html is crashing.
        https://bugs.webkit.org/show_bug.cgi?id=175107

        Reviewed by Alexey Proskuryakov.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadComplete): Moved the assertion to after the null page check.

2017-08-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219504.
        https://bugs.webkit.org/show_bug.cgi?id=175580

        Broke Arabic text shaping (Requested by mcatanzaro on
        #webkit).

        Reverted changeset:

        "[HarfBuzz] Decomposed Vietnamese characters are rendered
        incorrectly"
        https://bugs.webkit.org/show_bug.cgi?id=174418
        http://trac.webkit.org/changeset/219504

2017-08-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: handle click events on option elements
        https://bugs.webkit.org/show_bug.cgi?id=174710
        <rdar://problem/33459305>

        Reviewed by Brian Burg.

        Export WebCore symbols required by WebKit layer.

        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove Proximity Events and related code
        https://bugs.webkit.org/show_bug.cgi?id=175545

        Reviewed by Daniel Bates.

        No platform enables Proximity Events, so remove code inside ENABLE(PROXIMITY_EVENTS)
        and other related code.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * Modules/proximity/DeviceProximityClient.h: Removed.
        * Modules/proximity/DeviceProximityController.cpp: Removed.
        * Modules/proximity/DeviceProximityController.h: Removed.
        * Modules/proximity/DeviceProximityEvent.cpp: Removed.
        * Modules/proximity/DeviceProximityEvent.h: Removed.
        * Modules/proximity/DeviceProximityEvent.idl: Removed.
        * dom/EventNames.h:
        * dom/EventNames.in:
        * history/PageCache.cpp:
        (WebCore::canCachePage):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.idl:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::deviceProximityKey): Deleted.
        * page/DiagnosticLoggingKeys.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setDeviceProximity): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE(REQUEST_AUTOCOMPLETE) code, which was disabled everywhere
        https://bugs.webkit.org/show_bug.cgi?id=175504

        Reviewed by Sam Weinig.
        
        REQUEST_AUTOCOMPLETE was added in r133396 then removed in r148731, but brought back in r173596,
        however no further work was done, and it was left disabled. So remove the code.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/AutocompleteErrorEvent.h: Removed.
        * dom/AutocompleteErrorEvent.idl: Removed.
        * dom/EventNames.in:
        * dom/GlobalEventHandlers.idl:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::requestAutocomplete): Deleted.
        (WebCore::HTMLFormElement::finishRequestAutocomplete): Deleted.
        (WebCore::HTMLFormElement::requestAutocompleteTimerFired): Deleted.
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * loader/EmptyClients.cpp:
        * loader/FrameLoaderClient.h:

2017-08-14  Chris Dumez  <cdumez@apple.com>

        XHR should only fire an abort event if the cancellation was requested by the client
        https://bugs.webkit.org/show_bug.cgi?id=175546

        Reviewed by Youenn Fablet.

        XHR should only fire an abort event if the cancellation was requested by the client, otherwise it should fire an error event.
        Blink and Gecko already match the specification.

        Specification:
        - https://xhr.spec.whatwg.org/#handle-errors
        - https://xhr.spec.whatwg.org/#the-abort()-method

        Test: http/tests/navigation/page-cache-xhr-in-pagehide.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didFail):
        * xml/XMLHttpRequest.h:

2017-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE_VIEW_MODE_CSS_MEDIA and related code
        https://bugs.webkit.org/show_bug.cgi?id=175557

        Reviewed by Jon Lee.

        No port cares about the ENABLE(VIEW_MODE_CSS_MEDIA) feature, so remove it.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSValueKeywords.in:
        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::viewModeEvaluate): Deleted.
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent):
        (WebCore::isFeatureValidWithoutValue):
        * page/Page.cpp:
        (WebCore::Page::stringToViewMode): Deleted.
        (WebCore::Page::setViewMode): Deleted.
        * page/Page.h:
        (WebCore::Page::viewMode const): Deleted.

2017-08-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Parse font-display
        https://bugs.webkit.org/show_bug.cgi?id=175382

        Reviewed by Simon Fraser.

        The syntax is very simple: font-display: auto | block | swap | fallback | optional.
        So, parsing support is quite straightfoward.

        Test: fast/text/font-display/parse.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::setLoadingBehavior):
        * css/CSSFontFace.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator FontLoadingBehavior const):
        * css/CSSProperties.json:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isDescriptorOnly):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontFaceFontDisplay):
        (WebCore::CSSPropertyParser::parseFontFaceDescriptor):
        * rendering/style/RenderStyleConstants.h:

2017-08-14  Jer Noble  <jer.noble@apple.com>

        Obj-C exception crash in AVStreamSession when using EME in Private Browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=175547

        Reviewed by Eric Carlson.

        When the storagePath() is empty, do not use those AVStreamSession APIs which require a valid file path to stored
        proof-of-key-release data.

        Drive-by fix: return emptyString() from HTMLMediaElement::mediaPlayerMediaKeysStorageDirectory() when in Private
        Browsing mode, to match the behavior of WebKitMediaKeySession.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerMediaKeysStorageDirectory const):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::releaseKeys):
        (WebCore::CDMSessionAVStreamSession::update):
        (WebCore::CDMSessionAVStreamSession::generateKeyReleaseMessage):

2017-08-14  Andy Estes  <aestes@apple.com>

        REGRESSION (r220456): Crash in PreviewLoader::shouldCreateForMIMEType() when a ResourceResponse has a null MIME type
        https://bugs.webkit.org/show_bug.cgi?id=175548
        <rdar://problem/33866206>

        Reviewed by Brady Eidson.

        New API test: QuickLook.ShouldCreateForMIMEType

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ios/PreviewLoader.h:
        * loader/ios/PreviewLoader.mm:
        (WebCore::PreviewLoader::shouldCreateForMIMEType): Check if mimeType is a null String before
        calling HashSet::contains().

2017-08-14  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add support for phonetic contact names
        https://bugs.webkit.org/show_bug.cgi?id=175537
        <rdar://problem/32002644>

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePayError.idl: Defined "phoneticName" in ApplePayErrorContactField.
        * Modules/applepay/ApplePayPaymentContact.h: Defined phoneticGivenName and phoneticFamilyName
        in ApplePayPaymentContact.
        * Modules/applepay/ApplePayPaymentContact.idl: Ditto.
        * Modules/applepay/ApplePayPaymentRequest.h: Defined PhoneticName in
        ApplePayPaymentRequest::ContactField.
        * Modules/applepay/ApplePayPaymentRequest.idl: Defined "phoneticName" in ApplePayContactField.
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate): Added a version parameter. Added code to convert
        ContactField::PhoneticName, throwing an exception if version is less than 3.
        * Modules/applepay/PaymentContact.h: Added a version parameter to fromApplePayPaymentContact().
        * Modules/applepay/PaymentRequest.h: Defined phoneticName in PaymentRequest::ContactFields
        and defined PhoneticName in PaymentError::ContactField.
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::convert): Added a version parameter. Set a phoneticRepresentation on the
        PKContact's name if there are non-empty phonetic names and version is 3 or greater.
        (WebCore::PaymentContact::fromApplePayPaymentContact): Passed version to convert().

2017-08-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The none smooth stroke applied to an SVG shape breaks its hit testing
        https://bugs.webkit.org/show_bug.cgi?id=175506

        Reviewed by Simon Fraser.

        Clear RenderSVGShape::m_path when calling RenderSVGRect::updateShapeFromElement().
        The m_path will be recalculated when RenderSVGShape::updateShapeFromElement()
        is called from RenderSVGRect::shapeDependentStrokeContains().

        Test: svg/stroke/stroke-linejoin-click.html

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::clearPath):

2017-08-14  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Implement WebCore::standardUserAgent()
        https://bugs.webkit.org/show_bug.cgi?id=175507

        Reviewed by Michael Catanzaro.

        Remove "_GLIB" from user-agent version macros.

        * platform/glib/UserAgentGLib.cpp:
        (WebCore::versionForUAString):

2017-08-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rollout r220622 & r220696
        https://bugs.webkit.org/show_bug.cgi?id=175482
        <rdar://problem/33860695>

        Seems to have caused failures on iOS.

        * CMakeLists.txt:
        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::BlobLoader::didReceiveResponse):
        (WebCore::FetchBodyOwner::BlobLoader::didFail):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        (WebCore::FetchLoader::didFail):
        * Modules/fetch/FetchLoaderClient.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didFail):
        * Modules/fetch/FetchResponse.h:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::finishLoading):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isMainOrMediaOrIconOrRawResource const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::requestMedia):
        (WebCore::CachedResourceLoader::requestIcon):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestBeaconResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/KeepaliveRequestTracker.cpp: Removed.
        * loader/cache/KeepaliveRequestTracker.h: Removed.
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendFileRange):
        (WebCore::FormData::appendBlob):
        (WebCore::FormData::expandDataStore):
        * platform/network/FormData.h:

2017-08-14  Daniel Bates  <dabates@apple.com>

        [css-ui] Implement caret-color support
        https://bugs.webkit.org/show_bug.cgi?id=166572
        <rdar://problem/33852589>

        Reviewed by David Hyatt.

        Add support for the CSS property caret-color as per <https://www.w3.org/TR/css-ui-3/#caret-color> (02 March 2017).
        The property caret-color specifies the color of the text insertion caret in an editable element,
        say an HTML textarea element.

        Unlike other CSS color properties caret-color can have value "auto" and this is its initial
        value. Internally we treat value "auto" as an invalid caret color to simplify the code.

        Tests: editing/pasteboard/preserve-caret-color.html
               fast/css/caret-color-auto.html
               fast/css/caret-color-fallback-to-color.html
               fast/css/caret-color-inherit.html
               fast/css/caret-color-span-inside-editable-parent.html
               fast/css/caret-color.html
               fast/history/visited-link-caret-color.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSProperties.json: Add property caret-color. We represent the initial  "auto" Also, fix up
        wording in a comment while I am here.
        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty): Add caret-color to the list of properties that can be
        applied to visited hyperlinks.
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseCaretColor): Added.
        (WebCore::CSSParserFastPaths::maybeParseValue): Unlike other CSS color properties caret-color
        can be defined to be "auto". We explicitly check if the property is caret-color and use
        parseCaretColor() to parse its value.
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeCaretColor): Added.
        (WebCore::CSSPropertyParser::parseSingleValue): Similar to the change to CSSParserFastPaths::maybeParseValue()
        use a dedicated code path to parse caret-color.
        * editing/EditingStyle.cpp: Preserve caret-color during editing operations.
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::paintCaret const): Modified code to query property caret-color instead of
        color for the color of the text insertion caret. Always honor the caret-color of the editable
        element if it is valid color. Note that "caret-color: auto" is treated as an invalid color
        internally. A caret-color can have an invalid color if its inherits from the CSS color property
        with an invalid color. If caret-color is a valid color then we take it to be the color of the
        text insertion caret. Otherwise, we do what we do today and use a heuristic to determine the
        color of the text-insertion caret.
        (WebCore::disappearsIntoBackground): Deleted; moved logic into CaretBase::paintCaret().
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Add property wrapper
        to support animating caret-color.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline const): Modified to consider
        changes to caret color.
        (WebCore::RenderStyle::colorIncludingFallback const): Modified to compute the appropriate
        color for property caret-color with respect to an unvisited or visited link.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setCaretColor): Added.
        (WebCore::RenderStyle::setVisitedLinkCaretColor): Added.
        (WebCore::RenderStyle::caretColor const): Added.
        (WebCore::RenderStyle::visitedLinkCaretColor const): Added.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Modified to consider caret color.
        (WebCore::StyleRareInheritedData::operator== const): Ditto.
        * rendering/style/StyleRareInheritedData.h:

2017-08-14  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r220517-r220521) [GTK] Various compositing tests fail
        https://bugs.webkit.org/show_bug.cgi?id=175478

        Reviewed by Sergio Villar Senin.

        Fix a regression introduced in r220519. Move a framebuffer binding in TextureMapperGL
        away from GraphicsContext3D and onto the OpenGL API to work around the framebuffer
        binding state that's kept in the GraphicsContext3D class. This mismatch in how the
        framebuffer was bound was causing a couple of test failures in compositing tests.

        No new tests -- regressed tests have their failure expectations removed.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::bindDefaultSurface): Don't use GraphicsContext3D for the
        glBindFramebuffer() call. This would be done in subsequent patches that would move
        TextureMapperGL off the GraphicsContext3D usage, but this specific use case clashes
        with the framebuffer binding that's done in BitmapTextureGL and was causing test
        failures.

2017-08-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed fix after r220622 to address crashes on iOS.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::finishLoading):

2017-08-14  Antti Koivisto  <antti@apple.com>

        Factor text autosizing into a class
        https://bugs.webkit.org/show_bug.cgi?id=175530

        Reviewed by Andreas Kling.

        Move the remaining parts out of Document.

        * css/StyleBuilderCustom.h:
        (WebCore::computeLineHeightMultiplierDueToFontSize):
        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree):
        (WebCore::Document::textAutoSizing):
        (WebCore::TextAutoSizingTraits::constructDeletedValue): Deleted.
        (WebCore::TextAutoSizingTraits::isDeletedValue): Deleted.
        (WebCore::Document::addAutoSizedNode): Deleted.
        (WebCore::Document::updateAutoSizedNodes): Deleted.
        (WebCore::Document::clearAutoSizedNodes): Deleted.
        * dom/Document.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustComputedFontSizesOnBlocks):
        (WebCore::RenderElement::resetTextAutosizing):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingTraits::constructDeletedValue):
        (WebCore::TextAutoSizingTraits::isDeletedValue):
        (WebCore::TextAutoSizing::addTextNode):
        (WebCore::TextAutoSizing::updateRenderTree):
        (WebCore::TextAutoSizing::reset):
        * rendering/TextAutoSizing.h:

2017-08-14  Antti Koivisto  <antti@apple.com>

        [Render Tree Mutation] First letter should not mutate the render tree while in layout.
        https://bugs.webkit.org/show_bug.cgi?id=163848

        Reviewed by Zalan Bujtas.

        RenderBlock::updateFirstLetter shouldn't be called during layout. Instead it should
        be invoked by the RenderTreeUpdater.

        With this future patches can move updateFirstLetter() and the related functions
        completely out of the render tree.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layout):

            No more updateFirstLetter calls during layout...

        (WebCore::RenderBlock::computePreferredLogicalWidths):

            ...or preferred width computation.

        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderBlock.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::updateFirstLetter):
        * rendering/RenderRubyRun.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateFirstLetter):
        * rendering/RenderTable.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::updateFirstLetter):
        * rendering/svg/RenderSVGText.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::popParent):

            Call updateFirstLetter when closing the element. All of of descedant renderers are known here
            so this can be resolved correctly.

2017-08-13  Manuel Rego Casasnovas  <rego@igalia.com>

        Composition underline color is always black
        https://bugs.webkit.org/show_bug.cgi?id=174675

        Reviewed by Ryosuke Niwa.

        This patch uses the current color of the text instead of black
        for the composition underline marker.
        This makes it visible in the case we have a black/dark background.

        Test: editing/composition-underline-color.html

        * editing/CompositionUnderline.h:
        (WebCore::CompositionUnderline::CompositionUnderline):
        Added new attribute compositionUnderlineColor.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionUnderline):
        Use the text color if compositionUnderlineColor is TextColor.

2017-08-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] stop kinetic scrolling when a zero movement is reached
        https://bugs.webkit.org/show_bug.cgi?id=175468

        Reviewed by Michael Catanzaro.

        This is GTK+ change by Christian Hergert.
        https://git.gnome.org/browse/gtk+/commit/?h=gtk-3-22&id=4f63d839550f7a9038b391e7d3e1e6fc8bdfafa6

        When the kinetic scrolling reduces its speed, there can be multiple frames where the movement is zero pixels,
        followed by a 1 pixel movement later on. This causes a "jitter" right at the end of the scroll which makes it
        feel less quality than other platforms. Instead, we should just clamp it as soon as we get a zero movement.

        * platform/ScrollAnimationKinetic.cpp:
        (WebCore::ScrollAnimationKinetic::PerAxisData::animateScroll):

2017-08-13  Chris Dumez  <cdumez@apple.com>

        Drop non-const getter for CachedResource::resourceRequest()
        https://bugs.webkit.org/show_bug.cgi?id=175524

        Reviewed by Youenn Fablet.

        Drop non-const getter for CachedResource::resourceRequest(). It would be unsafe to modify the request of a CachedResource
        after it has been cached. Exposing such a getter is therefore a footgun.

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::resourceRequest const):
        (WebCore::CachedResource::ignoreForRequestCount const):
        (WebCore::CachedResource::setIgnoreForRequestCount):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::ignoreForRequestCount const):
        (WebCore::CachedResourceRequest::setIgnoreForRequestCount):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):
        * platform/network/ResourceRequestBase.h:

2017-08-13  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE] Implement WebCore::standardUserAgent()
        https://bugs.webkit.org/show_bug.cgi?id=175507

        Reviewed by Carlos Alberto Lopez Perez.

        Implement missing User-Agent handling for the WPE port by sharing the code with the GTK+ port.

        * PlatformGTK.cmake: Handlde renaming of UserAgentGtk.cpp to UserAgentGLib.cpp.
        * PlatformWPE.cmake: Add UserAgentGLib.cpp and UserAgentQuirks.cpp to the list of built WebCore sources.
        * platform/glib/UserAgentGLib.cpp: Renamed from Source/WebCore/platform/gtk/UserAgentGtk.cpp.
        (WebCore::versionForUAString): Change "GTK" in UA version macros to "GLIB".

2017-08-11  Ryosuke Niwa  <rniwa@webkit.org>

        Replace DATA_TRANSFER_ITEMS by a runtime flag and add a stub implementation
        https://bugs.webkit.org/show_bug.cgi?id=175474
        <rdar://problem/33844628>

        Reviewed by Wenson Hsieh.

        Replaced the build flag by a runtime flag and added a stub implementation for DataTransferItemList
        and DataTransferItem to make it compile. DataTransferItemList is created lazily by DataTransfer.items,
        and its lifetime is tied to DataTransfer by forwarding ref and deref.

        See https://html.spec.whatwg.org/multipage/dnd.html#the-datatransferitemlist-interface

        Tests: editing/pasteboard/datatransfer-idl.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::items): Added. Create DataTransferItemList lazily
        * dom/DataTransfer.h:
        * dom/DataTransfer.idl:
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::DataTransferItem): Added a stub implementation.
        (WebCore::DataTransferItem::~DataTransferItem): Ditto.
        (WebCore::DataTransferItem::getAsString const): Ditto.
        (WebCore::DataTransferItem::getAsFile const): Ditto.
        * dom/DataTransferItem.h:
        (WebCore::DataTransferItemList): Devirtualized functions.
        (WebCore::DataTransferItemList::kind const):
        (WebCore::DataTransferItemList::type const):
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.cpp: Added.
        (WebCore::DataTransferItemList::length const): Added a stub implementation.
        (WebCore::DataTransferItemList::item): Ditto.
        (WebCore::DataTransferItemList::add): Ditto.
        (WebCore::DataTransferItemList::remove): Ditto.
        (WebCore::DataTransferItemList::clear): Ditto.
        * dom/DataTransferItemList.h:
        (WebCore::DataTransferItemList::DataTransferItemList):
        (WebCore::DataTransferItemList::~DataTransferItemList): Deleted.
        (WebCore::DataTransferItemList::ref): Forwards to DataTransfer's ref.
        (WebCore::DataTransferItemList::deref): Ditto.
        * dom/DataTransferItemList.idl: Updated to match the latest specification.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDataTransferItemsEnabled): Added.
        (WebCore::RuntimeEnabledFeatures::dataTransferItemsEnabled const): Added.

2017-08-11  Brady Eidson  <beidson@apple.com>

        Move files inside WebCore/workers to WebCore/workers/service.
        https://bugs.webkit.org/show_bug.cgi?id=175495

        Rubberstamped by Tim Horton.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        * workers/service/ServiceWorker.cpp: Renamed from Source/WebCore/workers/ServiceWorker.cpp.
        * workers/service/ServiceWorker.h: Renamed from Source/WebCore/workers/ServiceWorker.h.
        * workers/service/ServiceWorker.idl: Renamed from Source/WebCore/workers/ServiceWorker.idl.
        * workers/service/ServiceWorkerContainer.cpp: Renamed from Source/WebCore/workers/ServiceWorkerContainer.cpp.
        * workers/service/ServiceWorkerContainer.h: Renamed from Source/WebCore/workers/ServiceWorkerContainer.h.
        * workers/service/ServiceWorkerContainer.idl: Renamed from Source/WebCore/workers/ServiceWorkerContainer.idl.
        * workers/service/ServiceWorkerGlobalScope.cpp: Renamed from Source/WebCore/workers/ServiceWorkerGlobalScope.cpp.
        * workers/service/ServiceWorkerGlobalScope.h: Renamed from Source/WebCore/workers/ServiceWorkerGlobalScope.h.
        * workers/service/ServiceWorkerGlobalScope.idl: Renamed from Source/WebCore/workers/ServiceWorkerGlobalScope.idl.
        * workers/service/ServiceWorkerJob.cpp: Renamed from Source/WebCore/workers/ServiceWorkerJob.cpp.
        * workers/service/ServiceWorkerJob.h: Renamed from Source/WebCore/workers/ServiceWorkerJob.h.
        * workers/service/ServiceWorkerJobClient.h: Renamed from Source/WebCore/workers/ServiceWorkerJobClient.h.
        * workers/service/ServiceWorkerProvider.cpp: Renamed from Source/WebCore/workers/ServiceWorkerProvider.cpp.
        * workers/service/ServiceWorkerProvider.h: Renamed from Source/WebCore/workers/ServiceWorkerProvider.h.
        * workers/service/ServiceWorkerRegistration.cpp: Renamed from Source/WebCore/workers/ServiceWorkerRegistration.cpp.
        * workers/service/ServiceWorkerRegistration.h: Renamed from Source/WebCore/workers/ServiceWorkerRegistration.h.
        * workers/service/ServiceWorkerRegistration.idl: Renamed from Source/WebCore/workers/ServiceWorkerRegistration.idl.
        * workers/service/ServiceWorkerRegistrationOptions.h: Renamed from Source/WebCore/workers/ServiceWorkerRegistrationOptions.h.
        * workers/service/ServiceWorkerRegistrationParameters.cpp: Renamed from Source/WebCore/workers/ServiceWorkerRegistrationParameters.cpp.
        * workers/service/ServiceWorkerRegistrationParameters.h: Renamed from Source/WebCore/workers/ServiceWorkerRegistrationParameters.h.
        * workers/service/ServiceWorkerUpdateViaCache.h: Renamed from Source/WebCore/workers/ServiceWorkerUpdateViaCache.h.
        * workers/service/ServiceWorkerUpdateViaCache.idl: Renamed from Source/WebCore/workers/ServiceWorkerUpdateViaCache.idl.

2017-08-11  Chris Dumez  <cdumez@apple.com>

        Implement quota limitation for keepalive Fetch requests
        https://bugs.webkit.org/show_bug.cgi?id=175482

        Reviewed by Sam Weinig and Youenn Fablet.

        Implement quota limitation for keepalive Fetch requests as per:
        - https://fetch.spec.whatwg.org/#http-network-or-cache-fetch (Step 9)

        This partly works for Beacon as well, meaning that no Beacon with a body
        over 64Kb can be sent. However, we don't keep track about wether or not
        beacon loads are inflight or not.

        Also update CachedResourceLoader::requestResource() so that the caller
        can get a ResourceError when it returns null. This is useful for both
        Fetch and Beacon to return better error messages.

        Test: http/wpt/beacon/beacon-quota.html

        * CMakeLists.txt:
        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::BlobLoader::didReceiveResponse):
        (WebCore::FetchBodyOwner::BlobLoader::didFail):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        (WebCore::FetchLoader::didFail):
        * Modules/fetch/FetchLoaderClient.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didFail):
        * Modules/fetch/FetchResponse.h:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isMainOrMediaOrIconOrRawResource const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::requestMedia):
        (WebCore::CachedResourceLoader::requestIcon):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestBeaconResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/KeepaliveRequestTracker.cpp: Added.
        (WebCore::KeepaliveRequestTracker::~KeepaliveRequestTracker):
        (WebCore::KeepaliveRequestTracker::canLoadRequest):
        (WebCore::KeepaliveRequestTracker::registerRequest):
        (WebCore::KeepaliveRequestTracker::responseReceived):
        (WebCore::KeepaliveRequestTracker::notifyFinished):
        (WebCore::KeepaliveRequestTracker::unregisterRequest):
        * loader/cache/KeepaliveRequestTracker.h: Added.
        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::lengthInBytes const):
        (WebCore::FormData::lengthInBytes const):
        * platform/network/FormData.h:

2017-08-11  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move ValueToString into WTF
        https://bugs.webkit.org/show_bug.cgi?id=175469

        Reviewed by Sam Weinig.

        No new tests. No change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.h:
        (WTF::ValueToString<WebCore::TextTrackCue::string):
        (WebCore::ValueToString<TextTrackCue::string): Deleted.
        (WebCore::ValueToString<MediaTime>::string): Deleted.
        * platform/LayoutUnit.h:
        (WTF::ValueToString<WebCore::LayoutUnit>::string):
        (WebCore::ValueToString<LayoutUnit>::string): Deleted.
        * platform/PODInterval.h:
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        * platform/graphics/FloatPolygon.h:
        (WTF::ValueToString<WebCore::FloatPolygonEdge::string):
        (WebCore::ValueToString<FloatPolygonEdge::string): Deleted.
        * rendering/FloatingObjects.h:
        (WTF::ValueToString<WebCore::FloatingObject::string):
        (WebCore::ValueToString<FloatingObject::string): Deleted.
        * rendering/RenderFlowThread.h:
        (WTF::ValueToString<WebCore::RenderRegion::string):
        (WebCore::ValueToString<RenderRegion::string): Deleted.

2017-08-11  Sam Weinig  <sam@webkit.org>

        [Bindings] Simplify DOMPromiseProxy now that WTF::Function can return references
        https://bugs.webkit.org/show_bug.cgi?id=175394

        Reviewed by Chris Dumez.

        * bindings/IDLTypes.h:
        (WebCore::IDLWrapper::convertToParameterType): Deleted.

            Remove no longer used convertToParameterType.

        * bindings/js/DOMPromiseProxy.h:

            - Replace Variant<Value, Exception> with ExceptionOr<Value> / ExceptionOr<void>.
            - Update ResolveCallback to have a return type of IDLType::ParameterType, rather than
              IDLType::ImplementationType, now that WTF::Function supports references as the 
              return type. This is needed, since the IDLType::ParameterType for an interface T
              is T&.

        * css/FontFace.cpp:
        * css/FontFace.h:
        * css/FontFaceSet.cpp:
        * css/FontFaceSet.h:

            Update resolve callbacks to return a reference rather than a RefPtr, matching
            the new signature requirement.

2017-08-11  Sam Weinig  <sam@webkit.org>

        [WebIDL] Replace JSCryptoKeyCustom and JSCryptoAlgorithmBuilder with generated code
        https://bugs.webkit.org/show_bug.cgi?id=175457

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp: Removed.
        * bindings/js/JSCryptoAlgorithmBuilder.h: Removed.
        * bindings/js/JSCryptoKeyCustom.cpp: Removed.

            Remove JSCryptoAlgorithmBuilder and JSCryptoKeyCustom, add KeyAlgorithm
            IDLs and headers.

        * crypto/CryptoKey.cpp:
        * crypto/CryptoKey.h:
        * crypto/CryptoKey.idl:
        
            Replace custom algorithm attribute with a union of the supported key algorithms.
        
        * crypto/keys/CryptoAesKeyAlgorithm.h: Added.
        * crypto/keys/CryptoAesKeyAlgorithm.idl: Added.
        * crypto/keys/CryptoEcKeyAlgorithm.h: Added.
        * crypto/keys/CryptoEcKeyAlgorithm.idl: Added.
        * crypto/keys/CryptoHmacKeyAlgorithm.h: Added.
        * crypto/keys/CryptoHmacKeyAlgorithm.idl: Added.
        * crypto/keys/CryptoKeyAlgorithm.h: Added.
        * crypto/keys/CryptoKeyAlgorithm.idl: Added.
        * crypto/keys/CryptoRsaHashedKeyAlgorithm.h: Added.
        * crypto/keys/CryptoRsaHashedKeyAlgorithm.idl: Added.
        * crypto/keys/CryptoRsaKeyAlgorithm.h: Added.
        * crypto/keys/CryptoRsaKeyAlgorithm.idl: Added.

            Add IDLs and headers fo the supported key algorithms.

        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyEC.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeyRaw.h:

            Give each of the existing KeyAlgorithm subclasses a dictionary() function
            that returns the populated corresponding spec'd dictionary.

2017-08-11  Simon Fraser  <simon.fraser@apple.com>

        Some RenderSVGResource cleanup
        https://bugs.webkit.org/show_bug.cgi?id=175494

        Reviewed by Zalan Bujtas.

        Use more initializers. Remove spurious use of bitfields that didn't save any space at all.
        0 -> nullptr.

        No behavior change.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::RenderSVGResourceGradient):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::RenderSVGResourcePattern):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::fillShape):
        (WebCore::RenderSVGShape::strokeShape):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGRenderingContext.h:
        (WebCore::SVGRenderingContext::SVGRenderingContext):

2017-08-11  Tim Horton  <timothy_horton@apple.com>

        Fix the build with modern Clang's -Wexpansion-to-defined
        https://bugs.webkit.org/show_bug.cgi?id=175467
        <rdar://problem/33667497>

        Reviewed by Simon Fraser.

        * crypto/mac/SerializedCryptoKeyWrapMac.mm:

2017-08-11  Brady Eidson  <beidson@apple.com>

        Crash under ServiceWorkerJob::failedWithException.
        https://bugs.webkit.org/show_bug.cgi?id=175488

        Reviewed by Tim Horton.

        Covered by existing tests.

        * workers/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::failedWithException): jobDidFinish might cause the Job to be deleted, so make it last.

2017-08-10  Sam Weinig  <sam@webkit.org>

        WTF::Function does not allow for reference / non-default constructible return types
        https://bugs.webkit.org/show_bug.cgi?id=175244

        Reviewed by Chris Dumez.

        * bindings/js/JSCustomElementInterface.h:
        (WebCore::JSCustomElementInterface::invokeCallback):
        Update the default value for the addArguments parameter to be an empty lambda, rather than
        default initialization, which leads to a null WTF::Function. This allows us to remove support
        for calling null WTF::Function. No change in behavior.

2017-08-11  Antti Koivisto  <antti@apple.com>

        Remove RenderQuote collection from RenderView
        https://bugs.webkit.org/show_bug.cgi?id=175479

        Reviewed by Andreas Kling.

        We can do it well enough without maintaining this pointer structure.

        Global updating doesn't work well with future direction for first-letter and similar anyway.
        We need to update quote immediately when updating its style.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::insertedIntoTree):
        (WebCore::RenderQuote::willBeRemovedFromTree):

            Just tell the view that there are renderers to update.

        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::isOpen const):
        (WebCore::RenderQuote::updateRenderer):
        (WebCore::RenderQuote::updateRenderers): Deleted.

            Update single renderer only. RenderTreeUpdater provides the previous renderer to compute the depth.

        * rendering/RenderQuote.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::registerQuote): Deleted.
        (WebCore::RenderView::unregisterQuote): Deleted.
        (WebCore::RenderView::updateSpecialRenderers): Deleted.

            Remove the quote list.

        * rendering/RenderView.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::commit):

            Ensure that all quotes are updated.

        (WebCore::RenderTreeUpdater::updateBeforeOrAfterPseudoElement):
        (WebCore::RenderTreeUpdater::updateQuotesUpTo):

            Traverse render tree to find quotes to update starting from the previous updated quote.

        * style/RenderTreeUpdater.h:

2017-08-11  Adrian Perez de Castro  <aperez@igalia.com>

        [CMake] Many warning about missing “override” keywords in ANGLE with Clang
        https://bugs.webkit.org/show_bug.cgi?id=175475

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt: Add "-Wno-inconsistent-missing-override" to the
        compiler flags using for building the ANGLE sources.

2017-08-11  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Overriden virtual function not marked “override” in ImageBufferDataCairo.h
        https://bugs.webkit.org/show_bug.cgi?id=175476

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/cairo/ImageBufferDataCairo.h: Add missing "override" qualifier.

2017-08-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Soup] Cannot access HTTPS sites using a HTTP proxy that requires authentication
        https://bugs.webkit.org/show_bug.cgi?id=175378

        Reviewed by Sergio Villar Senin.

        Bring back part of the code removed in r206732, to keep a reference to the SoupMessage in the
        AuthenticationChallenge since it can be different to the resource message.

        * platform/network/soup/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Deleted.
        (WebCore::AuthenticationChallenge::authenticationClient const): Deleted.
        (WebCore::AuthenticationChallenge::soupAuth const): Deleted.
        (WebCore::AuthenticationChallenge::setProposedCredential): Deleted.
        * platform/network/soup/AuthenticationChallengeSoup.cpp:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        (WebCore::AuthenticationChallenge::platformCompare):

2017-08-10  Dan Bernstein  <mitz@apple.com>

        Fixed building for macOS 10.12 with the macOS 10.13 SDK.

        Suppressed the unguarded-availability-new warning around uses of AVSampleBufferAudioRenderer
        and AVSampleBufferRenderSynchronizer. Even though the 10.13 SDK declares them as available
        starting in that release, they have been available as SPI earlier.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableAudioSample):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener beginObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener stopObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::rendererDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::flush):

2017-08-10  Brady Eidson  <beidson@apple.com>

        Rename the source files for the WTF persistent coders.
        https://bugs.webkit.org/show_bug.cgi?id=175441

        Reviewed by Tim Horton.

        * platform/network/NetworkLoadMetrics.h:

2017-08-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        Make ThreadGlobalData RefCounted for web thread
        https://bugs.webkit.org/show_bug.cgi?id=175439

        Reviewed by Mark Lam.

        When the web thread is enabled, we share ThreadGlobalData between the web thread and the main thread.
        The problem happens when the main thread is dying. It could start deallocating TLS and the web
        thread may see the destructed ThreadGlobalData.

        Even though, the current implementation is safe because the main thread do not perform TLS deallocation
        in the Darwin environment. But this is not true in Windows. And we should not rely on this condition
        that depends on the platforms.

        In this patch, we make ThreadGlobalData ThreadSafeRefCounted. This type verbosely describes that
        ThreadGlobalData could be shared between threads when the web thread enabled. And make the life time
        management simple instead of relying on the platform dependent TLS implementation.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::setWebCoreThreadData):
        (WebCore::threadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::cachedResourceRequestInitiators): Deleted.
        (WebCore::ThreadGlobalData::eventNames): Deleted.
        (WebCore::ThreadGlobalData::threadTimers): Deleted.
        (WebCore::ThreadGlobalData::qualifiedNameCache): Deleted.
        (WebCore::ThreadGlobalData::cachedConverterICU): Deleted.
        (WebCore::ThreadGlobalData::cachedConverterTEC): Deleted.

2017-08-10  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Use @toNumber in builtins
        https://bugs.webkit.org/show_bug.cgi?id=172692

        Reviewed by Sam Weinig.

        Use @toNumber bytecode intrinsic. It emits op_to_number, which efficiently converts
        a given argument to a number.

        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableByteStreamController):
        (readableByteStreamControllerRespond):
        * Modules/streams/StreamInternals.js:
        (validateAndNormalizeQueuingStrategy):
        (enqueueValueWithSize):

2017-08-10  Nan Wang  <n_wang@apple.com>

        AX: crash at WebCore::AccessibilityObject::supportsARIALiveRegion() const + 24
        https://bugs.webkit.org/show_bug.cgi?id=175340
        <rdar://problem/33782159>

        Reviewed by Chris Fleizach.

        The issue here is that we manualy set the parent object of the AccessibilitySVGRoot object
        and there are chances that the parent doesn't detach it properly during the parent's destroying
        process. Accessing the stale parent object will lead to a crash.
        Fixed this by making the parent object a weak pointer so we don't access an invalid memory. 

        Test: accessibility/add-children-pseudo-element.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::createWeakPtr):
        * accessibility/AccessibilitySVGRoot.cpp:
        (WebCore::AccessibilitySVGRoot::AccessibilitySVGRoot):
        (WebCore::AccessibilitySVGRoot::setParent):
        (WebCore::AccessibilitySVGRoot::parentObject const):
        * accessibility/AccessibilitySVGRoot.h:

2017-08-10  Chris Dumez  <cdumez@apple.com>

        [Beacon] Do connect-src CSP check on redirects as well
        https://bugs.webkit.org/show_bug.cgi?id=175410
        <rdar://problem/33815470>

        Reviewed by Youenn Fablet.

        Pass ContentSecurityPolicy object to createPingHandle so that we can send
        enough data to the NetworkProcess so do CSP checks for Ping loads such
        as Beacon. For the IPC, we serialize the ContentSecurityPolicy's response
        headers. Those headers are now cached in ContentSecurityPolicy for
        performance reasons. CSP headers are rarely updated in practice but
        sendBeacon() may get called repeatedly for a given document.

        Tests: http/wpt/beacon/connect-src-beacon-redirect-allowed.sub.html
               http/wpt/beacon/connect-src-beacon-redirect-blocked.sub.html

        * loader/LoaderStrategy.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        * loader/PingLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::responseHeaders const):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyResponseHeaders.h:
        (WebCore::ContentSecurityPolicyResponseHeaders::encode const):
        (WebCore::ContentSecurityPolicyResponseHeaders::decode):

2017-08-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] ThreadSpecific should not introduce additional indirection
        https://bugs.webkit.org/show_bug.cgi?id=175187

        Reviewed by Mark Lam.

        We drop ThreadSpecific::replace feature which is only used by
        Web thread. Instead, we use ThreadSpecific<std::unique_ptr<T>> here.

        While this std::unique_ptr<T> shares one instance between main thread
        and web thread, this is the same to the current implementation. It is
        safe because the web thread never finishes.

        And for non-web thread implementation, we just use ThreadSpecific<T>,
        since it is the most efficient.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::setWebCoreThreadData):
        (WebCore::threadGlobalData):
        We also drop StringImpl::empty() call since it is not necessary now:
        StringImpl::empty data is statically initialized by using constexpr.

        * platform/ThreadGlobalData.h:
        We make it FAST_ALLOCATED since it is previously allocated by fast malloc
        in ThreadSpecific.

2017-08-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r220515) [GTK][CMake] Build with ENABLE_GEOLOCATION fails on Debian Jessie
        https://bugs.webkit.org/show_bug.cgi?id=175426

        Reviewed by Carlos Alberto Lopez Perez.

        Also stop using GEOCLUE_LIBRARIES and GEOCLUE_INCLUDE_DIRS, since they are empty. Apparently
        we have not actually been using the client library at all this whole time, only the D-Bus
        interface.

        * PlatformGTK.cmake:

2017-08-10  Brady Eidson  <beidson@apple.com>

        Add ServiceWorkerJob.
        https://bugs.webkit.org/show_bug.cgi?id=175241

        Reviewed by Tim Horton.

        Test: http/tests/workers/service/basic-register.html

        This patch does a few things:
        - Adds the spec concept of a ServiceWorkerJob (in the WebProcess, at least)
        - Adds a ServiceWorkerProvider interface for WebKit to implement
        - Actually creates a job for service worker registration and "schedules" it,
          though it always immediately errors out the promise.

        Actually queuing jobs and executing asynchronously is coming up soon.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/Document.cpp:
        (WebCore::Document::sessionID const):
        * dom/Document.h:

        * workers/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::jobDidFinish):
        * workers/ServiceWorkerContainer.h:

        * workers/ServiceWorkerJob.cpp: Added.
        (WebCore::ServiceWorkerJob::ServiceWorkerJob):
        (WebCore::ServiceWorkerJob::~ServiceWorkerJob):
        (WebCore::ServiceWorkerJob::failedWithException):
        * workers/ServiceWorkerJob.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
        (WebCore::ServiceWorkerJob::createRegisterJob):
        (WebCore::ServiceWorkerJob::identifier const):

        * workers/ServiceWorkerJobClient.h: Added.
        (WebCore::ServiceWorkerJobClient::~ServiceWorkerJobClient):

        * workers/ServiceWorkerProvider.cpp: Added.
        (WebCore::ServiceWorkerProvider::singleton):
        (WebCore::ServiceWorkerProvider::setSharedProvider):
        * workers/ServiceWorkerProvider.h: Added.
        * workers/ServiceWorkerRegistrationOptions.h: Copied from Source/WebCore/workers/ServiceWorkerContainer.h.
        * workers/ServiceWorkerRegistrationParameters.cpp: Added.
        * workers/ServiceWorkerRegistrationParameters.h: Added.

2017-08-10  Tim Horton  <timothy_horton@apple.com>

        Remove some unused lambda captures so that WebKit builds with -Wunused-lambda-capture
        https://bugs.webkit.org/show_bug.cgi?id=175436
        <rdar://problem/33667497>

        Reviewed by Simon Fraser.

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):

2017-08-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r220463.
        https://bugs.webkit.org/show_bug.cgi?id=175435

        unaccepted fix (Requested by n_wang on #webkit).

        Reverted changeset:

        "AX: crash at
        WebCore::AccessibilityObject::supportsARIALiveRegion() const +
        24"
        https://bugs.webkit.org/show_bug.cgi?id=175340
        http://trac.webkit.org/changeset/220463

2017-08-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove ENABLE_GAMEPAD_DEPRECATED
        https://bugs.webkit.org/show_bug.cgi?id=175361

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:
        * platform/Linux.cmake: Removed.
        * platform/gamepad/deprecated/Gamepads.h: Removed.
        * platform/gamepad/glib/GamepadsGlib.cpp: Removed.
        * platform/gamepad/linux/GamepadDeviceLinux.cpp: Removed.
        * platform/gamepad/linux/GamepadDeviceLinux.h: Removed.

2017-08-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments after r219173.
        https://bugs.webkit.org/show_bug.cgi?id=174149

        Unreviewed.

        * css/CSSFontStyleValue.h:
        * editing/EditingStyle.cpp:
        (WebCore::identifierForStyleProperty):

2017-08-10  Antti Koivisto  <antti@apple.com>

        Try to fix windows build.

        * style/StyleUpdate.h:
        (WebCore::Style::TextUpdate::TextUpdate):

2017-08-10  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 Xabier Rodriguez-Calvar.

        In r219385 we changed the early return in fillSelectionData() to check the selection data length instead of the
        data pointer. However, the gtk_selection_data_get_length() can return -1, so we need to check also if the value
        less than 0. The case of setting an empty string could be valid depending on the target type, so it's better to
        return early only when data lenght is less than 0 and handle the 0 length case in each target.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData):

2017-08-10  Antti Koivisto  <antti@apple.com>

        Text renderer updates should be done by RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=175417

        Reviewed by Andreas Kling.

        All render tree mutations should be done by RenderTreeUpdater. Currently
        Text::updateRendererAfterContentChange calls RenderText::setTextWithOffset directly.

        * dom/Document.cpp:
        (WebCore::Document::updateTextRenderer):

            Add range argument.

        * dom/Document.h:
        * dom/Text.cpp:
        (WebCore::Text::updateRendererAfterContentChange):

            Remove call to setTextWithOffset and pass the range to updateTextRenderer

        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::updateTextRenderer):

            Call setTextWithOffset here.

        * style/RenderTreeUpdater.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveComposedTree):
        * style/StyleUpdate.cpp:
        (WebCore::Style::Update::textUpdate const):
        (WebCore::Style::Update::addText):

            Add TextUpdate struct similar to ElementUpdate to pass the range to the RenderTreeUpdater.

        * style/StyleUpdate.h:

2017-08-10  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK+ build fix for ENABLE_GLES2=ON.

        * platform/graphics/texmap/TextureMapperGLHeaders.h:
        Define various GL constants that are not provided in GLES2 headers
        but are only leveraged in OpenGL calls if at runtime the underlying
        OpenGL is GLES2-capable.

2017-08-10  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Remove GraphicsContext3D usage from BitmapTexturePool
        https://bugs.webkit.org/show_bug.cgi?id=175319

        Reviewed by Carlos Garcia Campos.

        Drop the GraphicsContext3D reference in BitmapTexturePool now
        that the BitmapTextureGL doesn't require it anymore.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::BitmapTexturePool):
        * platform/graphics/texmap/BitmapTexturePool.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):

2017-08-10  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Drop GraphicsContext3D usage from BitmapTextureGL
        https://bugs.webkit.org/show_bug.cgi?id=175317

        Reviewed by Carlos Garcia Campos.

        Have BitmapTextureGL use direct OpenGL API entrypoints and constants
        instead of leveraging the GraphicsContext3D class. Any GraphicsContext3D
        object passed to BitmapTextureGL would assume rendering to the GL context
        that's current on that thread, translating method invocations to the
        OpenGL API. We can do this by ourselves and benefit by avoiding allocating
        GraphicsContext3D resources like the ANGLE compiler that are by most useful
        for WebGL.

        BitmapTextureGL::create() call sites are adjusted to stop passing a
        GraphicsContext3D reference. BitmapTextureGL::bindAsSurface() doesn't need
        a replacement for the passed-in GraphicsContext3D object since that object
        originated from the TextureMapperGL instance, whose GraphicsContext3D is by
        default of the render-to-current-context nature. Other changes are direct
        translations of GraphicsContext3D methods to OpenGL API calls, or of
        GraphicsContext3D values to OpenGL API constants.

        No new tests -- no change in behavior.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        Also remove an unnecessary GraphicsContext.h header inclusion.
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::BitmapTextureGL::didReset):
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle):
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore::BitmapTextureGL::initializeStencil):
        (WebCore::BitmapTextureGL::initializeDepthBuffer):
        (WebCore::BitmapTextureGL::clearIfNeeded):
        (WebCore::BitmapTextureGL::createFboIfNeeded):
        (WebCore::BitmapTextureGL::bindAsSurface):
        (WebCore::BitmapTextureGL::~BitmapTextureGL):
        (WebCore::BitmapTextureGL::copyFromExternalTexture):
        * platform/graphics/texmap/BitmapTextureGL.h:
        (WebCore::BitmapTextureGL::create):
        (WebCore::BitmapTextureGL::textureTarget const):
        (WebCore::BitmapTextureGL::internalFormat const):
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::createTexture):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::createTexture):

2017-08-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Remove support for geoclue1
        https://bugs.webkit.org/show_bug.cgi?id=164205

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake:
        * platform/geoclue/GeolocationProviderGeoclue.h:
        * platform/geoclue/GeolocationProviderGeoclue1.cpp: Removed.
        * platform/geoclue/GeolocationProviderGeoclue2.cpp: Removed.

2017-08-09  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [PAL] Move spi/cocoa and spi/cg directories into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175175

        Reviewed by Myles C. Maxfield.

        * Modules/applepay/cocoa/PaymentCocoa.mm:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        * Modules/applepay/cocoa/PaymentMerchantSessionCocoa.mm:
        * Modules/applepay/cocoa/PaymentMethodCocoa.mm:
        * PlatformAppleWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/EditorCocoa.mm:
        * editing/cocoa/HTMLConverter.mm:
        * editing/ios/EditorIOS.mm:
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        * page/mac/TextIndicatorWindow.mm:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        * platform/cocoa/DataDetectorsCoreSoftLink.h:
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        * platform/cocoa/ParentalControlsContentFilter.mm:
        * platform/cocoa/SleepDisablerCocoa.cpp:
        * platform/graphics/Font.cpp:
        * platform/graphics/Font.h:
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        * platform/graphics/cg/NativeImageCG.cpp:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        * platform/graphics/cocoa/FontCocoa.mm:
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        * platform/graphics/cocoa/IOSurface.mm:
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        * platform/graphics/cocoa/WebActionDisablingCALayerDelegate.h:
        * platform/graphics/ios/FontAntialiasingStateSaver.h:
        * platform/graphics/ios/FontCacheIOS.mm:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/GlyphPageMac.cpp:
        * platform/graphics/win/FontCacheWin.cpp:
        * platform/ios/LegacyTileCache.mm:
        * platform/ios/LegacyTileGrid.mm:
        * platform/ios/LegacyTileGridTile.mm:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        * platform/ios/QuickLook.mm:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        * platform/ios/wak/WKGraphics.mm:
        * platform/mac/DragImageMac.mm:
        * platform/mac/PlatformScreenMac.mm:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        * platform/mac/ThemeMac.mm:
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        * platform/network/cocoa/CookieStorageObserver.mm:
        * platform/network/cocoa/NetworkLoadMetrics.mm:
        * platform/network/mac/AuthenticationMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/spi/ios/DataDetectorsUISPI.h:
        * platform/spi/mac/DataDetectorsSPI.h:
        * platform/spi/mac/NSViewSPI.h:
        * rendering/RenderThemeCocoa.mm:
        * rendering/RenderThemeIOS.mm:
        * rendering/RenderThemeMac.mm:

2017-08-09  Don Olmstead  <don.olmstead@sony.com>

        [WTF] Move TextStream into WTF
        https://bugs.webkit.org/show_bug.cgi?id=175211

        Reviewed by Myles C. Maxfield.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedTreeIterator.cpp:
        * dom/Position.cpp:
        * dom/Position.h:
        * dom/Range.cpp:
        (WebCore::operator<<):
        * dom/Range.h:
        * dom/ViewportArguments.cpp:
        * dom/ViewportArguments.h:
        * editing/VisiblePosition.cpp:
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        * editing/VisibleSelection.h:
        * html/HTMLVideoElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * page/FrameView.cpp:
        * page/ViewportConfiguration.cpp:
        * page/ViewportConfiguration.h:
        * page/WheelEventDeltaFilter.cpp:
        * page/animation/CSSPropertyAnimation.cpp:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        * page/scrolling/ScrollingConstraints.cpp:
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTree.cpp:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        * platform/CalculationValue.cpp:
        * platform/CalculationValue.h:
        * platform/LayoutUnit.cpp:
        * platform/LayoutUnit.h:
        * platform/Length.cpp:
        * platform/Length.h:
        * platform/LengthBox.cpp:
        * platform/LengthBox.h:
        * platform/LengthPoint.cpp:
        * platform/LengthPoint.h:
        * platform/LengthSize.cpp:
        * platform/LengthSize.h:
        * platform/LogMacros.h:
        * platform/ScrollView.cpp:
        * platform/ScrollableArea.cpp:
        * platform/animation/TimingFunction.cpp:
        * platform/animation/TimingFunction.h:
        * platform/graphics/BitmapImage.cpp:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.cpp:
        * platform/graphics/Color.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/FloatPoint.cpp:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatPoint3D.cpp:
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/FloatRect.cpp:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatRoundedRect.cpp:
        * platform/graphics/FloatRoundedRect.h:
        * platform/graphics/FloatSize.cpp:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontTaggedSettings.cpp:
        * platform/graphics/FontTaggedSettings.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::dump const):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::dumpAdditionalProperties const):
        * platform/graphics/GraphicsTypes.cpp:
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.cpp:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.cpp:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.cpp:
        * platform/graphics/IntSize.h:
        * platform/graphics/LayoutPoint.cpp:
        * platform/graphics/LayoutPoint.h:
        * platform/graphics/LayoutRect.cpp:
        * platform/graphics/LayoutRect.h:
        * platform/graphics/LayoutSize.cpp:
        * platform/graphics/LayoutSize.h:
        * platform/graphics/NamedImageGeneratedImage.cpp:
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/Path.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAAnimation.cpp:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileController.cpp:
        * platform/graphics/ca/TileGrid.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        * platform/graphics/displaylists/DisplayList.cpp:
        (WebCore::DisplayList::DisplayList::description const):
        * platform/graphics/displaylists/DisplayList.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        * platform/graphics/filters/DistantLightSource.cpp:
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEBlend.cpp:
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMerge.cpp:
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        * platform/graphics/filters/SourceGraphic.h:
        * platform/graphics/filters/SpotLightSource.cpp:
        * platform/graphics/filters/SpotLightSource.h:
        * platform/graphics/transforms/AffineTransform.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.cpp:
        * platform/graphics/transforms/TransformOperation.h:
        * platform/graphics/transforms/TransformOperations.cpp:
        * platform/graphics/transforms/TransformOperations.h:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        * platform/graphics/transforms/TranslateTransformOperation.h:
        * platform/ios/SelectionRect.cpp:
        (WebCore::operator<<):
        * platform/ios/SelectionRect.h:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/text/TextAllInOne.cpp:
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::outputLineTreeAndMark const):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::outputLineTreeAndMark const):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderTreeAsText.cpp:
        * rendering/RenderTreeAsText.h:
        * rendering/ScrollAlignment.cpp:
        * rendering/ScrollAlignment.h:
        * rendering/SimpleLineLayoutCoverage.cpp:
        * rendering/SimpleLineLayoutFunctions.cpp:
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/style/FillLayer.cpp:
        * rendering/style/FillLayer.h:
        * rendering/style/NinePieceImage.cpp:
        * rendering/style/NinePieceImage.h:
        * rendering/style/RenderStyleConstants.cpp:
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/svg/SVGRenderTreeAsText.h:
        (WebCore::operator<<):
        * svg/SVGLengthValue.cpp:
        * svg/SVGLengthValue.h:
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImage.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEImage.h:

2017-08-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r220466, r220477, and r220487.
        https://bugs.webkit.org/show_bug.cgi?id=175411

        This change broke existing API tests and follow up fixes did
        not resolve all the issues. (Requested by ryanhaddad on
        #webkit).

        Reverted changesets:

        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220466

        "WTF::Function does not allow for reference / non-default
        constructible return types"
        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220477

        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220487

2017-08-09  Chris Dumez  <cdumez@apple.com>

        [Beacon][NetworkSession] Support CORS-preflighting on redirects
        https://bugs.webkit.org/show_bug.cgi?id=175386
        <rdar://problem/33801370>

        Reviewed by Youenn Fablet.

        Export a couple of WebCore symbols so I can use them in WebKit2.

        Tests: http/wpt/beacon/cors/cors-preflight-redirect-failure.html
               http/wpt/beacon/cors/cors-preflight-redirect-from-crossorigin-to-sameorigin.html
               http/wpt/beacon/cors/cors-preflight-redirect-success.html

        * loader/CrossOriginAccessControl.h:
        * page/SecurityOrigin.h:

2017-08-09  Jeremy Jones  <jeremyj@apple.com>

        Use MPAVRoutingController instead of deprecated versions.
        https://bugs.webkit.org/show_bug.cgi?id=175063

        Reviewed by Tim Horton.

        No new tests because no behavior change. This uses a different platform class to present
        an interface.

        Remove deprecated MPAudioVideoRoutingPopoverController and MPAVRoutingSheet
        Add MPMediaControlsViewController.

        * platform/spi/ios/MediaPlayerSPI.h:

2017-08-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Mark font-display as in development
        https://bugs.webkit.org/show_bug.cgi?id=175387

        Unreviewed.

        * features.json:

2017-08-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219334.
        https://bugs.webkit.org/show_bug.cgi?id=175398

        Caused bug 175023 (Requested by ap on #webkit).

        Reverted changeset:

        "[SVG] Leak in SVGAnimatedListPropertyTearOff"
        https://bugs.webkit.org/show_bug.cgi?id=172545
        http://trac.webkit.org/changeset/219334

2017-08-09  Dave Hyatt  <hyatt@apple.com>

        [Repaint from Layout Removal] Move layer repaint rects into a map
        https://bugs.webkit.org/show_bug.cgi?id=175393

        Reviewed by Zalan Bujtas.

        Move the two repaint rects held by RenderLayer into a RenderLayerModelObject -> RepaintLayoutRects hash map.
        RepaintLayoutRects is a new struct that holds both rects.

        Eventually more objects than just self painting layers will be caching repaint rects, so this takes a first
        step towards having a common cache for these repaint rects. In addition this change saves memory, since
        layers that aren't self-painting no longer have empty repaint rects taking up space in RenderLayer.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::repaintRectIncludingNonCompositingDescendants):
        (WebCore::RenderLayer::computeRepaintRects):
        (WebCore::RenderLayer::clearRepaintRects):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::scrollTo):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RepaintLayoutRects::RepaintLayoutRects):
        (WebCore::RenderLayerModelObject::willBeDestroyed):
        (WebCore::RenderLayerModelObject::destroyLayer):
        (WebCore::RenderLayerModelObject::styleDidChange):
        (WebCore::RenderLayerModelObject::hasRepaintLayoutRects):
        (WebCore::RenderLayerModelObject::setRepaintLayoutRects):
        (WebCore::RenderLayerModelObject::clearRepaintLayoutRects):
        (WebCore::RenderLayerModelObject::repaintLayoutRects):
        (WebCore::RenderLayerModelObject::computeRepaintLayoutRects):
        * rendering/RenderLayerModelObject.h:
        (WebCore::RepaintLayoutRects::RepaintLayoutRects):

2017-08-09  Sam Weinig  <sam@webkit.org>

        WTF::Function does not allow for reference / non-default constructible return types
        https://bugs.webkit.org/show_bug.cgi?id=175244

        Reviewed by Chris Dumez.

        * bindings/js/JSCustomElementInterface.h:
        (WebCore::JSCustomElementInterface::invokeCallback):
        Update the default value for the addArguments parameter to be an empty lambda, rather than
        default initialization, which leads to a null WTF::Function. This allows us to remove support
        for calling null WTF::Function. No change in behavior.

2017-08-09  Brady Eidson  <beidson@apple.com>

        Teach ScriptExecutionContexts about their SessionID.
        https://bugs.webkit.org/show_bug.cgi?id=175391

        Reviewed by Andy Estes.

        No new tests (No current change in behavior).

        Turns out that Workers need to know their SessionID for future feature development.
        So let's teach it to them.

        * dom/ScriptExecutionContext.h: Expose a pure virtual SessionID accessor.

        * dom/Document.cpp:
        (WebCore::Document::sessionID const):
        * dom/Document.h:

        * page/SessionID.cpp:
        (WebCore::SessionID::isolatedCopy const):
        * page/SessionID.h:

        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        * workers/DedicatedWorkerGlobalScope.h:

        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:

        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:

        * workers/WorkerGlobalScopeProxy.h:

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:

2017-08-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] ENABLE_DRAG_SUPPORT should be turned off for iOS 10 and enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=175392
        <rdar://problem/33783207>

        Reviewed by Tim Horton and Megan Gardner.

        Tweak FeatureDefines to enable drag and drop by default, and disable only on unsupported platforms (i.e. iOS 10).
        No change in behavior.

        * Configurations/FeatureDefines.xcconfig:

2017-08-09  Kirill Ovchinnikov  <kirill.ovchinnikov@lge.com>

        Old subtitle track is not deleted on 'src' attribute change event
        https://bugs.webkit.org/show_bug.cgi?id=175031

        Reviewed by Eric Carlson.

        Test: media/track/text-track-src-change.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackReadyStateChanged):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::loadTimerFired):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::clearTextDisplayContainer):
        * html/shadow/MediaControls.h:

2017-08-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220457.

        This change introduced API test failures.

        Reverted changeset:

        "WTF::Function does not allow for reference / non-default
        constructible return types"
        https://bugs.webkit.org/show_bug.cgi?id=175244
        http://trac.webkit.org/changeset/220457

2017-08-09  Don Olmstead  <don.olmstead@sony.com>

        [WinCairo] Fix build after rev 220399
        https://bugs.webkit.org/show_bug.cgi?id=175360

        Reviewed by Žan Doberšek.

        No new tests. No change in behavior.

        * platform/graphics/texmap/TextureMapperGLHeaders.h:

2017-08-09  Nan Wang  <n_wang@apple.com>

        AX: crash at WebCore::AccessibilityObject::supportsARIALiveRegion() const + 24
        https://bugs.webkit.org/show_bug.cgi?id=175340
        <rdar://problem/33782159>

        Reviewed by Chris Fleizach.

        When adding a psuedo element child to a RenderBlockFlow element, there might be a chance where
        the element has already been layed out but we are still holding onto its stale children. Fixed it
        by notifying AX correctly when inserting/removing children during layout.

        Test: accessibility/add-children-pseudo-element.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertFloatingObject):
        (WebCore::RenderBlockFlow::removeFloatingObject):

2017-08-09  Charlie Turner  <cturner@igalia.com>

        [GStreamer][MSE] Add missing lock around getStreamByTrackId
        https://bugs.webkit.org/show_bug.cgi?id=175323

        Reviewed by Xabier Rodriguez-Calvar.

        Covered by existing tests.

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::enqueueSample): Ensure the media source
        lock is taken before modifiying the track queues indirectly via the
        iterator use in getTrackId.

2017-08-09  Daniel Bates  <dabates@apple.com>

        REGRESSION (r219013): OAuth flows are broken when redirecting back to application after authentication
        https://bugs.webkit.org/show_bug.cgi?id=175247
        <rdar://problem/33679804>

        Reviewed by Brady Eidson.

        Add SPI so that Safari can differentiate between a form submission and a redirected form submission
        and have PolicyCheck notify the frame loader client if the navigation was in response to receiving a
        redirect response. This is the WebKit portion to fix an issue when a native app makes use of an OAuth
        OAuth flow that bounces to Safari for user login and then bounce back to the app. Microsoft Graph's
        OAuth flow is one example.

        Safari was differentiating between a form submission and a redirected form submission based on the
        nullity of WKNavigationAction.sourceFrame because in both cases the navigation type was WKNavigationTypeFormSubmitted.
        The navigation type is the same for both navigations because WebKit always used the navigation
        action from the original request for the redirect request when the original request redirected.
        Prior to r219013, WKNavigationAction.sourceFrame would be nil for a form submission that redirects.
        Following r219013, WKNavigationAction.sourceFrame is non-nil unless the navigation was initiated by
        API. In particular, WKNavigationAction.sourceFrame is non-nil for the redirect navigation corresponding
        to a form submission that redirects.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * loader/FrameLoaderClient.h:
        Have dispatchDecidePolicyForNavigationAction() take a boolean as to whether the navigation was in
        response to receiving a redirect response.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Notify the frame loader client whether the navigation
        is in response to receiving a redirect response.

2017-08-09  Sam Weinig  <sam@webkit.org>

        WTF::Function does not allow for reference / non-default constructible return types
        https://bugs.webkit.org/show_bug.cgi?id=175244

        Reviewed by Chris Dumez.

        * bindings/js/JSCustomElementInterface.h:
        (WebCore::JSCustomElementInterface::invokeCallback):
        Update the default value for the addArguments parameter to be an empty lambda, rather than
        default initialization, which leads to a null WTF::Function. This allows us to remove support
        for calling null WTF::Function. No change in behavior.

2017-08-09  Andy Estes  <aestes@apple.com>

        [QuickLook] Use case-insensitive comparison of preview MIME types
        https://bugs.webkit.org/show_bug.cgi?id=175350
        <rdar://problem/33761159>

        Reviewed by Brady Eidson.

        MIME types are case-insensitive, but PreviewLoader was using a case-sensitive comparison to
        determine if a MIME type was supported by QLPreviewConverter. As a result we would fail to
        preview Excel macro-enabled workbooks, since CFNetwork would sniff a MIME type of
        "application/vnd.ms-excel.sheet.macroEnabled.12" but QuickLook contained
        "application/vnd.ms-excel.sheet.macroenabled.12" in its set of supported MIME type strings.

        Fix this by copying the QuickLook supported MIME type set into a HashSet using
        ASCIICaseInsensitiveHash and using that HashSet for MIME type checks.

        Test: quicklook/excel-macro-enabled.html

        * loader/ios/PreviewLoader.mm:
        (WebCore::PreviewLoader::shouldCreateForMIMEType):

2017-08-09  Ms2ger  <Ms2ger@igalia.com>

        Remove unnecessary copies of PlatformMediaSessionManager::m_sessions
        https://bugs.webkit.org/show_bug.cgi?id=175375

        Reviewed by Sam Weinig.

        Remove unnecessary copies of PlatformMediaSessionManager::m_sessions.

        These should have been removed in r207688.

        No new tests: no behavior change.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::applicationWillBecomeInactive const):
        (WebCore::PlatformMediaSessionManager::applicationDidBecomeActive const):
        (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground const):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground const):

2017-08-09  Chris Dumez  <cdumez@apple.com>

        Reinstate active flag for iterators
        https://bugs.webkit.org/show_bug.cgi?id=175312

        Reviewed by Sam Weinig.

        NodeIterator / TreeWalker should no longer allow recursive filters
        after the following change to the DOM specification:
        - https://github.com/whatwg/dom/pull/359

        This patch aligns our behavior with the latest specification.

        No new tests, updated existing tests.

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        Note that we now also call m_candidateNode.clear() before returning an
        exception. This was a pre-existing bug that we failed to do so in the
        exception case but it became more obvious after this change now that
        we throw. This was causing traversal/moz-bug559526.html to fail
        otherwise (the filter was called one too many times). The test case
        is passing in Firefox (The filter is called 4 times and they throw
        each time).

        * dom/Traversal.cpp:
        (WebCore::NodeIteratorBase::NodeIteratorBase):
        (WebCore::NodeIteratorBase::acceptNode):
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:

2017-08-09  Antti Koivisto  <antti@apple.com>

        RenderQuote should not mutate render tree
        https://bugs.webkit.org/show_bug.cgi?id=175328

        Reviewed by Zalan Bujtas.

        RenderQuote text renderers are currently created and deleted in a quirky fashion using a linked list.
        This patch moves to a simpler model that guarantees the mutations are always done in controlled fashion
        during render tree update.

        * dom/Document.cpp:
        (WebCore::Document::updateTextRenderer):

            Move text renderer updating to Document so we can set the inRenderTreeUpdate bit for it too.

        * dom/Document.h:
        * dom/Text.cpp:
        (WebCore::Text::updateRendererAfterContentChange):
        * rendering/RenderDescendantIterator.h:
        (WebCore::RenderDescendantIteratorAdapter<T>::at):
        (WebCore::RenderDescendantConstIteratorAdapter<T>::at const):

            Add at() function for starting iteration from a specified renderer.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::insertedIntoTree):
        (WebCore::RenderQuote::willBeRemovedFromTree):

            Register and unregister quotes to RenderView.
            Don't do any mutations.

        (WebCore::RenderQuote::styleDidChange):

            Invalidate the text renderer but don't mutate it.

        (WebCore::RenderQuote::updateTextRenderer):
        (WebCore::RenderQuote::computeText const):
        (WebCore::RenderQuote::updateRenderers):

            Compute depth of all render quotes and update the text renderer as needed.

        (WebCore::RenderQuote::willBeDestroyed): Deleted.
        (WebCore::RenderQuote::attachQuote): Deleted.
        (WebCore::RenderQuote::detachQuote): Deleted.
        (WebCore::RenderQuote::updateDepth): Deleted.

            Get rid of the linked list.

        * rendering/RenderQuote.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::registerQuote):
        (WebCore::RenderView::unregisterQuote):

            Maintain a render tree order ListHashSet of RenderQuotes.

        (WebCore::RenderView::updateSpecialRenderers):

            Add a function for making additional render tree mutations at the end of a render tree update.
            Currently this just invokes RenderQuote::updateRenderers.

        * rendering/RenderView.h:
        * style/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::commit):

            Call RenderView::updateSpecialRenderers after committing all other changes.

2017-08-09  Zan Dobersek  <zdobersek@igalia.com>

        [Soup] Incorrect conversion in msToSoupDate()
        https://bugs.webkit.org/show_bug.cgi?id=175320

        Reviewed by Carlos Garcia Campos.

        Original patch by VaL Doroshchuk.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::msToSoupDate): monthFromDayInYear() returns a value in the [0,11] range,
        while soup_date_new() expects a month value in the [1,12] range. The return value
        must be thus incremented by one to match that expectation.

2017-08-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, rolling out r220393.

        This patch regresses the performance of WebPage::editorState.

        Reverted changeset:

        "[iOS WK2] WKWebView schedules nonstop layout after pressing
        cmb+b,i,u inside a contenteditable div"
        https://bugs.webkit.org/show_bug.cgi?id=175116
        http://trac.webkit.org/changeset/220393

2017-08-08  Chris Dumez  <cdumez@apple.com>

        [Beacon] Add support for CORS-preflighting for WK2 / NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=175264
        <rdar://problem/33547793>

        Reviewed by Youenn Fablet.

        Pass additional information when creating a PingHandle so that the PingLoad
        can deal with CORS-preflighting on Network process side.

        Tests: http/wpt/beacon/cors/cors-preflight-arraybufferview-failure.html
               http/wpt/beacon/cors/cors-preflight-arraybufferview-success.html
               http/wpt/beacon/cors/cors-preflight-blob-failure.html
               http/wpt/beacon/cors/cors-preflight-blob-success.html
               http/wpt/beacon/cors/cors-preflight-cookie.html

        * WebCore.xcodeproj/project.pbxproj:
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::validatePreflightResponse):
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse):
        * loader/CrossOriginPreflightResultCache.h:
        * loader/LoaderStrategy.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        * loader/PingLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * page/SecurityOrigin.h:

2017-08-08  Sam Weinig  <sam@webkit.org>

        Address review feedback from https://bugs.webkit.org/show_bug.cgi?id=175246.

        * bindings/js/DOMPromiseProxy.h:
        * css/FontFaceSet.cpp:
        * css/FontFaceSet.h:

2017-08-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: support editing WebGL shaders
        https://bugs.webkit.org/show_bug.cgi?id=124211
        <rdar://problem/15448958>

        Reviewed by Matt Baker.

        Test: inspector/canvas/updateShader.html

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::updateShader):

        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::linkProgram):
        (WebCore::WebGLRenderingContextBase::linkProgramWithoutInvalidatingAttribLocations):
        Normally, when a program is linked, it invalidates any WebGLUniformLocation associated with
        the program by incrementing its `linkCount`. In order to allow live editing of shaders, we
        need to be able to compile and link a shader without invalidating these locations. This
        patch moves the shader linking logic to its own function that is called by `linkProgram` so
        that InspectorCanvasAgent can compile and link without invalidation.

2017-08-08  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for Promise<> attributes
        https://bugs.webkit.org/show_bug.cgi?id=175246

        Reviewed by Yusuke Suzuki.

        Introduces and adopts DOMPromiseProxy, a new class for binding promises in a more
        straightforward and safe (from a wrapper world perspective) way.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSFontFaceCustom.cpp: Removed.
        * bindings/js/JSFontFaceSetCustom.cpp: Removed.
        * bindings/js/JSMediaKeySessionCustom.cpp: Removed.
        * bindings/js/JSServiceWorkerContainerCustom.cpp: Removed.
        * bindings/js/JSWebGPUCommandBufferCustom.cpp: Removed.

            Remove custom bindings only needed for promise attributes. Add DOMPromiseProxy.h

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::sessionClosed):
        (WebCore::MediaKeySession::registerClosedPromise): Deleted.
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySession.idl:

            Replace custom promise code using the registerPromise idiom with DOMPromiseProxy.

        * bindings/IDLTypes.h:

            Add StorageType type alias to allow specifying a specific form for storage. This allows
            use to use Ref<> for interfaces in DOMPromiseProxy.

        (WebCore::IDLWrapper::convertToParameterType):
            
            Also add convertToParameterType, an annoying hack to workaround the fact WTF::Function
            can't return references / no

        * bindings/js/DOMPromiseProxy.h: Added.
        (WebCore::DOMPromiseProxy<IDLType>):
        
            DOMPromiseProxy is a new class (set of classes) to represent promises that works with the 
            standard toJS<> / JSDOMConvert infrastructure used by the bindings generator. From the
            implementation perspective, it is similar to DOMPromiseDeferred, but instead of receiving
            one as a parameter, you can initialize it directly in your constructor and start using it.

            From the bindings perspective, a DOMPromiseProxy can be converted into a JS Promise by calling
            its promise function, which will either create a new promise, or return a cached one.

            To make this work, DOMPromiseProxy maintains a Vector of DeferredPromises that hold onto those
            actualized promises. The reason it has a Vector, is that we need one DeferredPromises per
            DOMWrapperWorld, just like we need one wrapper for an interface per DOMWrapperWorld in the 
            wrapper cache. In most cases, only the normal world will be in play, so the Vector has an inline
            capacity of one.
            
            In addition, DOMPromiseProxy maintains a Variant of either an Exception or the result value type.
            This allows the DOMPromiseProxy to be resolved or rejected at anytime. Then, when the bindings
            request the promise, the stored result / exception can be resolved / rejected into the promise.

        (WebCore::DOMPromiseProxy<IDLVoid>):

            For void promises, we need slightly different semantics (resolve takes no parameters, Value is
            a bit indicating resolved state), so it is specialized.

        (WebCore::DOMPromiseProxyWithResolveCallback<IDLType>):

            In addition to the void specialization, we have DOMPromiseProxyWithResolveCallback. Instead of
            storing the value of the resolution directly, this specialization allows the owner to specify
            callback to be called when the resolved value is needed. This is needed to avoid reference
            cycles when the resolved value is the owner such as is the case with FontFace and FontFaceSet.

        * bindings/js/JSDOMConvertPromise.h:
        (WebCore::JSConverter<IDLPromise<T>>::convert):
        Add converter that calls through to the DOMPromiseProxy function promise.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        (WebCore::DeferredPromise::reject):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DeferredPromise::create):
        (WebCore::DeferredPromise::DeferredPromise):

            Add a new create function for DeferredPromise that creates the JSPromiseDeferred for you.
            Also adds a mode to DeferredPromise to allow keeping the promise after resolution. Maintain
            the old behavior as the default.

            Change reject to take an Exception as sink rather than an r-value, to allow DOMPromiseProxy
            to copy a Exception into multiple DeferredPromises. For callers already moving into reject,
            this should be no change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GenerateParametersCheck):
        (GenerateImplementationFunctionCall):
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):

            Add support DOMPromiseProxy. For now, this means a new extended attribute, [PromiseProxy],
            but once I convert all the existing promises over to using DOMPromiseProxy, it will be removed.
            
            Also specify the right #includes for promises and necessary parameters for conversion.

        * bindings/scripts/IDLAttributes.json:
        
            Add [PromiseProxy], a temporary extended attribute for using DOMPromiseProxy.

        * css/FontFace.cpp:
        * css/FontFace.h:
        * css/FontFace.idl:
        * css/FontFaceSet.cpp:
        * css/FontFaceSet.h:
        * css/FontFaceSet.idl:

            Replace custom promise code using the registerPromise idiom with DOMPromiseProxyWithResolveCallback.
            The callback is necessary for these two classes since the value the resolve is themselves, and using
            a normal resolve would create a cycle.

        * html/canvas/WebGPUCommandBuffer.cpp:
        * html/canvas/WebGPUCommandBuffer.h:
        * html/canvas/WebGPUCommandBuffer.idl:
        * platform/graphics/cocoa/GPUCommandBufferMetal.mm:
        * platform/graphics/gpu/GPUCommandBuffer.cpp:
        * platform/graphics/gpu/GPUCommandBuffer.h:

            Replace custom promise code using the registerPromise idiom with DOMPromiseProxy.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::NavigatorBase):
        * page/NavigatorBase.h:

            Forward declare ServiceWorkerContainer and add an explicit constructor to allow
            removing #include of ServiceWorkerContainer.h in the header, avoiding an #include cycle.

        * workers/ServiceWorkerContainer.cpp:
        * workers/ServiceWorkerContainer.h:
        * workers/ServiceWorkerContainer.idl:

            Replace custom promise code using the registerPromise idiom with DOMPromiseProxy.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/TestObj.idl:

            Add / update tests.

2017-08-08  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Merge of dataRecordsRemoved should use std::max()
        https://bugs.webkit.org/show_bug.cgi?id=175348
        <rdar://problem/33785695>

        Reviewed by Chris Dumez.

        No new tests. Online change of a statistic that doesn't affect logic flow.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::merge):
            Now uses std::max() instead of addition.

2017-08-08  Brent Fulgham  <bfulgham@apple.com>

        Sandbox flags do not support document.domain control
        https://bugs.webkit.org/show_bug.cgi?id=175281
        <rdar://problem/33778936>

        Reviewed by Chris Dumez.

        Update the 'setDomain' logic to honor the sandbox properties as defined in the current
        HTML5 specification. This brings us in line with how Chrome and other browsers have
        worked for some time.

        Test: fast/frames/sandboxed-iframe-domain.html

        * dom/Document.cpp:
        (WebCore::Document::setDomain): Add check for sandbox flag (with appropriate error message)
        * dom/SecurityContext.h:

2017-08-08  Jeremy Jones  <jeremyj@apple.com>

        Change fast seek logic to prevent ping-ponging.
        https://bugs.webkit.org/show_bug.cgi?id=175167
        rdar://problem/32936116

        Reviewed by Jer Noble.

        Updated test: media/video-fast-seek.html

        Changed fast seek behavior to always seek early than seek time; and after current time when seeking forward.
        This prevents ping-ponging, where a fast seek overshoots the target looking for a keyframe.
        A subsequent seek will suddenly be on the other side of current time and
        will search in the opposite direction for a key frame; repeat.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::fastSeek):

2017-08-08  Ms2ger  <Ms2ger@igalia.com>

        Unreviewed. Correct the function name in a debug message.
        https://bugs.webkit.org/show_bug.cgi?id=175262

        No new tests: debug logs are not tested.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::applicationDidBecomeActive const):

2017-08-08  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r220376.

        Don't attempt to use isPublicSuffix when building without that
        feature enabled.

        * dom/Document.cpp:
        (WebCore::Document::domainIsRegisterable const):

2017-08-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Properly test if compiler supports compiler flags
        https://bugs.webkit.org/show_bug.cgi?id=174490

        Reviewed by Konstantin Tokarev.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformWPE.cmake:

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [GStreamer] Don't use GraphicsContext3D in VideoTextureCoperGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=174774

        Reviewed by Carlos Garcia Campos.

        VideoTextureCoperGStreamer class creates a new GraphicsContext3D internally
        that's used to render to whichever OpenGL context is current. Such usage
        doesn't add anything to the user since there's no underlying offscreen-based
        OpenGL context created, and instead all GraphicsContext3D calls are directly
        translated to usual OpenGL API calls. We should avoid using GraphicsContext3D
        in such cases and instead use direct OpenGL API calls.

        This patch achieves that for the VideoTextureCoperGStreamer class. A
        GraphicsContext3D object is still created because it's needed to construct an
        instance of the TextureMapperShaderProgram class, but this will be removed as
        soon as TextureMapperShaderProgram drops the GraphicsContext3D dependence.

        No new tests -- no change in behavior.

        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::~VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        (WebCore::VideoTextureCopierGStreamer::resultTexture):

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Drop GC3D* type usage from TextureMapperPlatformLayer{Buffer,Proxy}
        https://bugs.webkit.org/show_bug.cgi?id=175314

        Reviewed by Carlos Garcia Campos.

        Switch to using OpenGL types in the TextureMapperPlatformLayerBuffer and
        TextureMapperPlatformLayerProxy classes, instead of the equivalent GC3D*
        types provided in the GraphicsTypes3D.h header.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::TextureMapperPlatformLayerBuffer):
        (WebCore::TextureMapperPlatformLayerBuffer::canReuseWithoutReset):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::getAvailableBuffer):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Don't use GraphicsContext3D in ClipStack
        https://bugs.webkit.org/show_bug.cgi?id=174776

        Reviewed by Carlos Garcia Campos.

        Any GraphicsContext3D object that's passed to ClipStack methods is of the
        render-to-current-context nature, meaning there's no internally owned GL
        context that has to be properly handled and all calls are simply passed to
        OpenGL APIs. We should drop such (non-)usage of GraphicsContext3D in favor
        of direct OpenGL API invocations.

        This patch covers TextureMapper's ClipStack. Call sites to the apply() and
        applyIfNeeded() are modified to not pass a reference to any
        GraphicsContext3D object. Internally, OpenGL API entrypoints and constants
        are used instead of GraphicsContext3D invocations.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::clearIfNeeded):
        (WebCore::BitmapTextureGL::bindAsSurface):
        * platform/graphics/texmap/ClipStack.cpp:
        (WebCore::ClipStack::apply):
        (WebCore::ClipStack::applyIfNeeded):
        * platform/graphics/texmap/ClipStack.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::bindDefaultSurface):
        (WebCore::TextureMapperGL::beginScissorClip):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):

2017-08-08  Javier Fernandez  <jfernandez@igalia.com>

        Not possible to remove the 'li' element inside the table cell
        https://bugs.webkit.org/show_bug.cgi?id=173148

        Reviewed by Ryosuke Niwa.

        We need to add a new case for breaking out empty list items when they are
        at the start of an editable area. Since list items can be also inside
        table cells, we need to consider this kind of elements as well.

        Tests: editing/deleting/delete-list-items-in-table-cell-1.html
               editing/deleting/delete-list-items-in-table-cell-2.html
               editing/deleting/delete-list-items-in-table-cell-3.html
               editing/deleting/delete-list-items-in-table-cell-4.html
               editing/deleting/delete-list-items-in-table-cell-5.html
               editing/deleting/delete-list-items-in-table-cell-6.html
               editing/deleting/delete-list-items-in-table-cell-7.html
               editing/deleting/delete-list-items-in-table-cell-8.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Isolate the TextureMapperPlatformLayerProxyProvider class
        https://bugs.webkit.org/show_bug.cgi?id=175316

        Reviewed by Carlos Garcia Campos.

        Move the TextureMapperPlatformLayerProxyProvider class (which is the type
        aliased to PlatformLayer for threaded CoordGraphics) into its own header
        file. This prevents including the TextureMapperPlatformLayerProxy.h header
        file in MediaPlayerPrivateGStreamerBase.h, avoiding spilling OpenGL types
        and function declarations before the GStreamer GL headers include them
        later in the MediaPlayerPrivateGStreamerBase implementation file.

        In the MediaPlayerPrivateGStreamerBase.h header file, only the new header
        is included, and a forward declaration of the TextureMapperPlatformLayerProxy
        class is used. proxy() and swapBuffersIfNeeded() methods are moved into
        the implementation file to avoid requiring the full definition of the
        TextureMapperPlatformLayerProxy class.

        Similar is done for the TextureMapperGC3DPlatformLayer class and the
        Cairo-specific implementation of the ImageBufferData class. The
        CoordinatedGraphicsLayer implementation file also gains an include of the
        TextureMapperPlatformLayerProxyProvider.h header since it requires the full
        definition of that class.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::proxy const):
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::proxy const):
        (WebCore::MediaPlayerPrivateGStreamerBase::swapBuffersIfNeeded):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxyProvider.h: Added.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Follow-up to r220392 that fixes build on configurations
        that disable USE(GSTREAMER_GL).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        When creating the BitmapTextureGL object, also provide an initialized
        TextureMapperContextAttributes object.

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Group GL header file inclusions in a single header file
        https://bugs.webkit.org/show_bug.cgi?id=175313

        Reviewed by Carlos Garcia Campos.

        Add a helper header file to the TextureMapper subsystem that includes
        the OpenGL headers, properly addressing the build configuration to
        include headers as provided by either libepoxy, the OpenGL ES library,
        or the OpenGL library.

        TextureMapperContextAttributes implementation file is the only one
        that can leverage the header at the moment, but more will follow.

        * platform/graphics/texmap/TextureMapperContextAttributes.cpp:
        * platform/graphics/texmap/TextureMapperGLHeaders.h: Copied from Source/WebCore/platform/graphics/texmap/TextureMapperContextAttributes.cpp.

2017-08-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] WKWebView schedules nonstop layout after pressing cmb+b,i,u inside a contenteditable div
        https://bugs.webkit.org/show_bug.cgi?id=175116
        <rdar://problem/28279301>

        Reviewed by Darin Adler and Ryosuke Niwa.

        WebCore support for WebPage::editorState refactoring. See WebKit ChangeLogs for more detail.

        Tests: EditorStateTests.TypingAttributesBold
               EditorStateTests.TypingAttributesItalic
               EditorStateTests.TypingAttributesUnderline
               EditorStateTests.TypingAttributesTextAlignmentAbsoluteAlignmentOptions
               EditorStateTests.TypingAttributesTextAlignmentStartEnd
               EditorStateTests.TypingAttributesTextAlignmentDirectionalText
               EditorStateTests.TypingAttributesTextColor
               EditorStateTests.TypingAttributesMixedStyles
               EditorStateTests.TypingAttributesLinkColor

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::propertyAsColor const):
        (WebCore::StyleProperties::propertyAsValueID const):

        Introduces some helper functions in StyleProperties to convert CSS property values to Color or a CSSValueID.

        * css/StyleProperties.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::hasStyle):

        Pull out logic in selectionStartHasStyle that asks for a style TriState into EditingStyle::hasStyle. This is
        because WebPage::editorState will now query for multiple styles at the selection start, but
        selectionStartHasStyle currently recomputes styleAtSelectionStart every time it is called. To prevent extra work
        from being done, we can just call selectionStartHasStyle once and use ask for EditingStyle::hasStyle on the
        computed EditingStyle at selection start.

        * editing/EditingStyle.h:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle const):

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Add TextureMapperContextAttributes
        https://bugs.webkit.org/show_bug.cgi?id=175311

        Reviewed by Carlos Garcia Campos.

        Add and use TextureMapperContextAttributes, a slim struct that holds
        information about the type and extensions supported by the OpenGL
        context that's being used for one specific TextureMapperGL instance.

        This struct is initialized in the TextureMapperGL constructor for the
        OpenGL context that's been made current on that thread, and that will
        be used for that TextureMapperGL instance through its lifetime. The
        struct is then also copied into any BitmapTextureGL objects that have
        been created through this TextureMapperGL (or its texture pool).

        The struct is initialized with information about GLES2 support (which
        is at this point done through the USE_OPENGL_ES_2 macro) and about
        specific OpenGL extensions that are supported. These are then used in
        TextureMapperGL (NPOT textures) and BitmapTextureGL (BGRA support,
        sub-image unpacking) to deploy specific optimizations or workarounds.

        This ultimately serves as a replacement for clunky static functions
        that need to operate on GraphicsContext3D objects to retrieve this
        information.

        No new tests -- no change in behavior.

        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle):
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore::driverSupportsSubImage): Deleted.
        * platform/graphics/texmap/BitmapTextureGL.h:
        (WebCore::BitmapTextureGL::create):
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::BitmapTexturePool):
        (WebCore::BitmapTexturePool::createTexture):
        * platform/graphics/texmap/BitmapTexturePool.h:
        * platform/graphics/texmap/TextureMapperContextAttributes.cpp: Added.
        (WebCore::TextureMapperContextAttributes::initialize):
        * platform/graphics/texmap/TextureMapperContextAttributes.h: Added.
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        (WebCore::TextureMapperGL::createTexture):
        (WebCore::driverSupportsNPOTTextures): Deleted.
        * platform/graphics/texmap/TextureMapperGL.h:

2017-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Don't expose GraphicsContext3D object
        https://bugs.webkit.org/show_bug.cgi?id=175310

        Reviewed by Carlos Garcia Campos.

        Remove the GraphicsContext3D getter from the TextureMapperGL class. Instead,
        the clearColor() method is added that's to be used by the CoordinatedGraphicsScene
        class which was accessing the GraphicsContext3D object for this purpose.

        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::clearColor):
        * platform/graphics/texmap/TextureMapperGL.h:
        (WebCore::TextureMapperGL::graphicsContext3D const): Deleted.

2017-08-07  Simon Fraser  <simon.fraser@apple.com>

        RenderStyle:diff() was inadvertently doing deep compares of StyleRareNonInheritedData etc
        https://bugs.webkit.org/show_bug.cgi?id=175304

        Reviewed by Tim Horton.

        r210758 changed DataRef::get() from returning a pointer to a reference. This caused all the places
        in RenderStyle::diff() and related functions, where we intended to do a quick pointer comparison,
        to doing deep compares via operator!=. This made the code slightly slower.

        Fix by exposing ptr() on DataRef and using it wherever we wish to do pointer comparison.

        * rendering/style/DataRef.h:
        (WebCore::DataRef::ptr const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::inheritedDataShared const):
        (WebCore::RenderStyle::changeAffectsVisualOverflow const):
        (WebCore::RenderStyle::changeRequiresLayout const):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer const):
        (WebCore::RenderStyle::listStyleImage const): Expand the function onto multiple lines.

2017-08-07  Simon Fraser  <simon.fraser@apple.com>

        Add a fast path for rotate() and rotateZ() transform parsing
        https://bugs.webkit.org/show_bug.cgi?id=175308

        Reviewed by Zalan Bujtas.

        Fast paths only existed for translate-related functions, matrix3d() and scale3d(). Add
        rotate() and rotateX(), which gives a small boost to one of the MotionMark tests.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseSimpleAngle):
        (WebCore::parseTransformAngleArgument):
        (WebCore::parseSimpleTransformValue):
        (WebCore::transformCanLikelyUseFastPath):

2017-08-07  Simon Fraser  <simon.fraser@apple.com>

        Re-order the tests in RenderLayerCompositor::requiresCompositingLayer() for performance
        https://bugs.webkit.org/show_bug.cgi?id=175306

        Reviewed by Tim Horton.

        Re-order the tests for compositing reasons so that reasons more likely to happen are higher in the list.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer const):
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore const):

2017-08-07  Simon Fraser  <simon.fraser@apple.com>

        Avoid a hash lookup in FilterInfo::remove()
        https://bugs.webkit.org/show_bug.cgi?id=175301

        Reviewed by Sam Weinig.

        FilterInfo::remove() always called map().remove(&layer)), even when layer.m_hasFilterInfo
        was false (and even asserted that layer.m_hasFilterInfo == map().contains(&layer)).

        So we can early return if layer.m_hasFilterInfo is false.

        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::getIfExists):
        (WebCore::RenderLayer::FilterInfo::remove):

2017-08-07  Simon Fraser  <simon.fraser@apple.com>

        Make TransformOperation::type() non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=175297

        Reviewed by Sam Weinig.

        Store the OperationType in the base class so that type() and isSameType() can
        be non-virtual.

        Small perf win on some benchmarks.

        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        (WebCore::SkewTransformOperation::blend):
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        (WebCore::TransformOperation::TransformOperation):
        (WebCore::TransformOperation::type const):
        (WebCore::TransformOperation::isSameType const):
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        (WebCore::TranslateTransformOperation::blend):
        * platform/graphics/transforms/TranslateTransformOperation.h:

2017-08-07  Simon Fraser  <simon.fraser@apple.com>

        Inline ~Color and Color::isExtended()
        https://bugs.webkit.org/show_bug.cgi?id=175293

        Reviewed by Zalan Bujtas.

        The Color destructor and Color::isExtended() show up on profiles, so inline them.
        Before r207265 the destructor was inlined.
        
        Also make sure that LengthSize::operator== is inlined, which it was not (according
        to profiles).

        * platform/LengthSize.h:
        (WebCore::operator==):
        * platform/graphics/Color.cpp:
        (WebCore::Color::~Color): Deleted.
        (WebCore::Color::isExtended const): Deleted.
        * platform/graphics/Color.h:
        (WebCore::Color::~Color):
        (WebCore::Color::isExtended const):

2017-08-04  Brent Fulgham  <bfulgham@apple.com>

        Implement the HTML5 same-origin restriction specification
        https://bugs.webkit.org/show_bug.cgi?id=175226
        <rdar://problem/11079948>

        Reviewed by Chris Dumez.

        Follow the algorithms defined in the HTML5 specification for relaxing
        the same-origin restriction. We were missing a few steps related to
        checking for public suffix and presence of a browsing context.

        Tested by new TestWebKitAPI tests.

        * dom/Document.cpp:
        (WebCore::Document::domainIsRegisterable): Added helper function.
        (WebCore::Document::setDomain):

2017-08-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Preview Canvas path when viewing a recording
        https://bugs.webkit.org/show_bug.cgi?id=174967

        Reviewed by Brian Burg.

        Tests: fast/canvas/2d.currentPoint.html
               fast/canvas/2d.getPath.modification.html
               fast/canvas/2d.getPath.newobject.html
               fast/canvas/2d.setPath.html

        * html/canvas/CanvasPath.idl:
        * html/canvas/CanvasPath.h:
        * html/canvas/CanvasPath.cpp:
        (WebCore::CanvasPath::currentX const):
        (WebCore::CanvasPath::currentY const):

        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setPath):
        (WebCore::CanvasRenderingContext2D::getPath const):

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setInspectorAdditionsEnabled):
        (WebCore::RuntimeEnabledFeatures::inspectorAdditionsEnabled const):
        Add runtime flag for added IDL items above so that they are only usable within the inspector
        process. The runtime flag is not enabled from anywhere else as of now.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildInitialState):
        Send current path as part of the InitialState.
        Drive-by: deduplicate more string values.

2017-08-07  Chris Dumez  <cdumez@apple.com>

        Update sendBeacon() to rely on FetchBody instead of the whole FetchRequest
        https://bugs.webkit.org/show_bug.cgi?id=175280

        Reviewed by Youenn Fablet.

        Update sendBeacon() to rely on FetchBody instead of the whole FetchRequest. FetchBody
        for data extraction is really the only thing we need at the moment.
        The new code also properly sets the CORS mode, which will be needed for Bug 175264.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):

2017-08-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wimplicit-fallthrough warning in ComputedStyleExtractor::propertyValue
        https://bugs.webkit.org/show_bug.cgi?id=174469
        <rdar://problem/33311638>

        Reviewed by Simon Fraser.

        Add a RELEASE_ASSERT_NOT_REACHED to silence this warning.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):

2017-08-06  Filip Pizlo  <fpizlo@apple.com>

        Primitive auxiliaries and JSValue auxiliaries should have separate gigacages
        https://bugs.webkit.org/show_bug.cgi?id=174919

        Reviewed by Keith Miller.

        No new tests because no change in behavior.
        
        Adapting to API changes - we now specify the AlignedMemoryAllocator differently and we need to be
        specific about which Gigacage we're using.

        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * platform/graphics/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::GPUBuffer):

2017-08-07  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Add abstraction layer of cookie jar implementation for Curl port
        https://bugs.webkit.org/show_bug.cgi?id=174943

        Reviewed by Brent Fulgham.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::CookieJarCurlFileSystem::setCookiesFromDOM):
        (WebCore::CookieJarCurlFileSystem::cookiesForDOM):
        (WebCore::CookieJarCurlFileSystem::cookieRequestHeaderFieldValue):
        (WebCore::CookieJarCurlFileSystem::cookiesEnabled):
        (WebCore::CookieJarCurlFileSystem::getRawCookies):
        (WebCore::CookieJarCurlFileSystem::deleteCookie):
        (WebCore::CookieJarCurlFileSystem::getHostnamesWithCookies):
        (WebCore::CookieJarCurlFileSystem::deleteCookiesForHostnames):
        (WebCore::CookieJarCurlFileSystem::deleteAllCookies):
        (WebCore::CookieJarCurlFileSystem::deleteAllCookiesModifiedSince):
        (WebCore::cookiesForDOM):
        (WebCore::setCookiesFromDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostnames):
        (WebCore::deleteAllCookies):
        (WebCore::deleteAllCookiesModifiedSince):
        * platform/network/curl/CookieJarCurl.h: Added.
        * platform/network/curl/CurlContext.cpp:
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::cookieJar):

2017-08-07  Brady Eidson  <beidson@apple.com>

        Implement most of ServiceWorkerContainer::addRegistration.
        https://bugs.webkit.org/show_bug.cgi?id=175237

        Reviewed by Andy Estes.

        No new tests (Covered by changes to existing tests).

        There's still so much supporting infrastructure to add with these early patches
        that I'm still moving them in baby steps for now, hence not implementing
        register() all in one shot.
        
        Things will start moving very quickly once we no longer need to add lots of new
        primitives in each change.
        
        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::navigator const):
        
        * page/Navigator.cpp:
        (WebCore::Navigator::Navigator): Make the constructor take a ScriptExecutionContext for 
          creation of objects where its import (e.g. ServiceWorkerContainer).
        * page/Navigator.h:

        * page/WorkerNavigator.cpp:
        (WebCore::WorkerNavigator::WorkerNavigator): Ditto.
        * page/WorkerNavigator.h:

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::NavigatorBase): Create the ServiceWorkerContainer upfront with
          the passed-in ScriptExecutionContext.
        (WebCore::NavigatorBase::serviceWorker):
        * page/NavigatorBase.h:
        
        Make ServiceWorkerContainer into an ActiveDOMObject. This will eventually be necessary for
        Document suspension reasons, but is also necessary because it also needs to be a
        ContextDestructionObserver (which ActiveDOMObject is):
        * workers/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::activeDOMObjectName const):
        (WebCore::ServiceWorkerContainer::canSuspendForDocumentSuspension const):
        (WebCore::rejectLater): Deleted.
        (WebCore::ServiceWorkerContainer::eventTargetInterface const): Deleted.
        (WebCore::ServiceWorkerContainer::scriptExecutionContext const): Deleted.
        * workers/ServiceWorkerContainer.h:
        * workers/ServiceWorkerContainer.idl:

        Add updateViaCache, etc:
        * workers/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::updateViaCache const):
        (WebCore::ServiceWorkerRegistration::update):
        (WebCore::ServiceWorkerRegistration::unregister):
        * workers/ServiceWorkerRegistration.h:
        * workers/ServiceWorkerRegistration.idl:

        * workers/ServiceWorkerUpdateViaCache.h: Copied from Source/WebCore/workers/ServiceWorkerRegistration.idl.
        * workers/ServiceWorkerUpdateViaCache.idl: Copied from Source/WebCore/workers/ServiceWorkerRegistration.idl.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::navigator):
        (WebCore::WorkerGlobalScope::navigator const): Deleted.
        * workers/WorkerGlobalScope.h:

        * workers/WorkerType.h: Copied from Source/WebCore/workers/ServiceWorkerRegistration.idl.
        * workers/WorkerType.idl: Copied from Source/WebCore/workers/ServiceWorkerRegistration.idl.

2017-08-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220299.

        This change caused LayoutTest inspector/dom-debugger/dom-
        breakpoints.html to fail.

        Reverted changeset:

        "Web Inspector: capture async stack trace when workers/main
        context posts a message"
        https://bugs.webkit.org/show_bug.cgi?id=167084
        http://trac.webkit.org/changeset/220299

2017-08-07  Brian Burg  <bburg@apple.com>

        Cleanup: simplify WebSockets code for RuntimeEnabledFeatures
        https://bugs.webkit.org/show_bug.cgi?id=175190

        Reviewed by Sam Weinig.

        This runtime enabled flag is not used by anything. It was added
        for V8 in <https://bugs.webkit.org/show_bug.cgi?id=29896>.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::setIsAvailable): Deleted.
        (WebCore::WebSocket::isAvailable): Deleted.
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocket.idl:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::webSocketEnabled const): Deleted.
        * page/RuntimeEnabledFeatures.h:

2017-08-07  Brian Burg  <bburg@apple.com>

        Remove CANVAS_PATH compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175207

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:
        * html/canvas/DOMPath.h:
        * html/canvas/DOMPath.idl:

2017-08-07  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][CMake] Only pass pkg-config CFLAGS from (E)GL when not using libepoxy.
        https://bugs.webkit.org/show_bug.cgi?id=175125

        Reviewed by Michael Catanzaro.

        No change of behavior, covered by existing tests.

        * CMakeLists.txt: Instead of negating 3 times the use of libepoxy
        move the logic for (E)GL detection inside an else() block.

2017-08-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (r219121): Airmail 3 prints header part only.
        https://bugs.webkit.org/show_bug.cgi?id=175258
        <rdar://problem/33601173>

        Reviewed by Andreas Kling.

        When a WK1 WebViw is printed via AppKit view hierarchy it won't explictly set the page width
        but uses the existing width. r219121 assumes that all printing code paths set the page width.

        No test, there appears to be no good way to test AppKit printing behaviors without adding complicated
        new testing infrastructure.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):

            If we are in printing layout and don't have page width set yet then use the current view width.
            This matches the behavior prior r219121.

2017-08-05  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Response should keep all ResourceResponse information
        https://bugs.webkit.org/show_bug.cgi?id=175099

        Reviewed by Sam Weinig.

        No change of behavior, covered by existing tests.

        Disabling filtering of resource response at DocumentThreadableLoader for fetch API and doing the filtering at FetchResponse level.
        This requires passing the tainting parameter to FetchResponse. For that purpose, we store the tainting on the ResourceResponse itself.
        This allows mimicking the concept of internal response from the fetch spec.
        This might be useful for future developments related to caching the responses.

        The body is now also stored in FetchResponse so a flag is added to ensure we only expose the body if allowed.

        Changing storage of opaque redirect information to keep the redirection information in the response.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::blob):
        (WebCore::FetchBodyOwner::consumeNullBody):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didReceiveResponse):
        (WebCore::FetchResponse::consume):
        (WebCore::FetchResponse::consumeBodyAsStream):
        (WebCore::FetchResponse::createReadableStreamSource):
        * Modules/fetch/FetchResponse.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::responseReceived):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setBodyDataFrom):
        (WebCore::CachedResource::setResponse):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::crossThreadData const):
        (WebCore::ResourceResponseBase::fromCrossThreadData):
        (WebCore::ResourceResponseBase::filter):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::setTainting):
        (WebCore::ResourceResponseBase::tainting const):
        (WebCore::ResourceResponseBase::encode const):
        (WebCore::ResourceResponseBase::decode):

2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebDriver: use in-view center point for clicks instead of bounding box center point
        https://bugs.webkit.org/show_bug.cgi?id=174863

        Reviewed by Simon Fraser.

        Make DOMRect, and FloatPoint::narrowPrecision() available to WebKit layer. Also add
        FrameView::clientToDocumentPoint().

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.h:
        * page/FrameView.h:
        * platform/graphics/FloatPoint.h:

2017-08-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        getClientRects doesn't work with list box option elements
        https://bugs.webkit.org/show_bug.cgi?id=175016

        Reviewed by Darin Adler.

        Since HTMLOptionElement and HTMLOptGroupElement don't have a renderer, we are always returning an empty list
        from getClientRects. This is working fine in both chromium and firefox, option elements return its own bounding
        box and group elements return the bounding box of the group label and all its children items.

        Test: fast/dom/HTMLSelectElement/listbox-items-client-rects.html

        * dom/Element.cpp:
        (WebCore::listBoxElementBoundingBox): Helper function to return the bounding box of a HTMLOptionElement or
        HTMLOptGroupElement element.
        (WebCore::Element::getClientRects): Use listBoxElementBoundingBox() in case of HTMLOptionElement or
        HTMLOptGroupElement.
        (WebCore::Element::boundingClientRect): Ditto.

2017-08-04  Youenn Fablet  <youenn@apple.com>

        [Cache API] Add Cache and CacheStorage IDL definitions
        https://bugs.webkit.org/show_bug.cgi?id=175201

        Reviewed by Brady Eidson.

        Covered by activated tests.
        Adding IDLs as per https://www.w3.org/TR/service-workers-1/#idl-index.
        Implementation is guarded by a runtime flag which is off by default.
        It is off for DRT but on for WTR.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/cache/Cache.cpp: Added.
        (WebCore::Cache::match):
        (WebCore::Cache::matchAll):
        (WebCore::Cache::add):
        (WebCore::Cache::addAll):
        (WebCore::Cache::put):
        (WebCore::Cache::remove):
        (WebCore::Cache::keys):
        * Modules/cache/Cache.h: Added.
        (WebCore::Cache::create):
        (WebCore::Cache::Cache):
        * Modules/cache/Cache.idl: Added.
        * Modules/cache/CacheQueryOptions.h: Added.
        * Modules/cache/CacheQueryOptions.idl: Added.
        * Modules/cache/CacheStorage.cpp: Added.
        (WebCore::CacheStorage::match):
        (WebCore::CacheStorage::has):
        (WebCore::CacheStorage::open):
        (WebCore::CacheStorage::remove):
        (WebCore::CacheStorage::keys):
        * Modules/cache/CacheStorage.h: Added.
        (WebCore::CacheStorage::create):
        * Modules/cache/CacheStorage.idl: Added.
        * Modules/cache/DOMWindowCaches.cpp: Added.
        (WebCore::DOMWindowCaches::DOMWindowCaches):
        (WebCore::DOMWindowCaches::supplementName):
        (WebCore::DOMWindowCaches::from):
        (WebCore::DOMWindowCaches::caches):
        (WebCore::DOMWindowCaches::caches const):
        * Modules/cache/DOMWindowCaches.h: Added.
        * Modules/cache/DOMWindowCaches.idl: Added.
        * Modules/cache/WorkerGlobalScopeCaches.cpp: Added.
        (WebCore::WorkerGlobalScopeCaches::supplementName):
        (WebCore::WorkerGlobalScopeCaches::from):
        (WebCore::WorkerGlobalScopeCaches::caches):
        (WebCore::WorkerGlobalScopeCaches::caches const):
        * Modules/cache/WorkerGlobalScopeCaches.h: Added.
        * Modules/cache/WorkerGlobalScopeCaches.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCacheAPIEnabled):
        (WebCore::RuntimeEnabledFeatures::cacheAPIEnabled const):

2017-08-04  Brady Eidson  <beidson@apple.com>

        Have navigator.serviceWorker() actually return a ServiceWorkerContainer object.
        https://bugs.webkit.org/show_bug.cgi?id=175215

        Reviewed by Youenn Fablet.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::serviceWorker): Actually create and remember an object.
        * page/NavigatorBase.h:

        * workers/ServiceWorkerContainer.cpp:
        (WebCore::rejectLater): Asynchronously reject the given promise with an error message.
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::refEventTarget): Ref the underlying Navigator.
        (WebCore::ServiceWorkerContainer::derefEventTarget): Deref the underlying Navigator.
        (WebCore::ServiceWorkerContainer::ready): rejectLater the promise.
        (WebCore::ServiceWorkerContainer::addRegistration): Ditto.
        (WebCore::ServiceWorkerContainer::getRegistration): Ditto.
        (WebCore::ServiceWorkerContainer::getRegistrations): Ditto.
        * workers/ServiceWorkerContainer.h:

2017-08-04  Chris Dumez  <cdumez@apple.com>

        [Beacon] Update sendBeacon to use the CachedResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=175192
        <rdar://problem/33725923>

        Reviewed by Youenn Fablet.

        Update sendBeacon to use the FetchRequest / CachedResourceLoader instead of
        the PingLoader. This gets us closer to the specification which is based on
        Fetch and reduces code duplication. This also fixes an issue where our
        Origin header was not properly set on Beacon resquests.

        In a follow-up, we will implement in CachedResourceLoader Fetch's quota for
        inflight keepalive requests which is needed to fully support sendBeacon().

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/beacon/NavigatorBeacon.h:
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):
        * loader/PingLoader.cpp:
        * loader/PingLoader.h:
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType):
        (WebCore::CachedResource::load):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestBeaconResource):
        (WebCore::contentTypeFromResourceType):
        (WebCore::CachedResourceLoader::checkInsecureContent const):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        (WebCore::isResourceSuitableForDirectReuse):
        * loader/cache/CachedResourceLoader.h:

2017-08-04  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Report user interaction immediately, but only when needed
        https://bugs.webkit.org/show_bug.cgi?id=175090
        <rdar://problem/33685546>

        Reviewed by Chris Dumez.

        Test: http/tests/loading/resourceLoadStatistics/user-interaction-only-reported-once-within-short-period-of-time.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::ResourceLoadObserver):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Now tells the UI process immediately but also records that it has
            done so to avoid doing it when not needed.
        (WebCore::ResourceLoadObserver::scheduleNotificationIfNeeded):
            Conditional throttling gone, now always throttles.
        (WebCore::ResourceLoadObserver::notifyObserver):
            Renamed from ResourceLoadObserver::notificationTimerFired().
        (WebCore::ResourceLoadObserver::clearState):
            New function to allow the test runner to reset the web process'
            statistics state now that we keep track of whether or not we've
            reported user interaction to the UI process.
        (WebCore::ResourceLoadObserver::setShouldThrottleObserverNotifications): Deleted.
        (WebCore::ResourceLoadObserver::notificationTimerFired): Deleted.
        * loader/ResourceLoadObserver.h:
        (): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setResourceLoadStatisticsShouldThrottleObserverNotifications): Deleted.
            No longer needed since user interaction is always communicated
            immediately.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-08-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: capture async stack trace when workers/main context posts a message
        https://bugs.webkit.org/show_bug.cgi?id=167084
        <rdar://problem/30033673>

        Reviewed by Brian Burg.

        Add instrumentation to DOMWindow to support showing asynchronous
        stack traces when the debugger pauses in a MessageEvent handler.

        Test: inspector/debugger/async-stack-trace.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didPostMessageImpl):
        (WebCore::InspectorInstrumentation::didFailPostMessageImpl):
        (WebCore::InspectorInstrumentation::willDispatchPostMessageImpl):
        (WebCore::InspectorInstrumentation::didDispatchPostMessageImpl):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didPostMessage):
        (WebCore::InspectorInstrumentation::didFailPostMessage):
        (WebCore::InspectorInstrumentation::willDispatchPostMessage):
        (WebCore::InspectorInstrumentation::didDispatchPostMessage):

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearAsyncStackTraceData):
        (WebCore::PageDebuggerAgent::didPostMessage):
        (WebCore::PageDebuggerAgent::didFailPostMessage):
        (WebCore::PageDebuggerAgent::willDispatchPostMessage):
        (WebCore::PageDebuggerAgent::didDispatchPostMessage):
        * inspector/PageDebuggerAgent.h:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::postMessageTimerFired):

2017-08-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: add source view for WebGL shader programs
        https://bugs.webkit.org/show_bug.cgi?id=138593
        <rdar://problem/18936194>

        Reviewed by Matt Baker.

        Test: inspector/canvas/requestShaderSource.html

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestShaderSource):

        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::shaderForType):

2017-08-04  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220288.

        This broke multiple builds.

        Reverted changeset:

        "Use MPAVRoutingController instead of deprecated versions."
        https://bugs.webkit.org/show_bug.cgi?id=175063
        http://trac.webkit.org/changeset/220288

2017-08-03  Filip Pizlo  <fpizlo@apple.com>

        The allocator used to allocate memory for MarkedBlocks and LargeAllocations should not be the Subspace itself
        https://bugs.webkit.org/show_bug.cgi?id=175141

        Reviewed by Mark Lam.

        No new tests because no new behavior.
        
        Just adapting to an API change.

        * ForwardingHeaders/heap/FastMallocAlignedMemoryAllocator.h: Added.
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):

2017-08-04  Chris Dumez  <cdumez@apple.com>

        Match newly-clarified spec on textarea defaultValue/value/child text content
        https://bugs.webkit.org/show_bug.cgi?id=173878

        Reviewed by Darin Adler.

        Update HTMLTextArea.defaultValue to match align with other browsers and match the
        latest HTML specification:
        - https://html.spec.whatwg.org/#dom-textarea-defaultvalue

        The defaultValue getter should return the child text content:
        - https://dom.spec.whatwg.org/#concept-child-text-content
        Our code was traversing all Text descendants, not just the children.

        The defaultValue setter should act as the setter of the Element's textContent
        IDL attribute. Previously, we had a custom logic that was only removing the
        text children.

        Test: imported/w3c/web-platform-tests/html/semantics/forms/the-textarea-element/value-defaultValue-textContent.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptContent const):
        * dom/TextNodeTraversal.cpp:
        (WebCore::TextNodeTraversal::childTextContent):
        * dom/TextNodeTraversal.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultValue const):
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::text const):

2017-08-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available
        https://bugs.webkit.org/show_bug.cgi?id=174874
        <rdar://problem/33530130>

        Reviewed by Simon Fraser.

        If an <img> element has a non-CachedImage content data, e.g. -webkit-named-image,
        RenderImageResourceStyleImage will be created and  attached to the RenderImage.
        RenderImageResourceStyleImage::m_cachedImage will be set to null at the 
        beginning because the m_styleImage->isCachedImage() is false in this case.
        When ImageLoader finishes loading the url of the src attribute,
        RenderImageResource::setCachedImage() will be called to set m_cachedImage.

        A crash will happen when the RenderImage is destroyed. Destroying the 
        RenderImage calls RenderImageResourceStyleImage::shutdown() which checks
        m_cachedImage and finds it not null, so it calls RenderImageResourceStyleImage::image()
        which ends up calling CSSNamedImageValue::image() which returns a null pointer
        because the size is empty. RenderImageResourceStyleImage::shutdown() calls
        image()->stopAnimation() without checking the return value of image().

        Another crash will happen later when deleting the CachedImage from the memory
        cache if CachedImage::canDestroyDecodedData() is called because the client
        it gets from m_clients is a freed pointer. This happens because RenderImageResourceStyleImage
        has m_styleImage of type StyleGeneratedImage but its m_cachedImage is set
        by RenderImageResource::setCachedImage(). When RenderImageResourceStyleImage::shutdown()
        is called, it calls  StyleGeneratedImage::removeClient() which does not 
        know anything about RenderImageResourceStyleImage::m_cachedImage. So we 
        end up having a freed pointer in the m_clients of the CachedImage.

        Test: fast/images/image-element-image-content-data.html

        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::shutdown):  Revert back the changes
        of r208511 in this function. Add a call to image()->stopAnimation() without
        checking the return of image() since it will return the nullImage() if
        the image not available. There is no need to check m_cachedImage before 
        calling image() because image() does not check or access m_cachedImage.

        If m_styleImage is not a CachedStyleImage but m_cachedImage is not null,
        we need to remove m_renderer from the set of the clients of this m_cachedImage.

        (WebCore::RenderImageResourceStyleImage::image const): The base class method
        RenderImageResource::image() returns the nullImage() if the image not
        available. This is because CachedImage::imageForRenderer() returns
        the nullImage() if the image is not available; see CachedImage.h. We should
        do the same for the derived class for consistency.

2017-08-04  Jeremy Jones  <jeremyj@apple.com>

        Use MPAVRoutingController instead of deprecated versions.
        https://bugs.webkit.org/show_bug.cgi?id=175063

        Reviewed by Tim Horton.

        No new tests because no behavior change. This uses a different platform class to present
        an interface.

        Remove deprecated MPAudioVideoRoutingPopoverController and MPAVRoutingSheet
        Add MPMediaControlsViewController.

        * platform/spi/ios/MediaPlayerSPI.h:

2017-08-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r220233): Check for null pointer passed to WebGLRenderingContextBase::deleteProgram
        https://bugs.webkit.org/show_bug.cgi?id=175196
        <rdar://problem/33727603>

        Reviewed by Devin Rousso.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::deleteProgram):

2017-08-04  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220271.

        Rolling out due to Layout Test failing on iOS Simulator.

        Reverted changeset:

        "Remove STREAMS_API compilation guard"
        https://bugs.webkit.org/show_bug.cgi?id=175165
        http://trac.webkit.org/changeset/220271

2017-08-03  Sam Weinig  <sam@webkit.org>

        [Cleanup] Remove ScriptGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=175173

        Reviewed by Darin Adler.

        ScriptGlobalObject's two functions were only being used in
        four places. Three of those uses (ScriptGlobalObject::set in 
        InspectorFrontendClientLocal, WebInspectorUI, and RemoteWebInspectorUI)
        were merged into the new function addSelfToGlobalObjectInWorld on
        InspectorFrontendHost. The remaining function (ScriptGlobalObject::get
        in InspectorFrontendHost) was easily inlined.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/ScriptGlobalObject.cpp: Removed.
        * bindings/js/ScriptGlobalObject.h: Removed.
        Removed ScriptGlobalObject.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::windowObjectCleared):
        Remove call to ScriptGlobalObject::set and use addSelfToGlobalObjectInWorld instead.

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showContextMenu):
        Inline ScriptGlobalObject::get.

        (WebCore::InspectorFrontendHost::addSelfToGlobalObjectInWorld):
        Add helper which inlines ScriptGlobalObject::set and works
        as a helper for the three inspector frontends.

2017-08-04  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r220268.

        This change caused assertion failures on macOS and iOS Debug
        WK2.

        Reverted changeset:

        "Resource Load Statistics: Report user interaction
        immediately, but only when needed"
        https://bugs.webkit.org/show_bug.cgi?id=175090
        http://trac.webkit.org/changeset/220268

2017-08-04  Youenn Fablet  <youenn@apple.com>

        Remove STREAMS_API compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175165

        Reviewed by Darin Adler.

        No change of behavior.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeAsStream):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::isDisturbedOrLocked const):
        (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/FetchResponse.js:
        (initializeFetchResponse):
        * 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:
        * Modules/streams/ReadableStreamBYOBReader.idl:
        * Modules/streams/ReadableStreamBYOBReader.js:
        * Modules/streams/ReadableStreamBYOBRequest.idl:
        * Modules/streams/ReadableStreamBYOBRequest.js:
        * Modules/streams/ReadableStreamDefaultController.idl:
        * Modules/streams/ReadableStreamDefaultController.js:
        * Modules/streams/ReadableStreamDefaultReader.idl:
        * Modules/streams/ReadableStreamDefaultReader.js:
        * Modules/streams/ReadableStreamInternals.js:
        * Modules/streams/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:
        * bindings/js/JSReadableStreamPrivateConstructors.h:
        * bindings/js/JSReadableStreamSourceCustom.cpp:
        * bindings/js/ReadableStreamDefaultController.cpp:
        * bindings/js/ReadableStreamDefaultController.h:
        * page/RuntimeEnabledFeatures.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2017-08-04  Zan Dobersek  <zdobersek@igalia.com>

        [EME][GStreamer] Register ClearKey CDMFactory
        https://bugs.webkit.org/show_bug.cgi?id=175136

        Reviewed by Xabier Rodriguez-Calvar.

        Register the ClearKey CDM factory in CDMFactoryGStreamer. A CDMFactoryClearKey
        singleton object is introduced and used for that registration.

        The basic CDMFactoryClearKey and CDMPrivateClearKey methods are implemented,
        marking `org.w3.clearkey` as the supported key system and `keyids` as the
        supported init data type. Additional logic around key system configurations,
        distinctive identifiers, persistent state and related restrictions and
        requirements is implemented.

        This improves the ClearKey EME tests a bit, now progressing to the point of
        failing with a NotAllowedError exception due to the CDMInstance object failing
        to properly initialize because of missing implementation.

        No new tests -- relevant tests have underlying baselines updated to reflect
        changes in behavior.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMFactoryClearKey::singleton):
        (WebCore::CDMFactoryClearKey::supportsKeySystem):
        (WebCore::CDMPrivateClearKey::supportsInitDataType const):
        (WebCore::CDMPrivateClearKey::supportsConfiguration const):
        (WebCore::CDMPrivateClearKey::supportsConfigurationWithRestrictions const):
        (WebCore::CDMPrivateClearKey::supportsSessionTypeWithConfiguration const):
        (WebCore::CDMPrivateClearKey::supportsRobustness const):
        (WebCore::CDMPrivateClearKey::distinctiveIdentifiersRequirement const):
        (WebCore::CDMPrivateClearKey::persistentStateRequirement const):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/gstreamer/eme/CDMFactoryGStreamer.cpp:
        (WebCore::CDMFactory::platformRegisterFactories):

2017-08-04  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Report user interaction immediately, but only when needed
        https://bugs.webkit.org/show_bug.cgi?id=175090
        <rdar://problem/33685546>

        Reviewed by Chris Dumez.

        Test: http/tests/loading/resourceLoadStatistics/user-interaction-only-reported-once-within-short-period-of-time.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::ResourceLoadObserver):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Now tells the UI process immediately but also records that it has
            done so to avoid doing it when not needed.
        (WebCore::ResourceLoadObserver::scheduleNotificationIfNeeded):
            Conditional throttling gone, now always throttles.
        (WebCore::ResourceLoadObserver::notifyObserver):
            Renamed from ResourceLoadObserver::notificationTimerFired().
        (WebCore::ResourceLoadObserver::clearState):
            New function to allow the test runner to reset the web process'
            statistics state now that we keep track of whether or not we've
            reported user interaction to the UI process.
        (WebCore::ResourceLoadObserver::setShouldThrottleObserverNotifications): Deleted.
        (WebCore::ResourceLoadObserver::notificationTimerFired): Deleted.
        * loader/ResourceLoadObserver.h:
        (): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setResourceLoadStatisticsShouldThrottleObserverNotifications): Deleted.
            No longer needed since user interaction is always communicated
            immediately.
        * testing/Internals.h:
        * testing/Internals.idl:

2017-08-04  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Push CDMFactory into the platform layer
        https://bugs.webkit.org/show_bug.cgi?id=175129

        Reviewed by Xabier Rodriguez-Calvar.

        This is a follow-up to r219678 that moved the majority of CDM abstraction
        classes into the platform layer, but missed the CDMFactory class.

        The CDMFactory abstraction is now also placed in the platform layer. Only
        change to the interface is that the createCDM() method can't accept a CDM
        object reference anymore since that class is cemented into the WebCore
        layer, and no current implementation used it anyway.

        Additionally, the static Vector object of registered factories is moved
        under the CDMFactory class, along with the register and unregister
        functions. The platformRegisterFactories() function is added to allow for
        platform-specific factory registrations to occur when the registered
        factories are queried for the first time. Empty implementation for this
        function is provided for non-GStreamer platforms, while for GStreamer
        the implementation is kept in CDMFactoryGStreamer.cpp. It's still empty
        for now, but it will register the ClearKey factory there in the near
        future.

        No new tests -- none affected, only refactoring.

        * CMakeLists.txt:
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::createCDMPrivateForKeySystem):
        (WebCore::CDM::supportsKeySystem):
        (WebCore::CDM::CDM):
        (): Deleted.
        (WebCore::CDM::registerCDMFactory): Deleted.
        (WebCore::CDM::unregisterCDMFactory): Deleted.
        * Modules/encryptedmedia/CDM.h:
        (WebCore::CDMFactory::~CDMFactory): Deleted.
        * PlatformWPE.cmake:
        * platform/GStreamer.cmake:
        * platform/encryptedmedia/CDMFactory.cpp: Added.
        (WebCore::CDMFactory::registerFactory):
        (WebCore::CDMFactory::unregisterFactory):
        (WebCore::CDMFactory::platformRegisterFactories):
        * platform/encryptedmedia/CDMFactory.h: Added.
        (WebCore::CDMFactory::~CDMFactory):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMFactoryClearKey::createCDM):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/encryptedmedia/gstreamer/CDMFactoryGStreamer.cpp: Added.
        (WebCore::CDMFactory::platformRegisterFactories):
        * testing/MockCDMFactory.cpp:
        (WebCore::m_weakPtrFactory):
        (WebCore::MockCDMFactory::unregister):
        (WebCore::MockCDMFactory::createCDM):
        * testing/MockCDMFactory.h:

2017-08-04  Frederic Wang  <fwang@igalia.com>

        ScrollingTreeOverflowScrollingNodeIOS uses the wrong fixed position rectangle
        https://bugs.webkit.org/show_bug.cgi?id=175135

        Reviewed by Simon Fraser.

        This patch modifies ScrollingTreeOverflowScrollingNodeIOS::updateChildNodesAfterScroll so
        that it uses the fixed position rectangle relative of the first frame ancestor instead of
        the one of the main frame. This makes it consistent with ScrollingTreeFrameScrollingNodeIOS
        and RenderLayerCompositor. This fixes some flickering issues on iOS.

        Test: fast/scrolling/ios/fixed-inside-overflow-inside-iframe.html

        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        (WebCore::ScrollingTreeFrameScrollingNode::fixedPositionRect): Helper function to get the
        fixed position rect to use for that frame.
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::enclosingFrameNode const): Helper function to get the enclosing
        frame for this scrolling node or null if there is none.
        * page/scrolling/ScrollingTreeNode.h: Declare enclosingFrameNode.

2017-08-04  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Removing redundant NotImplemented.h header inclusions
        and cleaning up whitespace issues in libgcrypt-specific CryptoKeyEC
        and CryptoKeyRSA implementation files.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:

2017-08-04  Jeremy Jones  <jeremyj@apple.com>

        Remove unnecesary call to status bar SPI.
        https://bugs.webkit.org/show_bug.cgi?id=175176
        rdar://problem/20887306

        Reviewed by Darin Adler.

        No new tests because no behavior change.

        This removes an obsolete call to SPI.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):

2017-08-03  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyEC PKCS#8 imports
        https://bugs.webkit.org/show_bug.cgi?id=173647

        Reviewed by Jiewen Tan.

        No new tests -- affected tests are now passing and are unskipped.

        Implement libgcrypt-based support for PKCS#8 imports of EC keys.

        Existing libtasn1 utilities are used to achieve this. First, the provided key data
        is decoded against the PrivateKeyInfo ASN.1 definition. First, the version member
        of that structure is validated, followed by the algorithm member. The latter is
        also properly tested depending on this being an import of an ECDSA or ECDH key.

        Data of the parameters member is decoded against the ECParameters ASN.1 definition,
        and the namedCurve object identifier is validated, making sure it represents a
        valid EC curve and that this curve maches the one specified for the import
        operation.

        Data of the privateKey member is decoded against the ECPrivateKey ASN.1 definition.
        The version member of that structure is properly validated. The optional parameters
        member of that structure is already decoded against the ECParameters ASN.1
        definition. If present, it is checked to contain a valid EC curve identifier that
        matches the specified curve.

        The optional publicKey member of the ECPrivateKey structure is validated, testing
        that its data matches in size an uncompressed EC point, and that the first byte
        of this data is 0x04, as expected for an uncompressed EC point.

        What's left is the private key data on the initial ECPrivateKey structure. That
        data is retrieved and validated, making sure its size matches the size of the
        specified curve. The `private-key` s-expression is then constructed, embedding
        the curve name and the validated private key data. This s-expression is then used
        to construct an EC context.

        If the optional publicKey data was provided, it's used to set the `q` parameter
        for this EC context. Otherwise, the value for `q` is computed on-the-fly for the
        specified EC and the provided private key. The `q` point is then tested through
        the gcry_mpi_ec_curve_point() function, making sure that the derived point is
        indeed located on the given EC.

        Finally, with the private key properly validated, a new CryptoKeyEC object is
        constructed, using the `private-key` s-expression and the parameters that were
        specified for this import operation.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::CryptoKeyEC::platformImportPkcs8):
        * crypto/gcrypt/GCryptUtilities.h:

2017-08-03  Chris Dumez  <cdumez@apple.com>

        Fix parsing of <meta http-equiv=refresh> to allow time starting with a '.' without a leading 0
        https://bugs.webkit.org/show_bug.cgi?id=175132

        Reviewed by Darin Adler.

        Fix parsing of <meta http-equiv=refresh> to allow time starting with a '.', without
        a leading 0. This is as per https://github.com/whatwg/html/pull/2852.

        The latest spec is at:
        - https://html.spec.whatwg.org/multipage/semantics.html#attr-meta-http-equiv-refresh

        Test: imported/w3c/web-platform-tests/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/parsing.html

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTTPRefreshInternal):

2017-08-03  Brian Burg  <bburg@apple.com>

        Remove ENABLE(WEB_SOCKET) guards
        https://bugs.webkit.org/show_bug.cgi?id=167044

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        * Modules/websockets/ThreadableWebSocketChannel.h:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocket.cpp:
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocket.idl:
        * Modules/websockets/WebSocketChannel.cpp:
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannelClient.h:
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        * Modules/websockets/WebSocketDeflateFramer.h:
        * Modules/websockets/WebSocketDeflater.cpp:
        * Modules/websockets/WebSocketDeflater.h:
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        * Modules/websockets/WebSocketExtensionDispatcher.h:
        * Modules/websockets/WebSocketExtensionParser.cpp:
        * Modules/websockets/WebSocketExtensionParser.h:
        * Modules/websockets/WebSocketExtensionProcessor.h:
        * Modules/websockets/WebSocketFrame.cpp:
        * Modules/websockets/WebSocketFrame.h:
        * Modules/websockets/WebSocketHandshake.cpp:
        * Modules/websockets/WebSocketHandshake.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::idbConnectionProxy):
        (WebCore::Document::socketProvider):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didSendWebSocketFrameImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame):
        * inspector/InspectorNetworkAgent.cpp:
        * inspector/InspectorNetworkAgent.h:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::webSocketEnabled const):
        * page/RuntimeEnabledFeatures.h:
        * page/SocketProvider.cpp:
        * page/SocketProvider.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::socketProvider):
        * workers/WorkerThread.h:

2017-08-03  Don Olmstead  <don.olmstead@sony.com>

        Remove LayoutUnit dependency in TextStream
        https://bugs.webkit.org/show_bug.cgi?id=175110

        Reviewed by Zalan Bujtas.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/LayoutUnit.cpp: Added.
        (WebCore::operator<<):
        * platform/LayoutUnit.h:
        * platform/text/TextStream.cpp:
        * platform/text/TextStream.h:

2017-08-03  Jeremy Jones  <jeremyj@apple.com>

        Improve WebKitLegacy video fullscreen animation begin and end rects.
        https://bugs.webkit.org/show_bug.cgi?id=175152
        rdar://problem/32840576

        Reviewed by Eric Carlson.

        No new tests, becuase this change has no effect on the DOM.

        This change uses different rects for fullscreen animation to prevent the animation
        from failing, and to improve the aesthetics of the animation.

        * platform/mac/WebVideoFullscreenController.mm:
        (frameExpandedToRatioOfFrame):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        (-[WebVideoFullscreenWindow animateFromRect:toRect:withSubAnimation:controllerAction:]):
        (constrainFrameToRatioOfFrame): Deleted.

2017-08-03  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] SecureStop left on disk in Private Browsing mode.
        https://bugs.webkit.org/show_bug.cgi?id=175162

        Reviewed by Eric Carlson.

        Return an empty string from mediaKeysStorageDirectory() when the page indicates that storage should
        be ephemeral(). Previously, an empty string in this case would be treated as an error. Instead, treat
        an empty string as valid, and do not try to store or retrieve session information to disk in that case.

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory const):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::releaseKeys):
        (WebCore::CDMSessionAVContentKeySession::update):
        (WebCore::CDMSessionAVContentKeySession::generateKeyReleaseMessage):
        (WebCore::CDMSessionAVContentKeySession::contentKeySession):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::storagePath const):

2017-08-03  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Add support for Request keepalive getter
        https://bugs.webkit.org/show_bug.cgi?id=175151

        Reviewed by Chris Dumez.

        Test: imported/w3c/web-platform-tests/fetch/api/request/request-keepalive.html

        Adding keepalive as a fetch option.
        Adding initialization and getter of keepalive into FetchRequest.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::buildOptions):
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequest.idl:
        * loader/FetchOptions.h:

2017-08-03  Yoshiaki Jitsukawa  <jitsu@rd.scei.sony.co.jp>

        [PAL] Move spi/cf directory into PAL
        https://bugs.webkit.org/show_bug.cgi?id=175057

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        * loader/cocoa/SubresourceLoaderCocoa.mm:
        * loader/mac/ResourceLoaderMac.mm:
        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/mac/PluginBlacklist.mm:
        * platform/mac/WebCoreNSStringExtras.mm:
        * platform/mac/WebGLBlacklist.mm:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/cocoa/CredentialCocoa.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        * platform/network/cocoa/ResourceResponseCocoa.mm:
        * platform/network/ios/ResourceRequestIOS.mm:
        * platform/network/mac/CookieJarMac.mm:
        * platform/network/mac/FormDataStreamMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/mac/ResourceRequestMac.mm:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        * platform/network/mac/WebCoreURLResponse.h:
        * testing/cocoa/WebArchiveDumpSupport.mm:

2017-08-03  Youenn Fablet  <youenn@apple.com>

        Remove FETCH_API compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=175154

        Reviewed by Chris Dumez.

        No change of behavior.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/fetch/DOMWindowFetch.cpp:
        * Modules/fetch/DOMWindowFetch.h:
        * Modules/fetch/DOMWindowFetch.idl:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBody.idl:
        * Modules/fetch/FetchBodyConsumer.cpp:
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchHeaders.cpp:
        * Modules/fetch/FetchHeaders.h:
        * Modules/fetch/FetchHeaders.idl:
        * Modules/fetch/FetchInternals.js:
        * Modules/fetch/FetchLoader.cpp:
        * Modules/fetch/FetchLoader.h:
        * Modules/fetch/FetchLoaderClient.h:
        * Modules/fetch/FetchRequest.cpp:
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchResponse.cpp:
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/FetchResponse.js:
        * Modules/fetch/FetchResponseSource.cpp:
        * Modules/fetch/FetchResponseSource.h:
        * Modules/fetch/WorkerGlobalScopeFetch.cpp:
        * Modules/fetch/WorkerGlobalScopeFetch.h:
        * Modules/fetch/WorkerGlobalScopeFetch.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::fetchAPIEnabled const):

2017-08-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: add button to open Inspector^2
        https://bugs.webkit.org/show_bug.cgi?id=175108

        Reviewed by Brian Burg.

        This patch just exposes a function to the inspector page. No new functionality was added.

        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::inspectInspector):

2017-08-03  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Instrument WebGLProgram created/deleted
        https://bugs.webkit.org/show_bug.cgi?id=175059

        Reviewed by Devin Rousso.

        Tests: inspector/canvas/shaderProgram-add-remove-webgl.html
               inspector/canvas/shaderProgram-add-remove-webgl2.html

        This patch adds instrumentation to WebGLRenderingContextBase for tracking
        WebGLPrograms. A new helper class, InspectorShaderProgram, is used by
        the CanvasAgent to hold related data.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::createProgram):
        (WebCore::WebGLRenderingContextBase::deleteProgram):

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateProgram):
        (WebCore::InspectorCanvasAgent::willDeleteProgram):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::unbindCanvas):
        (WebCore::InspectorCanvasAgent::unbindProgram):
        (WebCore::InspectorCanvasAgent::assertInspectorProgram):
        (WebCore::InspectorCanvasAgent::findInspectorProgram):
        * inspector/InspectorCanvasAgent.h:

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateCSSCanvasImpl):
        (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodesImpl):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContextImpl):
        (WebCore::InspectorInstrumentation::didChangeCanvasMemoryImpl):
        (WebCore::InspectorInstrumentation::recordCanvasActionImpl):
        (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrameImpl):
        (WebCore::InspectorInstrumentation::didCreateProgramImpl):
        (WebCore::InspectorInstrumentation::willDeleteProgramImpl):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::recordCanvasActionImpl):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvas):
        (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext):
        (WebCore::InspectorInstrumentation::didChangeCanvasMemory):
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrame):
        (WebCore::InspectorInstrumentation::didCreateProgram):
        (WebCore::InspectorInstrumentation::willDeleteProgram):

        * inspector/InspectorShaderProgram.cpp: Added.
        (WebCore::InspectorShaderProgram::create):
        (WebCore::InspectorShaderProgram::InspectorShaderProgram):
        (WebCore::InspectorShaderProgram::context const):
        * inspector/InspectorShaderProgram.h: Added.

2017-08-03  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220209.

        This caused internal build failures.

        Reverted changeset:

        "Use MPAVRoutingController instead of deprecated versions."
        https://bugs.webkit.org/show_bug.cgi?id=175063
        http://trac.webkit.org/changeset/220209

2017-08-03  Brady Eidson  <beidson@apple.com>

        Add SW IDLs and stub out basic functionality.
        https://bugs.webkit.org/show_bug.cgi?id=175115

        Reviewed by Chris Dumez.

        No new tests (Currently no behavior change).

        Overall note: This feature is EnabledAtRuntime as opposed to EnabledBySetting because
        the Settings-based code generation is completely broken for non-Document contexts,
        whereas the RuntimeEnabledFeatures-based generation is not.
    
        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        * bindings/scripts/preprocess-idls.pl: Handle the new global scope c'tor file.

        * bindings/js/JSServiceWorkerContainerCustom.cpp: Added.
        (WebCore::JSServiceWorkerContainer::ready const):

        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::toJSWorkerGlobalScope): Refactor to handle both types of derived workers.
        (WebCore::toJSServiceWorkerGlobalScope):
        * bindings/js/JSWorkerGlobalScopeBase.h:

        * dom/EventNames.h:
        * dom/EventTargetFactory.in:

        * features.json: Change status of feature.

        * page/Navigator.idl:
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::serviceWorker):
        * page/NavigatorBase.h:
        * page/NavigatorServiceWorker.idl: Added.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::serviceWorkerEnabled const):
        (WebCore::RuntimeEnabledFeatures::setServiceWorkerEnabled):

        * workers/ServiceWorker.cpp: Added.
        (WebCore::ServiceWorker::postMessage):
        (WebCore::ServiceWorker::~ServiceWorker):
        (WebCore::ServiceWorker::scriptURL const):
        (WebCore::ServiceWorker::state const):
        (WebCore::ServiceWorker::eventTargetInterface const):
        (WebCore::ServiceWorker::scriptExecutionContext const):
        * workers/ServiceWorker.h: Added.
        * workers/ServiceWorker.idl: Added.

        * workers/ServiceWorkerContainer.cpp: Added.
        (WebCore::ServiceWorkerContainer::~ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::controller const):
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::startMessages):
        (WebCore::ServiceWorkerContainer::eventTargetInterface const):
        (WebCore::ServiceWorkerContainer::scriptExecutionContext const):
        * workers/ServiceWorkerContainer.h: Added.
        * workers/ServiceWorkerContainer.idl: Added.

        * workers/ServiceWorkerGlobalScope.cpp: Added.
        (WebCore::ServiceWorkerGlobalScope::registration):
        (WebCore::ServiceWorkerGlobalScope::skipWaiting):
        * workers/ServiceWorkerGlobalScope.h: Added.
        * workers/ServiceWorkerGlobalScope.idl: Added.

        * workers/ServiceWorkerRegistration.cpp: Added.
        (WebCore::ServiceWorkerRegistration::~ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::installing):
        (WebCore::ServiceWorkerRegistration::waiting):
        (WebCore::ServiceWorkerRegistration::active):
        (WebCore::ServiceWorkerRegistration::scope const):
        (WebCore::ServiceWorkerRegistration::update):
        (WebCore::ServiceWorkerRegistration::unregister):
        (WebCore::ServiceWorkerRegistration::eventTargetInterface const):
        (WebCore::ServiceWorkerRegistration::scriptExecutionContext const):
        * workers/ServiceWorkerRegistration.h: Added.
        * workers/ServiceWorkerRegistration.idl: Added.

2017-08-03  Yoshiaki Jitsukawa  <jitsu@rd.scei.sony.co.jp>

        [WebCore] Sort Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=175121

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:

2017-08-02  Sam Weinig  <sam@webkit.org>

        [WebIDL] Convert MutationCallback to be a normal generated callback
        https://bugs.webkit.org/show_bug.cgi?id=174140

        Reviewed by Darin Adler.

        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 [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.
        - Converted callback objects to all inherit directly from ActiveDOMCallback rather
          than having the generated JS callback derived class inherit from it. This allows
          us to have access to a callback's canInvokeCallback() function anywhere (needed
          for MutationCallback) as well as giving a place to put an optional virtual 
          visitJSFunction to allow marking weak callbacks (while not an ideal layering, 
          this matches what we do in EventListener). This change requires each callback to
          have a bit more code to import the ActiveDOMCallback's constructor and requires
          non-JS derived callbacks to pass a ScriptExecutionContext (e.g. the Document).

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMutationCallback.cpp: Removed.
        * bindings/js/JSMutationCallback.h: Removed.
        Remove custom JSMutationCallback.h/cpp

        * Modules/geolocation/PositionCallback.h:
        * Modules/geolocation/PositionErrorCallback.h:
        * Modules/notifications/NotificationPermissionCallback.h:
        * Modules/webaudio/AudioBufferCallback.h:
        * Modules/webdatabase/DatabaseCallback.h:
        * Modules/webdatabase/SQLStatementCallback.h:
        * Modules/webdatabase/SQLStatementErrorCallback.h:
        * Modules/webdatabase/SQLTransactionCallback.h:
        * Modules/webdatabase/SQLTransactionErrorCallback.h:
        * css/MediaQueryListListener.h:
        * dom/NodeFilter.h:
        * dom/RequestAnimationFrameCallback.h:
        * dom/StringCallback.h:
        * fileapi/BlobCallback.h:
        * html/VoidCallback.h:
        * page/IntersectionObserverCallback.h:
        * page/PerformanceObserverCallback.h:
        Add ActiveDOMCallback as a base class. Import the ActiveDOMCallback constructor.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::filterDeviceList):
        (WebCore::MediaDevicesRequest::start):
        * Modules/mediastream/MediaDevicesRequest.h:
        Change filterDeviceList to take a Vector of Refs.

        * 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 and give JSCallbackDataWeak a visitJSFunction
        to allow marking the underlying function.

        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserver::visitAdditionalChildren):
        (WebCore::constructJSMutationObserver): Deleted.
        Remove the custom constructor and replace it with a custom visitAdditionalChildren
        that calls the new ActiveDOMObject's visitJSFunction.

        * bindings/scripts/CodeGenerator.pm:
        (ParseType):
        Add helper to parse a type and cache the result.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        (GetJSCallbackDataType): Deleted.
        - Add support for [CallbackThisObject]. When [CallbackThisObject] is not specified, use jsUndefined() 
          as the this object as specified by WebIDL.
        - Stop inheriting from ActiveDOMCallback now that callbacks need to do this themselves.
        - Add a visitJSFunction override for weak callback functions which calls into the callback data.

        * bindings/scripts/IDLAttributes.json:
        Add [CallbackThisObject].

        * bindings/scripts/IDLParser.pm:
        (ParseType):
        Add entry point to parse a single type.

        * css/FontFaceSet.h:
        Use Ref rather than RefPtr for the faces sequence.

        * dom/ActiveDOMCallback.h:
        (WebCore::ActiveDOMCallback::visitJSFunction):
        Add an optional visitJSFunction virtual function so that derived classes
        have a way of marking underlying function objects.

        * dom/MutationCallback.h:
        Convert to support generation (return a CallbackResult, inherit from ActiveDOMObject).

        * dom/MutationCallback.idl: Added.
        Added to generate the callback. Uses the new [CallbackThisObject].

        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::deliver):
        Switch to call idiomatic handleEvent, and pass *this as the first parameter
        which will be translated into the this object.

        * dom/MutationObserver.h:
        (WebCore::MutationObserver::callback):
        Expose the callback so it can marked during GC.

        * dom/MutationObserver.idl:
        Remove CustomConstructor and replace it with a custom mark function.

        * dom/NativeNodeFilter.cpp:
        * dom/NativeNodeFilter.h:
        * inspector/InspectorDatabaseAgent.cpp:
        Pass now needed ScriptExecutionContext to non-js based callbacks.

        * 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:
        * bindings/scripts/test/TestCallbackFunctionWithThisObject.idl: Added.
        * bindings/scripts/test/TestCallbackInterface.idl:
        Add/update tests.

2017-08-03  Jeremy Jones  <jeremyj@apple.com>

        Use MPAVRoutingController instead of deprecated versions.
        https://bugs.webkit.org/show_bug.cgi?id=175063

        Reviewed by Tim Horton.

        No new tests because no behavior change. This uses a different platform class to present
        an interface.

        Remove deprecated MPAudioVideoRoutingPopoverController and MPAVRoutingSheet
        Add MPMediaControlsViewController.

        * platform/spi/ios/MediaPlayerSPI.h:

2017-08-03  Chris Dumez  <cdumez@apple.com>

        Improve our support for referrer policies
        https://bugs.webkit.org/show_bug.cgi?id=175069
        <rdar://problem/33677313>

        Reviewed by Darin Adler.

        Improve our support for referrer policies. In particular, we now support the
        additional following ones: "same-origin", "origin-when-cross-origin" and
        "strict-origin-when-cross-origin".

        This is as per the following specification:
        - https://www.w3.org/TR/referrer-policy/#referrer-policies

        Also refactor the code a bit for clarity: I merged the ReferrerPolicy enum and the
        FetchOptions::ReferrerPolicy one.

        Tests: http/tests/referrer-policy/origin-when-cross-origin/cross-origin-http-http.html
               http/tests/referrer-policy/origin-when-cross-origin/cross-origin-http.https.html
               http/tests/referrer-policy/origin-when-cross-origin/same-origin.html
               http/tests/referrer-policy/same-origin/cross-origin-http-http.html
               http/tests/referrer-policy/same-origin/cross-origin-http.https.html
               http/tests/referrer-policy/same-origin/same-origin.html
               http/tests/referrer-policy/strict-origin-when-cross-origin/cross-origin-http-http.html
               http/tests/referrer-policy/strict-origin-when-cross-origin/cross-origin-http.https.html
               http/tests/referrer-policy/strict-origin-when-cross-origin/same-origin.html
               http/tests/referrer-policy/strict-origin/cross-origin-http-http.html
               http/tests/referrer-policy/strict-origin/cross-origin-http.https.html
               http/tests/referrer-policy/strict-origin/same-origin.html

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::start):
        * Modules/fetch/FetchReferrerPolicy.h:
        * Modules/fetch/FetchReferrerPolicy.idl:
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequestInit.h:
        * dom/Document.cpp:
        (WebCore::Document::processReferrerPolicy):
        (WebCore::Document::applyQuickLookSandbox):
        (WebCore::Document::applyContentDispositionAttachmentSandbox):
        * dom/Document.h:
        * loader/FetchOptions.h:
        * loader/FrameNetworkingContext.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendBeacon):
        Drop explicit call to SecurityPolicy::shouldHideReferrer(). This is already called inside
        SecurityPolicy::generateReferrerHeader() and used only when needed, depending on the
        actual referrer policy.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateReferrerOriginAndUserAgentHeaders):
        * page/SecurityPolicy.cpp:
        (WebCore::referrerToOriginString):
        (WebCore::SecurityPolicy::generateReferrerHeader):
        * page/SecurityPolicy.h:
        * platform/ReferrerPolicy.h:

2017-08-03  Daniel Bates  <dabates@apple.com>

        Support ::marker pseudo-element
        https://bugs.webkit.org/show_bug.cgi?id=141477

        Reviewed by David Hyatt.

        Implements the ::marker pseudo element as per the CSS Pseudo-Element Module Level 4
        spec., <https://drafts.csswg.org/css-pseudo-4> (Editor's Draft, 24 July 2017).

        The ::marker pseudo element is a convenience pseudo element that allows a person to
        style the appearance of a list item marker. For example, to render all list item
        markers in bolded, blue text you would define a stylesheet with the following content:

        li::marker {
            color: blue;
            font-weight: bold;
        }

        and this could be applied to a page that contains markup of the form:

        <ol>
            <li>Item 1</li>
            <li>Item 2</li>
            ...
            <li>Item N-1</li>
            <li>Item N</li>
        </ol>

        Formerly to the achieve the same effect you would need to use a stylesheet of the form:

        li {
            color: blue;
            font-weight: bold;
        }

        .list-item-content {
            all: initial;
        }

        and then write your markup to have the form:

        <ol>
            <li><span class="list-item-content">Item 1</span></li>
            <li><span class="list-item-content">Item 2</span></li>
            ...
            <li><span class="list-item-content">Item N-1</span></li>
            <li><span class="list-item-content">Item N</span></li>
        </ol>

        The ::marker pseudo element only supports stylizing all font properties and the color property
        of a list item marker.

        Tests: fast/lists/list-marker-with-display.html
               http/wpt/css/css-pseudo-4/marker-and-other-pseudo-elements.html
               http/wpt/css/css-pseudo-4/marker-color.html
               http/wpt/css/css-pseudo-4/marker-font-properties.html
               http/wpt/css/css-pseudo-4/marker-inherit-values.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Return the pseudo id for the ::marker pseudo element.
        * css/CSSSelector.h: Add enumerator PseudoElementMarker to the pseudo element enum.
        * css/RuleSet.cpp:
        (WebCore::determinePropertyWhitelistType): Return whitelist type PropertyWhitelistMarker for ::marker
        so that we match rules against the acceptable rules for ::marker.
        * css/RuleSet.h: Add enumerator PropertyWhitelistMarker to the property whitelist type enum.
        * css/SelectorPseudoElementTypeMap.in: Add "marker" to the list of pseudo element types.
        * css/StyleResolver.cpp:
        (WebCore::isValidMarkerStyleProperty): Determines if the specified CSS property is valid inside ::marker.
        (WebCore::StyleResolver::CascadedProperties::addMatch): Only recognize CSS properties in the content block
        of ::marker that match the ::marker whitelist policy.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::computeMarkerStyle): Computes the style object for the list item marker. We
        apply the user-agent style to the marker here as opposed to defining ::marker in the UA sheet as per
        the spec. as an optimization to avoid having the style resolver apply the pseudo element to all elements.
        For now, we always inherit style from the originating element (list item). Added FIXME to selectively
        inherit styles.
        (WebCore::RenderListItem::styleDidChange): Always apply the list marker style to the list marker renderer.
        * rendering/RenderListItem.h:
        * rendering/style/RenderStyleConstants.h: Add pseudo ID for the ::marker pseudo element.

2017-08-03  Antti Koivisto  <antti@apple.com>

        Factor common code in Style::*ChangeInvalidation into helper functions
        https://bugs.webkit.org/show_bug.cgi?id=174312

        Reviewed by Andreas Kling.

        There is a lot of copy code here.

        * Style/StyleInvalidationFunctions.h: Added.
        (WebCore::Style::traverseRuleFeaturesInShadowTree):
        (WebCore::Style::traverseRuleFeaturesForSlotted):
        (WebCore::Style::traverseRuleFeatures):

            Add functions for traversing rule features that may affect style of an element.
            Use lambdas to implement client-specific behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::mayBeAffectedByAttributeChange):
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):
        (WebCore::Style::mayBeAffectedByHostRules): Deleted.
        (WebCore::Style::mayBeAffectedBySlottedRules): Deleted.
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::invalidateStyle):
        (WebCore::Style::mayBeAffectedByHostRules): Deleted.
        (WebCore::Style::mayBeAffectedBySlottedRules): Deleted.
        * style/IdChangeInvalidation.cpp:
        (WebCore::Style::IdChangeInvalidation::invalidateStyle):
        (WebCore::Style::mayBeAffectedByHostRules): Deleted.
        (WebCore::Style::mayBeAffectedBySlottedRules): Deleted.

2017-08-03  Zan Dobersek  <zdobersek@igalia.com>

        [EME] CDM constructor assigns CDMPrivate member multiple times
        https://bugs.webkit.org/show_bug.cgi?id=175128

        Reviewed by Xabier Rodriguez-Calvar.

        In the CDM class constructor, iterate over the registered CDM
        factories, finding one that supports the specified key system.
        A CDMPrivate object is created through that factory, and the
        iteration is now stopped at that point, while previously it
        contined to potentially create CDMPrivate objects through
        other factories.

        Helper createCDMPrivateForKeySystem() function is removed.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::CDM):
        (WebCore::createCDMPrivateForKeySystem): Deleted.

2017-08-03  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::renderOrDisplayContentsStyle):
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        (WebCore::Style::shouldResolveElement):
        (WebCore::Style::TreeResolver::resolveComposedTree):

2017-08-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: add stack trace information for each RecordingAction
        https://bugs.webkit.org/show_bug.cgi?id=174663

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/recording-2d.html
               inspector/model/recording.html

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildAction):

2017-08-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Merge WTFThreadData to Thread::current
        https://bugs.webkit.org/show_bug.cgi?id=174716

        Reviewed by Mark Lam.

        Use Thread::current() instead.

        * fileapi/AsyncFileStream.cpp:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2017-08-02  Sam Weinig  <sam@webkit.org>

        Fix crashes in GC creating a document fragment on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=175111

        Reviewed by Chris Dumez.

        r220095 (https://webkit.org/b/175006) change JSHTMLTemplateElement from using a
        private name + property to manager the lifetime of the reference DocumentFragment
        to using the idiomatic visitAdditionalChildren. Unfortunately, the function to access
        the DocumentFragment lazily creates it. If this lazy creation happens on a GC thread,
        badness ensues. This introduces an accessor that returns the DocumentFragment if it
        has been created or null if it has not.

        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        (WebCore::JSHTMLTemplateElement::visitAdditionalChildren):
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::contentIfAvailable):
        * html/HTMLTemplateElement.h:

2017-08-02  Sam Weinig  <sam@webkit.org>

        [WebIDL] Simplify [EnabledBySettings] extended attribute code to not require passing a global object to finishCreation
        https://bugs.webkit.org/show_bug.cgi?id=175087

        Reviewed by Chris Dumez.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GeneratePrototypeDeclaration):
        Remove unnecessary passing of the global object to finishCreation for [EnabledBySettings].

        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        Update tests.

2017-08-02  Andy Estes  <aestes@apple.com>

        REGRESSION (r207155): Unable to switch sheets when previewing Numbers '09 spreadsheets
        https://bugs.webkit.org/show_bug.cgi?id=175098
        <rdar://problem/31416763>

        Reviewed by Daniel Bates.

        r207155 enabled sandboxing on the frame displaying a QuickLook preview. This restricted
        frames within the sandbox from navigating their sandboxed siblings or ancestors, which
        breaks the functionality of multi-sheet Numbers '09 spreadsheet previews. These previews
        contain a frameset with a table of contents frame and a content frame, and the table of
        contents frame needs to be able to navigate the content frame when the sheet selection
        changes.

        Fix this by disabling the SandboxNavigation flag in the QuickLook sandbox. Frames within the
        sandbox will be able to navigate each other, but will not be able to navigate the top frame
        (due to SandboxTopNavigation still being enabled), nor will they be able to navigate any
        other ancestor frame outside the sandbox (due to QuickLook previews being in a different
        origin than the hosting frame). These two cases are covered by existing tests.

        Test: quicklook/multi-sheet-numbers-09.html

        * dom/Document.cpp:
        (WebCore::Document::applyQuickLookSandbox): Added a call to
        disableSandboxFlags(SandboxNavigation) after applying the content security policy.
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::disableSandboxFlags): Defined disableSandboxFlags().

2017-08-02  Jer Noble  <jer.noble@apple.com>

        [MSE] Removing samples when presentation order does not match decode order can cause bad behavior.
        https://bugs.webkit.org/show_bug.cgi?id=175091

        Reviewed by Eric Carlson.

        Address follow-up comments to r219519.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames):

2017-08-02  Jeremy Jones  <jeremyj@apple.com>

        Remove unused and obsolete setting mediaDocumentEntersFullscreenAutomatically
        https://bugs.webkit.org/show_bug.cgi?id=175080

        Reviewed by Jon Lee.

        No new tests because this only removes unused code.

        This is obsolete because of the alternate solution in
        https://bugs.webkit.org/show_bug.cgi?id=174850

        * page/Settings.in:

2017-08-02  Filip Pizlo  <fpizlo@apple.com>

        GPUBuffer::length() should return the size of the array buffer backing the GPU buffer, not the rounded-up GPU buffer length
        https://bugs.webkit.org/show_bug.cgi?id=175079

        Reviewed by Simon Fraser.

        This fixes a failure in the GPU.BufferCreate unit test.
        
        The problem is that in order to have a Metal buffer wrap memory we allocated, we have to tell Metal
        that the memory is page-aligned. This means that the Metal buffer reports back a page-aligned size,
        which is different than what the test expected.
        
        It seems that it's most convenient for our GPUBuffer class to return the unaligned length, rather
        than the aligned length. This is just a simple matter of returning the length from the ArrayBuffer
        rather than the Metal buffer.
        
        This fixes the unit test and is probably more sensible for actual users of this class, since the page
        alignment of the length is a goofy implementation detail.

        * platform/graphics/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::length const):

2017-08-01  Brian Burg  <bburg@apple.com>

        HTML file input elements do not support file extensions in the "accept" attribute
        https://bugs.webkit.org/show_bug.cgi?id=95698
        <rdar://problem/12231850>

        Reviewed by Darin Adler.

        Serialize the accepted file extensions so they can be accessed in the UI process.

        * platform/FileChooser.h:
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::invalidate): Modernize.
        (WebCore::FileChooserSettings::acceptTypes const): Deleted.
        This is dead code, it was only used by Chromium.

2017-08-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use LazyNeverDestroyed instead of DEFINE_GLOBAL for QualifiedName
        https://bugs.webkit.org/show_bug.cgi?id=175010
        <rdar://problem/33647818>

        Reviewed by Alex Christensen.

        No new tests because no behavior change.

        Stop using DEFINE_GLOBAL hack in favor of LazyNeverDestroyed.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::isValidCSSSelector):
        Call QualifiedName::init().
        * dom/DOMAllInOne.cpp: Remove the warning. Include QualifiedName.cpp.
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init): Call LazyNeverDestroyed::construct
        instead of placement new.
        * dom/QualifiedName.h: Use LazyNeverDestroyed.

2017-08-01  Joseph Pecoraro  <pecoraro@apple.com>

        CFString leak dragging an image - allocation under PlatformPasteboard::writeObjectRepresentations
        https://bugs.webkit.org/show_bug.cgi?id=175064

        Reviewed by Tim Horton.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::writeObjectRepresentations):
        Adopt a created string into the RetainPtr.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList dealloc]):
        Release suggestedName and switch from -strong to -copy.

2017-08-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update Beacon API status to "In Development".

        * features.json:

2017-08-01  Chris Dumez  <cdumez@apple.com>

        Add initial support for navigator.sendBeacon
        https://bugs.webkit.org/show_bug.cgi?id=175007
        <rdar://problem/33547728>

        Reviewed by Sam Weinig.

        Add initial support for navigator.sendBeacon behind an experimental
        feature runtime flag. The specification is available at:
        - https://w3c.github.io/beacon/

        The current implementation supports sending beacons with all types of
        payloads except for ReadableStream. Some functionality is incomplete
        and will be taken care of in follow-up patches:
        - Support for CORS preflight for the cases where it is required. We currently
          return false and do not send the beacon in such cases.
        - Better support for redirects.
        - Use a more power-friendly network priority for beacon requests.

        Tests: http/tests/blink/sendbeacon/*
               http/tests/security/mixedContent/beacon/insecure-beacon-in-iframe.html
               http/wpt/beacon/*
               imported/blink/fast/beacon/*
               imported/w3c/web-platform-tests/beacon/*

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/beacon/NavigatorBeacon.cpp: Added.
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/beacon/NavigatorBeacon.h: Added.
        * Modules/beacon/NavigatorBeacon.idl: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendBeacon):
        * loader/PingLoader.h:

2017-08-01  Filip Pizlo  <fpizlo@apple.com>

        Bmalloc and GC should put auxiliaries (butterflies, typed array backing stores) in a gigacage (separate multi-GB VM region)
        https://bugs.webkit.org/show_bug.cgi?id=174727

        Reviewed by Mark Lam.

        No new tests because no change in behavior.
        
        Needed to teach Metal how to allocate in the Gigacage.

        * platform/graphics/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::contents):

2017-08-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Implement Font::platformBoundsForGlyph
        https://bugs.webkit.org/show_bug.cgi?id=174813

        Reviewed by Alex Christensen.

        Test: fast/text/emphasis.html

        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::Font::platformBoundsForGlyph): Implemented by copying
        the code from Font::boundsForGDIGlyph().

2017-08-01  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r217197): New Yorker website hangs for a long time on load, lots of blank tiles
        https://bugs.webkit.org/show_bug.cgi?id=175009
        <rdar://problem/33505791>

        Reviewed by Simon Fraser.

        This patch ensures that we report the desktop, non-frame-flattened frame size for media queries in subframes.
        Some websites don't expect the iframes to be expanded to the size of the content and when the media query
        callback mutates the content (triggering frame resize), they might end up getting into a never ending layout.

        Test: fast/frames/flattening/media-query-growing-content.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::orientationEvaluate):
        (WebCore::aspectRatioEvaluate):
        (WebCore::heightEvaluate):
        (WebCore::widthEvaluate):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::layoutSizeForMediaQuery const):
        (WebCore::FrameView::evaluateMediaQueryList):
        * page/FrameView.h:

2017-07-26  Jiewen Tan  <jiewen_tan@apple.com>

        Add tests to detect mistakes in backward compatibility when the structured clone algorithm is changed in the future
        https://bugs.webkit.org/show_bug.cgi?id=173998

        Reviewed by Darin Adler.

        * bindings/js/SerializedScriptValue.cpp:
        Add a comment.

2017-08-01  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220089.

        This caused multiple crashes on macOS Debug testers.

        Reverted changeset:

        "Use LazyNeverDestroyed instead of DEFINE_GLOBAL for
        QualifiedName"
        https://bugs.webkit.org/show_bug.cgi?id=175010
        http://trac.webkit.org/changeset/220089

2017-08-01  Sam Weinig  <sam@webkit.org>

        [WebIDL] Swap a custom attribute for a custom mark function for HTMLTemplateElement
        https://bugs.webkit.org/show_bug.cgi?id=175006

        Reviewed by Chris Dumez.

        Use the standard way of augmenting GC, visitAdditionalChildren, rather
        than using a private name to create ownership.

        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        (WebCore::JSHTMLTemplateElement::visitAdditionalChildren):
        (WebCore::JSHTMLTemplateElement::content const): Deleted.
        * html/HTMLTemplateElement.idl:

2017-08-01  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Gather crypto constants in a single location
        https://bugs.webkit.org/show_bug.cgi?id=174091

        Reviewed by Jiewen Tan.

        Gather common constants used across the libgcrypt-specific Web Crypto
        implementations in a single place -- in the GCryptUtilities.h header,
        inside the CryptoConstants namespace. The various ASN.1 object identifiers
        and other helper values are placed inside, in the std::array<uint8_t, N>
        container.

        Additionally, CryptoConstants::matches() helper function is provided. It
        compares the provided data-and-size pair with the given std::array
        container and returns true if the std::memcmp() call returns 0.

        Changes in CryptoKeyEC and CryptoKeyRSA consist mostly of switching to the
        use of CryptoConstants::matches() and the CryptoConstants data arrays, as
        well as some whitespace cleanup.

        Additionallity in CryptoKeyEC, the helper functions covering various curve
        attributes are reordered, renamed and reorganized for simplicity.

        No new tests -- no changes in behavior.

        * crypto/gcrypt/CryptoKeyECGCrypt.cpp:
        (WebCore::curveIdentifier):
        (WebCore::curveSize):
        (WebCore::curveUncompressedFieldElementSize):
        (WebCore::curveUncompressedPointSize):
        (WebCore::CryptoKeyEC::platformImportRaw):
        (WebCore::CryptoKeyEC::platformImportJWKPublic):
        (WebCore::CryptoKeyEC::platformImportJWKPrivate):
        (WebCore::supportedAlgorithmIdentifier):
        (WebCore::curveForIdentifier):
        (WebCore::CryptoKeyEC::platformImportSpki):
        (WebCore::CryptoKeyEC::platformExportRaw):
        (WebCore::CryptoKeyEC::platformAddFieldElements):
        (WebCore::CryptoKeyEC::platformExportSpki):
        (WebCore::CryptoKeyEC::platformExportPkcs8):
        (WebCore::uncompressedPointSizeForCurve): Deleted.
        (WebCore::uncompressedFieldElementSizeForCurve): Deleted.
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::supportedAlgorithmIdentifier):
        (WebCore::CryptoKeyRSA::importPkcs8):
        (WebCore::CryptoKeyRSA::exportSpki):
        (WebCore::CryptoKeyRSA::exportPkcs8):
        * crypto/gcrypt/GCryptUtilities.h:
        (WebCore::CryptoConstants::matches):

2017-07-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use LazyNeverDestroyed instead of DEFINE_GLOBAL for MediaFeatureNames
        https://bugs.webkit.org/show_bug.cgi?id=175008

        Reviewed by Alex Christensen.

        No new tests because no behavior change.

        Stop using DEFINE_GLOBAL hack in favor of LazyNeverDestroyed.

        * css/MediaFeatureNames.cpp:
        (WebCore::MediaFeatureNames::init): Do not include
        <wtf/StaticConstructors.h>. Use LazyNeverDestroyed instead of
        DEFINE_GLOBAL. Call LazyNeverDestroyed::construct instead of
        placement new.
        * css/MediaFeatureNames.h: Use LazyNeverDestroyed.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::evaluate const): Dereference with ->.

2017-07-31  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use LazyNeverDestroyed instead of DEFINE_GLOBAL for QualifiedName
        https://bugs.webkit.org/show_bug.cgi?id=175010

        Reviewed by Alex Christensen.

        No new tests because no behavior change.

        Stop using DEFINE_GLOBAL hack in favor of LazyNeverDestroyed.

        * dom/DOMAllInOne.cpp: Remove the warning. Include QualifiedName.cpp.
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init): Call LazyNeverDestroyed::construct
        instead of placement new.
        * dom/QualifiedName.h: Use LazyNeverDestroyed.

2017-07-31  Matt Rajca  <mrajca@apple.com>

        Support quirk for letting media autoplay if the user interacted with at least one media element.
        https://bugs.webkit.org/show_bug.cgi?id=175005
        <rdar://problem/33476038>

        Reviewed by Eric Carlson.

        If the user has interacted with at least one media element, let other media elements auto-play
        as a quirk.

        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia):
        * dom/Document.h:
        (WebCore::Document::noteUserInteractionWithMediaElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture):
        * html/MediaElementSession.cpp:
        (WebCore::needsDocumentLevelMediaUserGestureQuirk):
        (WebCore::MediaElementSession::playbackPermitted const):
        * page/MediaProducer.h:

2017-07-31  Nan Wang  <n_wang@apple.com>

        AX: CFEqual is failing on text markers with exact same data
        https://bugs.webkit.org/show_bug.cgi?id=175002
        <rdar://problem/33636985>

        Reviewed by Chris Fleizach.

        We should zero the memory of the TextMarkerData instance so that it
        can be tested for byte-equivalence.

        Made sure this change won't break any of the existing tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        (WebCore::AXObjectCache::textMarkerDataForFirstPositionInTextControl):

2017-07-28  Matt Rajca  <mrajca@apple.com>

        Propagate user gesture tokens when script elements are loaded.
        https://bugs.webkit.org/show_bug.cgi?id=174959

        Reviewed by Eric Carlson.

        Propagate user gesture tokens when script elements are loaded (i.e. between the time an
        element is created and its onload handler is invoked).

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::dispatchLoadEventRespectingUserGestureIndicator):
        (WebCore::ScriptElement::executeScriptAndDispatchEvent):
        (WebCore::ScriptElement::executePendingScript):
        * dom/ScriptElement.h:

2017-07-31  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220048.

        This revision caused multiple crashes in fast/images. See
        webkit.org/b/174990

        Reverted changeset:

        "RenderImageResourceStyleImage::image() should return the
        nullImage() if the image is not available"
        https://bugs.webkit.org/show_bug.cgi?id=174874
        http://trac.webkit.org/changeset/220048

2017-07-31  Sam Weinig  <sam@webkit.org>

        Remove unnecessary exceptions from storage code
        https://bugs.webkit.org/show_bug.cgi?id=174572

        Reviewed by Chris Dumez.

        Remove checks for canAccessStorage() and the exceptions they would cause.
        These were used for Storage in ephemeral sessions, but they are now supported.
        Add checks for a null frame to functions that can mutate the storage, as the
        frame is needed for that, and it retains our existing behavior for disconnected
        frames. By removing these checks / exceptions, we can fully generate Storage.idl.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSStorageCustom.cpp: Removed.
        Remove JSStorageCustom.cpp

        * loader/EmptyClients.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        * storage/StorageArea.h:
        Remove canAccessStorage.

        * 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::isSupportedPropertyName):
        (WebCore::Storage::supportedPropertyNames):
        * storage/Storage.h:
        * storage/Storage.idl:
        Remove canAccessStorage checks and corresponding exceptions. Add supportedPropertyNames
        to allow the removal of the [CustomGetOwnPropertyNames].

2017-07-31  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r220060.

        This broke our internal builds. Contact reviewer of patch for
        more information.

        Reverted changeset:

        "Merge WTFThreadData to Thread::current"
        https://bugs.webkit.org/show_bug.cgi?id=174716
        http://trac.webkit.org/changeset/220060

2017-07-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Merge WTFThreadData to Thread::current
        https://bugs.webkit.org/show_bug.cgi?id=174716

        Reviewed by Sam Weinig.

        Use Thread::current() instead.

        * fileapi/AsyncFileStream.cpp:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2017-07-31  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Created a bool pretty printer at WTF for debugging purposes
        https://bugs.webkit.org/show_bug.cgi?id=174893

        Reviewed by Darin Adler.

        Use WTF::boolPrettyPrinter in debugging messages.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsKeySystem):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::seek):

2017-07-30  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Suppress the -Wextra compiler warning when building with GCC 6.3.0,
        explicitly initializing the RefCounted<> base class in the
        FetchHeaders(const FetchHeaders&) constructor.

        Note that while that's the signature of the copy constructor for the FetchHeaders
        class, the base RefCounted<> class is not copyable, so the default RefCounted<>
        constructor is used, but the FetchHeaders resources are normally copied into the
        new object from the one that's passed in.

        * Modules/fetch/FetchHeaders.h:
        (WebCore::FetchHeaders::FetchHeaders):

2017-07-30  Darin Adler  <darin@apple.com>

        Remove code in HTMLObjectElement attribute parsing that forces style resolution and layout
        https://bugs.webkit.org/show_bug.cgi?id=130653

        Reviewed by Antti Koivisto.

        Also fixes a bug where load events are delivered prematurely in some cases
        when an object, embed, frame, or iframe element is still loading.

        * dom/Document.cpp:
        (WebCore::Document::loadEventDelayTimerFired): Added a call to
        FrameLoader::checkLoadComplete. Goes along with the change to
        FrameLoader::checkLoadCompleteForThisFrame, which now respects the
        isDelayingLoadEvent flag.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::HTMLAppletElement): Removed the createdByParser argument,
        no longer needed by the base class.
        (WebCore::HTMLAppletElement::create): Added call to finishCreating, which is now part of
        the process of creating any object in a class derived from HTMLPlugInImageElement.
        (WebCore::HTMLAppletElement::updateWidget): Rearranged logic so setNeedsWidgetUpdate
        is only called when it's becoming false; avoids a false/true/false round trip that can
        cause trouble.
        * html/HTMLAppletElement.h: Updated for the above.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement): Removed the createdByParser argument,
        no longer needed by the base class.
        (WebCore::HTMLEmbedElement::create): Added call to finishCreating, which is now part of
        the process of creating any object in a class derived from HTMLPlugInImageElement.
        (WebCore::HTMLEmbedElement::parseAttribute): Changed srcAttr to call
        updateImageLoaderWithNewURLSoon to do the image loading logic.
        (WebCore::HTMLEmbedElement::updateWidget): Rearranged logic so setNeedsWidgetUpdate
        is only called when it's becoming false; avoids a false/true/false round trip that can
        cause trouble.
        * html/HTMLEmbedElement.h: Updated for the above.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Call setShouldDelayLoadEvent(false) when
        transitioning to HAVE_CURRENT_DATA (or beyond), even if we have already fired a loadeddata
        event in the past. This matches what the HTML specification calls for, but only if you
        read it carefully. Without this change, and with the more complete implementation of
        load event delay below, one of the regression tests hangs because are permanently stuck
        dealying load events. Also added a FIXME about other code that likely has a similar
        problem; the symptom is likely to be subtle and minor, though.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement): Removed the createdByParser argument,
        no longer needed by the base class.
        (WebCore::HTMLObjectElement::create): Added call to finishCreating, which is now part of
        the process of creating any object in a class derived from HTMLPlugInImageElement.
        (WebCore::HTMLObjectElement::parseAttribute): Changed dataAttr to use
        updateImageLoaderWithNewURLSoon. Explicitly call scheduleUpdateForAfterStyleResolution
        since just calling invalidateStyleAndRenderersForSubtree alone is no longer sufficient.
        (WebCore::HTMLObjectElement::updateWidget): Rearranged logic so setNeedsWidgetUpdate
        is only called when it's becoming false; avoids a false/true/false round trip that can
        cause trouble.
        (WebCore::HTMLObjectElement::childrenChanged): Added calls to the new
        scheduleUpdateForAfterStyleResolution since invalidating style is no longer sufficient.
        (WebCore::HTMLObjectElement::renderFallbackContent): Remove the call to
        updateStyleIfNeeded. This is the main change that the title of this bug refers to.
        * html/HTMLObjectElement.h: Updated for the above. Also removed the
        clearUseFallbackContent function because it's clearer to set the data member in
        line at the single call site in HTMLObjectElement::parseAttribute.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): Removed the createdByParser
        argument; no need to set an m_needsWidgetUpdate flag differently for parser cases now.
        (WebCore::HTMLPlugInImageElement::finshCreating): Added. To be called after creating
        an element to do work that can't be done in a constructor.
        (WebCore::HTMLPlugInImageElement::didRecalcStyle): Added. Calls the new
        scheduleUpdateForAfterStyleResolution function.
        (WebCore::HTMLPlugInImageElement::didAttachRenderers): Moved all the logic from this
        function into scheduleUpdateForAfterStyleResolution. Also added a call through to the base
        class; cleans things up, even though it's just an assertion.
        (WebCore::HTMLPlugInImageElement::willDetachRenderers): Removed the call to
        setNeedsWidgetUpdate(true) here; no longer needed because the new logic already
        does the right thing in this case.
        (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary): Deleted. Now handled by
        updateAfterStyleResolution instead.
        (WebCore::HTMLPlugInImageElement::finishParsingChildren): Deleted. Handling updates
        after parsing all the children now comes naturally out of the new implementation.
        (WebCore::HTMLPlugInImageElement::scheduleUpdateForAfterStyleResolution): Added.
        Schedules a call to updateAfterStyleResolution when needed, and equally importantly,
        increments the load event delay count to make sure that loads that are part of that
        update can participate in decision about whether it's time for the load event.
        (WebCore::HTMLPlugInImageElement::updateAfterStyleResolution): Added.
        Combines updateWidgetIfNecessary and startLoadingImage, and also deals with the new
        m_needsImageReload boolean in cases where no actual loading is done.
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument): Update load event delay
        count when moving an element that is in the middle of loading. This lets the
        updateAfterStyleResolution function do the right thing even when the element is
        moved without leaving anything stuck in a strange state.
        (WebCore::HTMLPlugInImageElement::prepareForDocumentSuspension): Call the new
        scheduleUpdateForAfterStyleResolution since invalidating style is no longer sufficient.
        (WebCore::HTMLPlugInImageElement::startLoadingImage): Deleted. Now handled by
        updateAfterStyleResolution instead.
        (WebCore::HTMLPlugInImageElement::updateImageLoaderWithNewURLSoon): Added. Does all
        the right things for when an image URL is changed; for use by the concrete derived classes.
        * html/HTMLPlugInImageElement.h: Updated for above changes. Also made m_imageLoader
        private rather than protected, and added the two new boolean data members.

        * html/HTMLTagNames.in: Removed unneeded constructorNeedsCreatedByParser flags for
        applet, embed, and object.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense): Return true if the document is
        delaying a load event.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Don't do any work if
        isDelayingLoadEvent is true; otherwise this function can have a side effect of
        triggering the load event.
        (WebCore::FrameLoader::detachFromParent): Schedule a checkLoadComplete here, too, not
        just a checkCompleted. This is relevant if the frame we are detaching was delaying
        a load event because it no longer will be and so the load might be complete.

2017-07-30  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove JS builtin bindings for FetchRequest, DOMWindowFetch and WorkerGlobalScopeFetch
        https://bugs.webkit.org/show_bug.cgi?id=174974

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * Modules/fetch/DOMWindowFetch.js: Removed.
        * Modules/fetch/FetchRequest.js: Removed.
        * Modules/fetch/WorkerGlobalScopeFetch.js: Removed.
        Remove builtin files.

        * Modules/fetch/DOMWindowFetch.cpp:
        (WebCore::DOMWindowFetch::fetch):
        * Modules/fetch/DOMWindowFetch.h:
        * Modules/fetch/DOMWindowFetch.idl:
        * Modules/fetch/WorkerGlobalScopeFetch.cpp:
        (WebCore::WorkerGlobalScopeFetch::fetch):
        * Modules/fetch/WorkerGlobalScopeFetch.h:
        * Modules/fetch/WorkerGlobalScopeFetch.idl:
        Remove builtin and instead create FetchRequest in the implementation.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::extractBody):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchResponse.cpp:
        * Modules/fetch/FetchResponse.h:
        Rename FetchBody::BindingDataType to FetchBody::Init to match its IDL naming.

        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::appendToHeaderMap):
        (WebCore::fillHeaderMap):
        (WebCore::FetchHeaders::create):
        (WebCore::FetchHeaders::fill):
        * Modules/fetch/FetchHeaders.h:
        Add helpers to implement the fill algorithm for various input types.
        Leave the existing fill for now, as it is still used by the FetchResponse
        builtin, but will eventually be removed.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeOptions):
        (WebCore::FetchRequest::initializeWith):
        (WebCore::FetchRequest::setBody):
        (WebCore::FetchRequest::create):
        (WebCore::FetchRequest::setBodyFromInputRequest): Deleted.
        * Modules/fetch/FetchRequest.h:
        Migrate builtin code to the implementation. This is 1-to-1 re-implementation,
        so I did not attempt to fix any conformance issues. That will come in follow up.

        * Modules/fetch/FetchRequest.idl:
        Replace builtins with an IDL constructor.

        * Modules/fetch/FetchRequestInit.h:
        * Modules/fetch/FetchRequestInit.idl:
        Add missing headers and body to FetchRequestInit.

2017-07-30  Said Abou-Hallawa  <sabouhallawa@apple.com>

        RenderImageResourceStyleImage::image() should return the nullImage() if the image is not available
        https://bugs.webkit.org/show_bug.cgi?id=174874
        <rdar://problem/33530130>

        Reviewed by Darin Adler.

        If an <img> element has image content data for a none cached image, e.g.
        -webkit-named-image, RenderImageResourceStyleImage will be created and 
        attached to the RenderImage. RenderImageResourceStyleImage::m_cachedImage
        will be set to null because the m_styleImage->isCachedImage() is false in
        this case. When ImageLoader finishes loading the url of the src attribute, 
        RenderImageResource::setCachedImage() will be called to set m_cachedImage.

        A crash will happen when the RenderImage is destroyed. Destroying the 
        RenderImage calls RenderImageResourceStyleImage::shutdown() which checks
        m_cachedImage and finds it not null, so it calls RenderImageResourceStyleImage::image()
        which ends up calling CSSNamedImageValue::image() which returns a null pointer
        because the size is empty. RenderImageResourceStyleImage::shutdown() calls
        image()->stopAnimation() without checking the return value of image().

        Like the base class virtual method RenderImageResource::image(), 
        RenderImageResourceStyleImage::image() should return the nullImage() if
        the image is not available.

        Test: fast/images/image-element-image-content-data.html

        * css/CSSCrossfadeValue.cpp:
        * css/CSSFilterImageValue.cpp:
        * page/EventHandler.cpp:
        * page/PageSerializer.cpp:
        * rendering/RenderElement.cpp:
        * rendering/RenderImageResource.cpp:
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::initialize):

        (WebCore::RenderImageResourceStyleImage::shutdown): Revert back the changes
        of r208511 in this function. Add a call to image()->stopAnimation() without
        checking the return of image() since it will return the nullImage() if
        the image not available. There is no need to check m_cachedImage before 
        calling image() because image() does not check or access m_cachedImage.

        (WebCore::RenderImageResourceStyleImage::image): The base class method
        RenderImageResource::image() returns the nullImage() if the image not
        available. This is because CachedImage::imageForRenderer() returns
        the nullImage() if the image is not available; see CachedImage.h. We should
        do the same for the derived class for consistency.

        * rendering/style/ContentData.cpp:
        * rendering/style/StyleCachedImage.cpp:
        * style/StylePendingResources.cpp:

2017-07-29  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, rollout r220044 because it set the bots on fire.
        
        It seems that the "-Wunguarded-availability-new" pragma is not widely supported. So, a bunch of the
        Mac bots are now unable to build and that includes EWS.
        
        Fixing by rolling it out.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableAudioSample):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener beginObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener stopObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::rendererDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::flush):

2017-07-29  Dan Bernstein  <mitz@apple.com>

        Fixed building for macOS 10.12 with the macOS 10.13 SDK.

        Suppressed the unguarded-availability-new warning around uses of AVSampleBufferAudioRenderer
        and AVSampleBufferRenderSynchronizer. Even though the 10.13 SDK declares them as available
        starting in that release, they have been available as SPI earlier.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableAudioSample):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener beginObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener stopObservingRenderer:]):
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::rendererDidReceiveError):
        (WebCore::SourceBufferPrivateAVFObjC::flush):

2017-07-29  Nan Wang  <n_wang@apple.com>

        AX: findMatchingObjects doesn't work when the startObject is ignored
        https://bugs.webkit.org/show_bug.cgi?id=174965

        Reviewed by Chris Fleizach.

        findMatchingObjects would return a wrong element if we pass in an ignored
        start object. To fix this, we should use the closest accessible sibling as 
        the start object.

        Test: accessibility/mac/search-predicate-from-ignored-element.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):

2017-07-29  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/button/button-focus-state.html

        * Modules/modern-media-controls/controls/button.css:
        (button:focus):
        (button:focus > picture):
        * Modules/modern-media-controls/controls/slider.css:
        (.slider > input):

2017-07-28  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove JS builtin bindings for FetchHeaders
        https://bugs.webkit.org/show_bug.cgi?id=174905

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * Modules/fetch/FetchHeaders.js: Removed.
        Remove FetchHeaders.js

        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::appendToHeaderMap):
        (WebCore::FetchHeaders::create):
        (WebCore::FetchHeaders::append):
        * Modules/fetch/FetchHeaders.h:
        (WebCore::FetchHeaders::FetchHeaders):
        Add create function for generated constructor.
        Add appendToHeaderMap static function which takes the functionality
        from the existing append function, and makes it useable in create.

        * Modules/fetch/FetchHeaders.idl:
        Replace [JSBuiltinConstructor] with real constructor. Keep other builtin
        attributes as they are still used by other Fetch code.

        * bindings/js/JSDOMConvertRecord.h:
        Fix record conversion to work with proxies by changing to use the method table
        for getOwnPropertyNames, and undefined values by not excluding undefined values. 

2017-07-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: capture an async stack trace when web content calls addEventListener
        https://bugs.webkit.org/show_bug.cgi?id=174739
        <rdar://problem/33468197>

        Reviewed by Brian Burg.

        Test: inspector/debugger/async-stack-trace.html

        Add instrumentation to EventTarget to support showing asynchronous
        stack traces when the debugger breaks in a script event listener.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didAddEventListenerImpl):
        (WebCore::InspectorInstrumentation::willRemoveEventListenerImpl):
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore::InspectorInstrumentation::didHandleEventImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didAddEventListener):
        (WebCore::InspectorInstrumentation::willRemoveEventListener):
        (WebCore::InspectorInstrumentation::willHandleEvent):
        (WebCore::InspectorInstrumentation::didHandleEvent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearAsyncStackTraceData):
        (WebCore::PageDebuggerAgent::didAddEventListener):
        (WebCore::PageDebuggerAgent::willRemoveEventListener):
        (WebCore::PageDebuggerAgent::willHandleEvent):
        * inspector/PageDebuggerAgent.h:

2017-07-28  Matt Rajca  <mrajca@apple.com>

        Don't add autoplay restrictions to media elements created in response to user gestures.
        https://bugs.webkit.org/show_bug.cgi?id=174947

        Reviewed by Eric Carlson.

        Test: media/video-create-with-user-gesture.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):

2017-07-28  Jeremy Jones  <jeremyj@apple.com>

        WebMediaSessionHelper calls -[UIApplication beginReceivingRemoteControlEvents] from WebThread
        https://bugs.webkit.org/show_bug.cgi?id=174934
        rdar://problem/33586772

        Reviewed by Eric Carlson.

        No new tests because no effect on DOM.

        This dispatches a UIKit call to the main thread since it might happen on WebThread in WK1.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):

2017-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] Reeder's defaults font is Times instead of San Francisco
        https://bugs.webkit.org/show_bug.cgi?id=174885
        <rdar://problem/33462483>

        Reviewed by Simon Fraser.

        Reeder uses explicit dot-prefixed names in its source code. Within Core Text,
        dot-prefixed names cannot be matched case insensitively. The solution is to
        not case-fold these family names, and to make our caches case sensitive for
        these special names.

        Tests: fast/text/font-lookup-dot-prefix-case-sensitive-2.html
               fast/text/font-lookup-dot-prefix-case-sensitive.html

        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        * platform/graphics/FontCascade.cpp:
        (WebCore::keysMatch):
        (WebCore::computeFontCascadeCacheHash):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontCascadeDescription::familyNamesAreEqual):
        (WebCore::FontCascadeDescription::familyNameHash):
        (WebCore::FontCascadeDescription::foldedFamilyName):
        * platform/graphics/FontDescription.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::fontForPostScriptName):

2017-07-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Record actions performed on CanvasRenderingContext2D
        https://bugs.webkit.org/show_bug.cgi?id=174482

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/recording-2d.html
               inspector/canvas/recording.html

        * html/canvas/CanvasRenderingContext2D.idl:
        Add CallTracingCallback to interface to record all API calls.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        If a recording is active, mark the current frame as completed.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateImplementationFunctionCall):
        (GenerateCallTracerParameter):
        (GenerateCallTracer):
        * bindings/scripts/test/TestCallTracer.idl:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::setJSTestCallTracerTestAttributeInterfaceSetter):
        (WebCore::setJSTestCallTracerTestAttributeSpecifiedSetter):
        (WebCore::jsTestCallTracerTestAttributeWithVariantGetter):
        (WebCore::jsTestCallTracerTestAttributeWithVariant):
        (WebCore::setJSTestCallTracerTestAttributeWithVariantSetter):
        (WebCore::setJSTestCallTracerTestAttributeWithVariant):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationInterfaceBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationSpecifiedBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithArgumentsBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgument):
        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::buildAction):
        Change CallTracer IDL generation to flatten any variants so that all types for the
        parameters of an action are able to be listed in a single variant. This prevents possible
        ambiguity when constructing the variant, as they require that exactly one type be
        constructible and a sub-variant might not satisfy that condition. This was only an issue for
        older mac SDKs.

        * bindings/js/CallTracer.h:
        * bindings/js/CallTracer.cpp:
        (WebCore::CallTracer::recordCanvasAction):
        * bindings/js/CallTracerTypes.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        (WebCore::InspectorInstrumentation::recordCanvasActionImpl):
        Rename CanvasActionParameterVariant to RecordCanvasActionVariant to match what is expected by
        the IDL generator. Also remove unnecessary includes now that they are in CallTracerTypes.h.

        * CMakeLists.txt:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add CallTracer for CMake builds.

2017-07-28  Sam Weinig  <sam@webkit.org>

        [WebIDL] Split-up and cleanup Fetch IDL files in preparation for removing unnecessary js builtins
        https://bugs.webkit.org/show_bug.cgi?id=174915

        Reviewed by Alex Christensen.

        - Split FetchRequest enums and Init dictionary out of FetchRequest so they
          can be used from other files like WorkerGlobalScopeFetch and DOMWindowFetch.
        - Add missing FetchResponseInit. Currently unused but will be in a subsequent patch.
        - Add and update comments about missing properties and functions.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * Modules/fetch/DOMWindowFetch.idl:
        * Modules/fetch/FetchBody.idl:
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchHeaders.h:
        * Modules/fetch/FetchHeaders.idl:
        * Modules/fetch/FetchReferrerPolicy.h: Added.
        * Modules/fetch/FetchReferrerPolicy.idl: Added.
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchRequestCache.h: Added.
        * Modules/fetch/FetchRequestCache.idl: Added.
        * Modules/fetch/FetchRequestCredentials.h: Added.
        * Modules/fetch/FetchRequestCredentials.idl: Added.
        * Modules/fetch/FetchRequestInit.h: Added.
        * Modules/fetch/FetchRequestInit.idl: Added.
        * Modules/fetch/FetchRequestMode.h: Added.
        * Modules/fetch/FetchRequestMode.idl: Added.
        * Modules/fetch/FetchRequestRedirect.h: Added.
        * Modules/fetch/FetchRequestRedirect.idl: Added.
        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:
        * Modules/fetch/WorkerGlobalScopeFetch.idl:

2017-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r216944): Fallback fonts erroneously visible when the primary font is loading
        https://bugs.webkit.org/show_bug.cgi?id=174772
        <rdar://problem/33267643>

        Reviewed by Simon Fraser.

        During a font load, we try pretty hard to find a font to use that isn't the
        last resort font (which happens to be Times). We do this by iterating through
        all the fonts in the font-family list, as well as through all the relevant
        @font-face blocks which share the requested font family name. 

        Unfortunately, if we find one of these fallback fonts, we were simply using it
        directly, which means that it was being drawn as visible (because the
        visibility setting lives inside the Font object). Instead, we should carry the
        invisibility setting from the interstitial font to this used fallback font.

        This patch is an extension of r219221, which fixed the problem only for system
        fallback fonts. This patch adopts the same methodology to all fallback fonts.

        Test: http/tests/webfont/font-loading-system-fallback-visibility-FontRanges.html

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForVariant):
        (WebCore::glyphPageFromFontRanges):
        * platform/graphics/FontRanges.cpp:
        (WebCore::FontRanges::glyphDataForCharacter):

2017-07-28  Frederic Wang  <fwang@igalia.cpm>

        Fix typo in scrollPositionChangedViaDelegatedScrolling
        https://bugs.webkit.org/show_bug.cgi?id=174937

        Reviewed by Wenson Hsieh.

        No new tests, fix typo in the inUserInteraction parameter.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollPositionChangedViaDelegatedScrolling):
        * page/scrolling/ScrollingTree.h:

2017-07-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] [WK1] Snapshots generated using -[DOMRange renderImageForcingBlackText:] are upside down
        https://bugs.webkit.org/show_bug.cgi?id=174928
        <rdar://problem/33584280>

        Reviewed by Tim Horton.

        Pulls the implementation of createDragImageForRange out into DragImageIOS, and use TextIndicator to generate a
        snapshot instead of FrameSelection's snapshotting utilities. This makes snapshotting a DOMRange behave the same
        way as snapshotting a dragged selection.

        No way of testing TextIndicator-based snapshotting yet.

        * platform/DragImage.cpp:

        Guard createDragImageForRange for !PLATFORM(IOS).

        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForSelection):

        Add a FIXME to point out that having an additional context flip inside the UIGraphicsImageRenderer block results
        in an upside-down drag image being returned from createDragImageFromImage. This image is being flipped elsewhere
        in drag initiation code, which eventually results in the correct orientation; we'll need further investigation
        to remove this extraneous flip.

        (WebCore::createDragImageForRange):

2017-07-28  Jeremy Jones  <jeremyj@apple.com>

        Remove Web prefix from WebVideoFullscreen and WebPlaybackSession classes.
        https://bugs.webkit.org/show_bug.cgi?id=174437

        Reviewed by Darin Adler.

        No new tests because no behavior change.

        Remove redundant Web- prefix from classes in WebCore namespace.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        * html/HTMLVideoElement.cpp:
        * platform/cocoa/PlaybackSessionInterface.h: Renamed from Source/WebCore/platform/cocoa/WebPlaybackSessionInterface.h.
        (WebCore::PlaybackSessionInterface::~PlaybackSessionInterface):
        * platform/cocoa/PlaybackSessionModel.h: Renamed from Source/WebCore/platform/cocoa/WebPlaybackSessionModel.h.
        (WebCore::PlaybackSessionModel::~PlaybackSessionModel):
        (WebCore::PlaybackSessionModelClient::~PlaybackSessionModelClient):
        (WebCore::PlaybackSessionModelClient::externalPlaybackChanged):
        * platform/cocoa/PlaybackSessionModelMediaElement.h: Renamed from Source/WebCore/platform/cocoa/WebPlaybackSessionModelMediaElement.h.
        * platform/cocoa/PlaybackSessionModelMediaElement.mm: Renamed from Source/WebCore/platform/cocoa/WebPlaybackSessionModelMediaElement.mm.
        * platform/cocoa/VideoFullscreenChangeObserver.h: Renamed from Source/WebCore/platform/cocoa/WebVideoFullscreenChangeObserver.h.
        (WebCore::VideoFullscreenChangeObserver::~VideoFullscreenChangeObserver):
        * platform/cocoa/VideoFullscreenModel.h: Renamed from Source/WebCore/platform/cocoa/WebVideoFullscreenModel.h.
        (WebCore::VideoFullscreenModel::~VideoFullscreenModel):
        (WebCore::VideoFullscreenModelClient::~VideoFullscreenModelClient):
        * platform/cocoa/VideoFullscreenModelVideoElement.h: Renamed from Source/WebCore/platform/cocoa/WebVideoFullscreenModelVideoElement.h.
        (WebCore::VideoFullscreenModelVideoElement::create):
        * platform/cocoa/VideoFullscreenModelVideoElement.mm: Renamed from Source/WebCore/platform/cocoa/WebVideoFullscreenModelVideoElement.mm.
        * platform/ios/PlaybackSessionInterfaceAVKit.h: Renamed from Source/WebCore/platform/ios/WebPlaybackSessionInterfaceAVKit.h.
        * platform/ios/PlaybackSessionInterfaceAVKit.mm: Renamed from Source/WebCore/platform/ios/WebPlaybackSessionInterfaceAVKit.mm.
        * platform/ios/VideoFullscreenInterfaceAVKit.h: Renamed from Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h.
        * platform/ios/VideoFullscreenInterfaceAVKit.mm: Renamed from Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm.
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        * platform/mac/PlaybackSessionInterfaceMac.h: Renamed from Source/WebCore/platform/mac/WebPlaybackSessionInterfaceMac.h.
        * platform/mac/PlaybackSessionInterfaceMac.mm: Renamed from Source/WebCore/platform/mac/WebPlaybackSessionInterfaceMac.mm.
        * platform/mac/VideoFullscreenInterfaceMac.h: Renamed from Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.h.
        * platform/mac/VideoFullscreenInterfaceMac.mm: Renamed from Source/WebCore/platform/mac/WebVideoFullscreenInterfaceMac.mm.
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:

2017-07-27  Jeremy Jones  <jeremyj@apple.com>

        Don't override _allowsMediaDocumentInlinePlayback in MediaDocument with playsinlineAttr.
        https://bugs.webkit.org/show_bug.cgi?id=174850
        rdar://problem/33449903

        Reviewed by Jon Lee.

        This change removes playsinlineAttr from MediaDocument so that it doesn't override the setting
        from _allowsMediaDocumentInlinePlayback. In its place is an update to requiresFullscreenForVideoPlayback
        that implements the details of exactly which media documents are still allowed to play inlne.

        Media documents always use a video element; but when there are no video tracks, it has behavior like 
        an audio element. See media-controller.js isAudio().

        This change preserves this behavior with respect to fullscreen requirements for media document by
        mirroring the isAudio() check in requiresFullscreenForVideoPlayback.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):

2017-07-27  Jeremy Jones  <jeremyj@apple.com>

        MediaDocument fullscreen pinch gesture should trigger navigate back.
        https://bugs.webkit.org/show_bug.cgi?id=174914

        Reviewed by Jon Lee.

        No new tests because only effect is from interaction with platform.

        For media documents, pressing the "done" button on fullscreen video navigates back
        to the previous page. The same should happen for other gestures that pause playback
        when returning to inline. This allows the gesture to have the same behavior as the
        button.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):

2017-07-27  Aaron Chu  <aaron_chu@apple.com>

        AX: VoiceOver silent or skipping over time values on media player.
        https://bugs.webkit.org/show_bug.cgi?id=174324
        <rdar://problem/32021784>

        Reviewed by Antoine Quint.

        Added role attribute to modern media controls time lable class so that VoiceOver can access the time label when the media is playing.

        Test Updated: media/modern-media-controls/time-label/time-label.html
        Test Added: media/modern-media-controls/time-label/ios-time-label.html
        
        * Modules/modern-media-controls/controls/time-label.js:

2017-07-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        Hoist DOM binding attribute getter prologue into JavaScriptCore taking advantage of DOMJIT / CheckSubClass
        https://bugs.webkit.org/show_bug.cgi?id=171637

        Reviewed by Darin Adler.

        We use DOMAttribute. When DOMAttribute is specified, ClassInfo check is performed by JSC side.
        So, we can drop ClassInfo check from the actual function.

        We also simplify DOMJIT::GetterSetter to make it smaller size.

        WebCore size comparison
            Before: 48443292
            After:  48087800 (0.7% reduction)

        Speedometer Scores show 0.8% improvement.
            Before: 158.9 +- 0.46
            After:  160.2 +- 0.36

        Dromaeo DOM core Scores show 5.8% improvement.
                                        Before                   After
            Total Score:         8424.12runs/s ±1.38%     8911.60runs/s ±1.47%
              DOM Attributes    12627.27runs/s ±1.87%    14023.17runs/s ±1.87%
              DOM Modification   1207.82runs/s ±2.48%     1204.21runs/s ±3.05%
              DOM Query         68068.82runs/s ±0.63%    74273.38runs/s ±0.69%
              DOM Traversal      1240.07runs/s ±1.96%     1256.64runs/s ±1.77%

        Performance improvement can be explained by the following optimizations.

        1. Type checks are typically eliminated in all the JIT tiers. IC / DFG / FTL can
           drop type checks since get_by_id operation already performs a structure check
           which subsumes this type check.
        2. Direct getter call by CallDOMGetter without creating IC in DFG and FTL.

        * bindings/js/JSDOMAttribute.h:
        (WebCore::IDLAttribute::get):
        Add CastedThisErrorBehavior::Assert case. When this is specified, we perform casting without using jsDynamicCast.

        * bindings/scripts/CodeGeneratorJS.pm:
        (IsAcceleratedDOMAttribute):
        (GetJSCAttributesForAttribute):
        (GenerateHeader):
        (GeneratePropertiesHashTable):
        (GenerateImplementation):
        (GenerateAttributeGetterTrampolineDefinition):
        (GenerateAttributeGetterDefinition):
        (GenerateCallbackImplementationContent):
        (GenerateHashTableValueArray):
        (GenerateHashTable):
        (GenerateConstructorHelperMethods):
        Update CodeGeneratorJS to emit DOMAttribute. And DOMJIT::GetterSetter becomes changed to be smaller size.

        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceNamePrototype::finishCreation):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::JSMapLikePrototype::finishCreation):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::JSReadOnlyMapLikePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectPrototype::finishCreation):
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactionsPrototype::finishCreation):
        (WebCore::jsTestCEReactionsAttributeWithCEReactions):
        (WebCore::jsTestCEReactionsReflectAttributeWithCEReactions):
        (WebCore::jsTestCEReactionsStringifierAttribute):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifierPrototype::finishCreation):
        (WebCore::jsTestCEReactionsStringifierValue):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerPrototype::finishCreation):
        (WebCore::jsTestCallTracerTestAttributeInterface):
        (WebCore::jsTestCallTracerTestAttributeSpecified):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::JSTestCallbackInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITPrototype::finishCreation):
        (WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITAnyAttr): Deleted.
        (WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITBooleanAttr): Deleted.
        (WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITByteAttr): Deleted.
        (WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITOctetAttr): Deleted.
        (WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITShortAttr): Deleted.
        (WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr): Deleted.
        (WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITLongAttr): Deleted.
        (WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr): Deleted.
        (WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITLongLongAttr): Deleted.
        (WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr): Deleted.
        (WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITFloatAttr): Deleted.
        (WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr): Deleted.
        (WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITDoubleAttr): Deleted.
        (WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr): Deleted.
        (WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITDomStringAttr): Deleted.
        (WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITByteStringAttr): Deleted.
        (WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr): Deleted.
        (WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITNodeAttr): Deleted.
        (WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr): Deleted.
        (WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr): Deleted.
        (WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr): Deleted.
        (WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr): Deleted.
        (WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr): Deleted.
        (WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr): Deleted.
        (WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr): Deleted.
        (WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr): Deleted.
        (WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr): Deleted.
        (WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr): Deleted.
        (WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr): Deleted.
        (WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr): Deleted.
        (WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr): Deleted.
        (WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr): Deleted.
        (WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr): Deleted.
        (WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr): Deleted.
        (WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT): Deleted.
        (WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr): Deleted.
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorPrototype::finishCreation):
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        (WebCore::jsTestEventConstructorAttr3):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionPrototype::finishCreation):
        (WebCore::jsTestExceptionName):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachablePrototype::finishCreation):
        (WebCore::jsTestGenerateIsReachableASecretAttribute):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::jsTestGlobalObjectRegularAttribute):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingExceptionPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::initializeProperties):
        (WebCore::JSTestInterfacePrototype::finishCreation):
        (WebCore::jsTestInterfaceImplementsStr1):
        (WebCore::jsTestInterfaceImplementsStr2):
        (WebCore::jsTestInterfaceImplementsStr3):
        (WebCore::jsTestInterfaceImplementsNode):
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::jsTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::finishCreation):
        (WebCore::jsTestInterfaceLeadingUnderscoreReadonly):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterablePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorPrototype::finishCreation):
        (WebCore::jsTestJSBuiltinConstructorTestAttributeCustom):
        (WebCore::jsTestJSBuiltinConstructorTestAttributeRWCustom):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingExceptionPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetterPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWithPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingExceptionPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithOverrideBuiltinsPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesPrototype::finishCreation):
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttribute):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototype::finishCreation):
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttribute):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodePrototype::finishCreation):
        (WebCore::jsTestNodeName):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::initializeProperties):
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::jsTestObjReadOnlyLongAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::jsTestObjByteAttr):
        (WebCore::jsTestObjOctetAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjClampedShortAttr):
        (WebCore::jsTestObjEnforceRangeShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjLongAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjUsvstringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjTestNullableObjAttr):
        (WebCore::jsTestObjUnforgeableAttr):
        (WebCore::jsTestObjStringAttrTreatingNullAsEmptyString):
        (WebCore::jsTestObjUsvstringAttrTreatingNullAsEmptyString):
        (WebCore::jsTestObjByteStringAttrTreatingNullAsEmptyString):
        (WebCore::jsTestObjStringLongRecordAttr):
        (WebCore::jsTestObjUsvstringLongRecordAttr):
        (WebCore::jsTestObjStringObjRecordAttr):
        (WebCore::jsTestObjStringNullableObjRecordAttr):
        (WebCore::jsTestObjDictionaryAttr):
        (WebCore::jsTestObjNullableDictionaryAttr):
        (WebCore::jsTestObjAnnotatedTypeInUnionAttr):
        (WebCore::jsTestObjAnnotatedTypeInSequenceAttr):
        (WebCore::jsTestObjImplementationEnumAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedUSVStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedUSVURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjEnabledAtRuntimeAttribute):
        (WebCore::jsTestObjEnabledBySettingAttribute):
        (WebCore::jsTestObjTypedArrayAttr):
        (WebCore::jsTestObjAttributeWithGetterException):
        (WebCore::jsTestObjAttributeWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjCustomAttr):
        (WebCore::jsTestObjOnfoo):
        (WebCore::jsTestObjOnwebkitfoo):
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithCallWithAndSetterCallWithAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjAnyAttribute):
        (WebCore::jsTestObjObjectAttribute):
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjMutablePoint):
        (WebCore::jsTestObjStrawberry):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::jsTestObjReplaceableAttribute):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringSettableAttribute):
        (WebCore::jsTestObjNullableUSVStringSettableAttribute):
        (WebCore::jsTestObjNullableByteStringSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjAttribute):
        (WebCore::jsTestObjAttributeWithReservedEnumType):
        (WebCore::jsTestObjPutForwardsAttribute):
        (WebCore::jsTestObjPutForwardsNullableAttribute):
        (WebCore::jsTestObjStringifierAttribute):
        (WebCore::jsTestObjConditionallyReadWriteAttribute):
        (WebCore::jsTestObjConditionalAndConditionallyReadWriteAttribute):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequencePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterfacePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEventPrototype::finishCreation):
        (WebCore::jsTestPromiseRejectionEventReason):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerializationPrototype::finishCreation):
        (WebCore::jsTestSerializationFirstStringAttribute):
        (WebCore::jsTestSerializationSecondLongAttribute):
        (WebCore::jsTestSerializationThirdUnserializableAttribute):
        (WebCore::jsTestSerializationFourthUnrestrictedDoubleAttribute):
        (WebCore::jsTestSerializationFifthLongAttribute):
        (WebCore::jsTestSerializationSixthTypedefAttribute):
        (WebCore::jsTestSerializationSeventhDirectlySerializableAttribute):
        (WebCore::jsTestSerializationEighthIndirectlyAttribute):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::JSTestSerializationIndirectInheritancePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInheritPrototype::finishCreation):
        (WebCore::jsTestSerializationInheritInheritLongAttribute):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinalPrototype::finishCreation):
        (WebCore::jsTestSerializationInheritFinalFinalLongAttributeFoo):
        (WebCore::jsTestSerializationInheritFinalFinalLongAttributeBar):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::finishCreation):
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifierPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperationPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperationPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAsPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToStringPrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttributePrototype::finishCreation):
        (WebCore::jsTestStringifierReadOnlyAttributeIdentifier):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttributePrototype::finishCreation):
        (WebCore::jsTestStringifierReadWriteAttributeIdentifier):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::initializeProperties):
        (WebCore::JSTestTypedefsPrototype::finishCreation):
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsSerializedScriptValue):
        (WebCore::jsTestTypedefsAttributeWithClamp):
        (WebCore::jsTestTypedefsAttributeWithClampInTypedef):
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsAttrWithSetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithSetterException):
        (WebCore::jsTestTypedefsBufferSourceAttr):
        (WebCore::jsTestTypedefsDomTimeStampAttr):
        They are binding test rebaselines.

        * domjit/DOMJITIDLTypeFilter.h:
        * domjit/JSDocumentDOMJIT.cpp:
        (WebCore::compileDocumentDocumentElementAttribute):
        (WebCore::compileDocumentBodyAttribute):
        (WebCore::DocumentDocumentElementDOMJIT::callDOMGetter): Deleted.
        (WebCore::DocumentBodyDOMJIT::callDOMGetter): Deleted.
        * domjit/JSNodeDOMJIT.cpp:
        (WebCore::compileNodeFirstChildAttribute):
        (WebCore::compileNodeLastChildAttribute):
        (WebCore::compileNodeNextSiblingAttribute):
        (WebCore::compileNodePreviousSiblingAttribute):
        (WebCore::compileNodeParentNodeAttribute):
        (WebCore::compileNodeNodeTypeAttribute):
        (WebCore::compileNodeOwnerDocumentAttribute):
        (WebCore::NodeFirstChildDOMJIT::callDOMGetter): Deleted.
        (WebCore::NodeLastChildDOMJIT::callDOMGetter): Deleted.
        (WebCore::NodeNextSiblingDOMJIT::callDOMGetter): Deleted.
        (WebCore::NodePreviousSiblingDOMJIT::callDOMGetter): Deleted.
        (WebCore::NodeParentNodeDOMJIT::callDOMGetter): Deleted.
        (WebCore::NodeNodeTypeDOMJIT::callDOMGetter): Deleted.
        (WebCore::NodeOwnerDocumentDOMJIT::callDOMGetter): Deleted.
        DOMJIT::GetterSetter becomes smaller constexpr data.

2017-07-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Not having a key id buffer should not always error
        https://bugs.webkit.org/show_bug.cgi?id=174889

        Reviewed by Žan Doberšek.

        In r219946 we introduced a hard requirement for a key id buffer
        that does not happen for all CDMs.

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorSetupCipher): Check for key id buffer
        and error if we didn't get it.
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformInPlace): Soften the
        requirement for key id buffer.

2017-07-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME] Fix phony debug output in player base for supported key system
        https://bugs.webkit.org/show_bug.cgi?id=174888

        Reviewed by Žan Doberšek.

        The debug output was returning always false because that method
        was not checking anything before. Now it is and should reflect it.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsKeySystem):

2017-07-27  Zan Dobersek  <zdobersek@igalia.com>

        [EME][GStreamer] Add barebones CDM interface implementations for ClearKey
        https://bugs.webkit.org/show_bug.cgi?id=174887

        Reviewed by Xabier Rodriguez-Calvar.

        Add empty ClearKey derivations of CDMFactory, CDMPrivate and CDMInstance
        classes. These will be enhanced as the implementation progresses.

        ClearKey is added to CDMInstance::ImplementationType, and the
        CDMInstanceClearKey::implementationType() override returns that value.
        Type traits specialization for the CDMInstanceClearKey class is also
        added, utilizing the CDMInstance::ImplementationType::ClearKey value.

        The implementation file is added to the WPE build, along with the
        necessary inclusion directory.

        * PlatformWPE.cmake:
        * platform/encryptedmedia/CDMInstance.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp: Added.
        (WebCore::CDMFactoryClearKey::createCDM):
        (WebCore::CDMFactoryClearKey::supportsKeySystem):
        (WebCore::CDMPrivateClearKey::supportsInitDataType):
        (WebCore::CDMPrivateClearKey::supportsConfiguration):
        (WebCore::CDMPrivateClearKey::supportsConfigurationWithRestrictions):
        (WebCore::CDMPrivateClearKey::supportsSessionTypeWithConfiguration):
        (WebCore::CDMPrivateClearKey::supportsRobustness):
        (WebCore::CDMPrivateClearKey::distinctiveIdentifiersRequirement):
        (WebCore::CDMPrivateClearKey::persistentStateRequirement):
        (WebCore::CDMPrivateClearKey::distinctiveIdentifiersAreUniquePerOriginAndClearable):
        (WebCore::CDMPrivateClearKey::createInstance):
        (WebCore::CDMPrivateClearKey::loadAndInitialize):
        (WebCore::CDMPrivateClearKey::supportsServerCertificates):
        (WebCore::CDMPrivateClearKey::supportsSessions):
        (WebCore::CDMPrivateClearKey::supportsInitData):
        (WebCore::CDMPrivateClearKey::sanitizeResponse):
        (WebCore::CDMPrivateClearKey::sanitizeSessionId):
        (WebCore::CDMInstanceClearKey::initializeWithConfiguration):
        (WebCore::CDMInstanceClearKey::setDistinctiveIdentifiersAllowed):
        (WebCore::CDMInstanceClearKey::setPersistentStateAllowed):
        (WebCore::CDMInstanceClearKey::setServerCertificate):
        (WebCore::CDMInstanceClearKey::requestLicense):
        (WebCore::CDMInstanceClearKey::updateLicense):
        (WebCore::CDMInstanceClearKey::loadSession):
        (WebCore::CDMInstanceClearKey::closeSession):
        (WebCore::CDMInstanceClearKey::removeSessionData):
        (WebCore::CDMInstanceClearKey::storeRecordOfKeyUsage):
        * platform/encryptedmedia/clearkey/CDMClearKey.h: Added.

2017-07-27  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Allow CDMInstance type traits specialization
        https://bugs.webkit.org/show_bug.cgi?id=174886

        Reviewed by Xabier Rodriguez-Calvar.

        Allow using the trait-based type casting for the CDMInstance class and its
        derivatives. ImplementationType enumeration values are to be used and
        returned from the new implementationType() virtual method. This method is
        leveraged in the type trait specialization that enables using is<>() and
        downcast<>() helpers for CDMInstance objects.

        This will allow differentiating between CDMInstance implementations once
        the media playback pipeline has to retrieve any key information that's
        necessary for playback of encrypted content.

        MockCDMInstance class overrides the implementationType() method, returning
        the ImplementationType::Mock value. Type trait specializations for this
        class aren't added since they're not needed anywhere at this point.

        * platform/encryptedmedia/CDMInstance.h:
        * testing/MockCDMFactory.h:

2017-07-27  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Key serialization support
        https://bugs.webkit.org/show_bug.cgi?id=173883

        Reviewed by Jiewen Tan.

        Implement crypto key serialization for platforms that use libgcrypt.

        Despite the function names and the existing implementation for the Mac port,
        we don't perform the KEK wrapping and unwrapping due to the review feedback
        advising against it.

        Instead the passed-in key data is simply copied and returned as the result of
        the 'wrapping' operation, and similarly the passed-in serialized data is simply
        copied and returned as the result of the 'unwrapping' operation.

        No new tests -- related tests are now passing and are unskipped.

        * crypto/gcrypt/SerializedCryptoKeyWrapGCrypt.cpp:
        (WebCore::getDefaultWebCryptoMasterKey):
        (WebCore::wrapSerializedCryptoKey):
        (WebCore::unwrapSerializedCryptoKey):

2017-07-26  Arnaud Renevier  <a.renevier@sisa.samsung.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        Implement new TextMetrics, returned by canvas measureText()
        https://bugs.webkit.org/show_bug.cgi?id=82798
        <rdar://problem/11159332>

        Reviewed by Dean Jackson.

        The specification: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-measuretext

        Add new attributes to TextMetrics.

        Add a new method textOffset() of CanvasRenderingContext2D by
        extracting from drawTextInternal() to use the same horizontal and
        vertical offsets of a text in both drawTextInternal() and
        measureText().

        Test: fast/canvas/canvas-measureText-2.html

        * html/TextMetrics.h:
        (WebCore::TextMetrics::actualBoundingBoxLeft):
        (WebCore::TextMetrics::setActualBoundingBoxLeft):
        (WebCore::TextMetrics::actualBoundingBoxRight):
        (WebCore::TextMetrics::setActualBoundingBoxRight):
        (WebCore::TextMetrics::fontBoundingBoxAscent):
        (WebCore::TextMetrics::setFontBoundingBoxAscent):
        (WebCore::TextMetrics::fontBoundingBoxDescent):
        (WebCore::TextMetrics::setFontBoundingBoxDescent):
        (WebCore::TextMetrics::actualBoundingBoxAscent):
        (WebCore::TextMetrics::setActualBoundingBoxAscent):
        (WebCore::TextMetrics::actualBoundingBoxDescent):
        (WebCore::TextMetrics::setActualBoundingBoxDescent):
        (WebCore::TextMetrics::emHeightAscent):
        (WebCore::TextMetrics::setEmHeightAscent):
        (WebCore::TextMetrics::emHeightDescent):
        (WebCore::TextMetrics::setEmHeightDescent):
        (WebCore::TextMetrics::hangingBaseline):
        (WebCore::TextMetrics::setHangingBaseline):
        (WebCore::TextMetrics::alphabeticBaseline):
        (WebCore::TextMetrics::setAlphabeticBaseline):
        (WebCore::TextMetrics::ideographicBaseline):
        (WebCore::TextMetrics::setIdeographicBaseline):
        Added getters and setters.
        (WebCore::TextMetrics::TextMetrics): Deleted.
        * html/TextMetrics.idl: Added new attributes.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::FontProxy::fontMetrics):
        Changed the return value type to a const reference of FontMetrics
        not to copy it.
        (WebCore::CanvasRenderingContext2D::FontProxy::width):
        Added the second arguemnt of GlyphOverflow type.
        (WebCore::CanvasRenderingContext2D::measureText): Calculate and
        set the new attributes of TextMetrics.
        (WebCore::CanvasRenderingContext2D::textOffset): Extracted from drawTextInternal.
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Removed the
        offset calculation code and call textOffset.
        * html/canvas/CanvasRenderingContext2D.h: Added the method
        declaration of textOffset. Change types of fontMetrics and width
        methods.
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::floatWidthForComplexText): Added a dummy
        implementation of calculating GlyphOverflow.

2017-07-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: create protocol for recording Canvas contexts
        https://bugs.webkit.org/show_bug.cgi?id=174481

        Reviewed by Joseph Pecoraro.

        Currently, a recording doesn't actually "start" until an action is performed on the context.
        This change adds the recording logic, but it does not use it anywhere. Additonal tests will
        be added in the patches that add uses:
         - <https://webkit.org/b/174482> Web Inspector: Record actions performed on CanvasRenderingContext2D
         - <https://webkit.org/b/174483> Web Inspector: Record actions performed on WebGLRenderingContext

        Test: inspector/model/recording.html

        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateImplementationFunctionCall):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CallTracer.h: Added.
        * bindings/js/CallTracer.cpp: Added.
        (WebCore::CallTracer::recordCanvasAction):
        * bindings/js/CallTracerTypes.h: Added.
        * bindings/scripts/test/TestCallTracer.idl: Added.
        * bindings/scripts/test/JS/JSTestCallTracer.h: Added.
        * bindings/scripts/test/JS/JSTestCallTracer.cpp: Added.

        Create new IDL extended attribute called "CallTracingCallback" that will add code to call a
        static function on CallTracer with the given extended attribute value as the function name,
        the `impl` object as the first parameter, the name of the attribute/operation as the second,
        and an optional object that accepts an initializer list of all the parameters as the third.

        This function will not be called, however, unless a `callTracingActive` function on the
        `impl` object returns true, and this is marked as UNLIKELY.

        "CallTracingCallback" can be added to an Interface, in which case it will apply to all
        attributes/operations of the generated class, or an individual Attribute/Operation.

        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::callTracingActive):
        (WebCore::CanvasRenderingContext::setCallTracingActive):

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::~InspectorCanvas):
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::InspectorCanvas::hasRecordingData):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::releaseInitialState):
        (WebCore::InspectorCanvas::releaseFrames):
        (WebCore::InspectorCanvas::releaseData):
        (WebCore::InspectorCanvas::markNewFrame):
        (WebCore::InspectorCanvas::markCurrentFrameIncomplete):
        (WebCore::InspectorCanvas::setBufferLimit):
        (WebCore::InspectorCanvas::hasBufferSpace):
        (WebCore::InspectorCanvas::singleFrame):
        (WebCore::InspectorCanvas::setSingleFrame):
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::buildArrayForAffineTransform):
        (WebCore::buildArrayForVector):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildAction):
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        (WebCore::InspectorCanvas::buildArrayForImageData):

        Hold the recording data on the corresponding InspectorCanvas. Recording Frames are
        completed when the HTMLCanvasElement paints or a  0_s timer is fired. A recording is not
        considered valid until at least one action is performed on the canvas context. Once that
        condition is satisfied, canceling the recording will flush the data.

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::requestRecording):
        (WebCore::InspectorCanvasAgent::cancelRecording):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::canvasRecordingTimerFired):
        (WebCore::InspectorCanvasAgent::clearCanvasData):

        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        (WebCore::InspectorInstrumentation::recordCanvasActionImpl):
        (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrameImpl):

        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::stringForWindingRule):
        (WebCore::CanvasRenderingContext2D::stringForImageSmoothingQuality):

        * platform/graphics/Gradient.h:
        (WebCore::Gradient::stops):

        * svg/SVGPathUtilities.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::buildStringFromPath):

2017-07-26  Ali Juma  <ajuma@chromium.org>

        Implement document.elementsFromPoint
        https://bugs.webkit.org/show_bug.cgi?id=153137

        Reviewed by Simon Fraser.

        This ports Blink's implementation of elementsFromPoint, from the
        following patches by Philip Rogers (pdr@chromium.org):
        -https://src.chromium.org/viewvc/blink?revision=190686&view=revision
        -https://src.chromium.org/viewvc/blink?revision=191240&view=revision
        -https://src.chromium.org/viewvc/blink?revision=199214&view=revision

        Tests: imported/w3c/web-platform-tests/cssom-view/elementsFromPoint-iframes.html
               imported/w3c/web-platform-tests/cssom-view/elementsFromPoint-invalid-cases.html
               imported/w3c/web-platform-tests/cssom-view/elementsFromPoint-shadowroot.html
               imported/w3c/web-platform-tests/cssom-view/elementsFromPoint-simple.html
               imported/w3c/web-platform-tests/cssom-view/elementsFromPoint-svg.html
               imported/w3c/web-platform-tests/cssom-view/elementsFromPoint-table.html

        * dom/DocumentOrShadowRoot.idl:
        * dom/TreeScope.cpp:
        (WebCore::absolutePointIfNotClipped):
        (WebCore::TreeScope::nodeFromPoint):
        (WebCore::TreeScope::elementFromPoint):
        (WebCore::TreeScope::elementsFromPoint):
        * dom/TreeScope.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::HitTestRequest):
        (WebCore::HitTestRequest::resultIsElementList):
        (WebCore::HitTestRequest::includesAllElementsUnderPoint):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::addNodeToListBasedTestResult):
        (WebCore::HitTestResult::append):
        (WebCore::HitTestResult::listBasedTestResult):
        (WebCore::HitTestResult::mutableListBasedTestResult):
        (WebCore::HitTestResult::addNodeToRectBasedTestResult): Deleted.
        (WebCore::HitTestResult::rectBasedTestResult): Deleted.
        (WebCore::HitTestResult::mutableRectBasedTestResult): Deleted.
        * rendering/HitTestResult.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::hitTestCulledInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestContents):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::nodeAtFloatPoint):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):

2017-07-26  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Review WebKitWebSource after r219252.
        https://bugs.webkit.org/show_bug.cgi?id=174415

        Reviewed by Carlos Garcia Campos.

        Remove ResourceHandleStreamingClient, and flatten the StreamingClient
        into CachedResourceStreamingClient (the only implemetation left). They
        are no longer required after r219252.

        Also remove the locking code. It's not needed now, and what existed
        was heavy-handed and missed several cases it was supposed to protect

        Covered by existing tests.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (webKitWebSrcDispose):
        (webKitWebSrcStop):
        (webKitWebSrcStart):
        (webKitWebSrcNeedData):
        (webKitWebSrcEnoughData):
        (webKitWebSrcSeek):
        (webKitWebSrcSetMediaPlayer):
        (CachedResourceStreamingClient::CachedResourceStreamingClient):
        (CachedResourceStreamingClient::~CachedResourceStreamingClient):
        (CachedResourceStreamingClient::getOrCreateReadBuffer):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::dataReceived):
        (CachedResourceStreamingClient::loadFinished):
        (ResourceHandleStreamingClient::create): Deleted.
        (): Deleted.
        (StreamingClient::StreamingClient): Deleted.
        (StreamingClient::~StreamingClient): Deleted.
        (StreamingClient::createReadBuffer): Deleted.
        (StreamingClient::handleResponseReceived): Deleted.
        (StreamingClient::handleDataReceived): Deleted.
        (StreamingClient::handleNotifyFinished): Deleted.
        (ResourceHandleStreamingClient::ResourceHandleStreamingClient): Deleted.
        (ResourceHandleStreamingClient::~ResourceHandleStreamingClient): Deleted.
        (ResourceHandleStreamingClient::cleanupAndStopRunLoop): Deleted.
        (ResourceHandleStreamingClient::invalidate): Deleted.
        (ResourceHandleStreamingClient::loadFailed): Deleted.
        (ResourceHandleStreamingClient::setDefersLoading): Deleted.
        (ResourceHandleStreamingClient::getOrCreateReadBuffer): Deleted.
        (ResourceHandleStreamingClient::willSendRequest): Deleted.
        (ResourceHandleStreamingClient::didReceiveResponse): Deleted.
        (ResourceHandleStreamingClient::didReceiveData): Deleted.
        (ResourceHandleStreamingClient::didReceiveBuffer): Deleted.
        (ResourceHandleStreamingClient::didFinishLoading): Deleted.
        (ResourceHandleStreamingClient::didFail): Deleted.
        (ResourceHandleStreamingClient::wasBlocked): Deleted.
        (ResourceHandleStreamingClient::cannotShowURL): Deleted.

2017-07-26  Brian Burg  <bburg@apple.com>

        Remove WEB_TIMING feature flag
        https://bugs.webkit.org/show_bug.cgi?id=174795

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSPerformanceEntryCustom.cpp:
        * dom/Document.cpp:
        (WebCore::Document::setReadyState):
        (WebCore::Document::finishedParsing):
        * dom/Document.h:
        (WebCore::Document::timing):
        * dom/DocumentTiming.h:
        * dom/EventTargetFactory.in:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::finishedTimingForWorkerLoad):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/ResourceTimingInformation.cpp:
        * loader/ResourceTimingInformation.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::reportResourceTiming):
        * loader/SubresourceLoader.h:
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didFail):
        (WebCore::ThreadableLoaderClient::didFinishTiming):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishTiming):
        * loader/WorkerThreadableLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::resourceTimingInformation):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::resetDOMWindowProperties):
        (WebCore::DOMWindow::nowTimestamp):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.h:
        * page/GlobalPerformance.idl:
        * page/Performance.cpp:
        * page/Performance.h:
        * page/Performance.idl:
        * page/PerformanceEntry.cpp:
        * page/PerformanceEntry.h:
        * page/PerformanceEntry.idl:
        * page/PerformanceMark.h:
        * page/PerformanceMark.idl:
        * page/PerformanceMeasure.h:
        * page/PerformanceMeasure.idl:
        * page/PerformanceNavigation.cpp:
        * page/PerformanceNavigation.h:
        * page/PerformanceNavigation.idl:
        * page/PerformanceObserver.cpp:
        * page/PerformanceObserver.h:
        * page/PerformanceObserver.idl:
        * page/PerformanceObserverCallback.h:
        * page/PerformanceObserverCallback.idl:
        * page/PerformanceObserverEntryList.cpp:
        * page/PerformanceObserverEntryList.h:
        * page/PerformanceObserverEntryList.idl:
        * page/PerformanceResourceTiming.cpp:
        * page/PerformanceResourceTiming.h:
        * page/PerformanceResourceTiming.idl:
        * page/PerformanceTiming.cpp:
        * page/PerformanceTiming.h:
        * page/PerformanceTiming.idl:
        * page/PerformanceUserTiming.cpp:
        * page/PerformanceUserTiming.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::didFinish):
        (WebCore::ResourceHandleInternal::calculateWebTimingInformations):
        (WebCore::ResourceHandleInternal::dispatchSynchronousJob):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):
        (WebCore::sendRequestCallback):
        (WebCore::createSoupMessageForHandleAndRequest):
        (WebCore::ResourceHandle::sendPendingRequest):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::removeAllEventListeners):
        * workers/WorkerGlobalScope.h:

2017-07-26  Chris Dumez  <cdumez@apple.com>

        Pressing the Escape key should not be a valid user gesture to enter fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=174864
        <rdar://problem/33009088>

        Reviewed by Geoffrey Garen.

        Pressing the Escape key should not be a valid user gesture to enter fullscreen since this
        is the gesture to exit fullscreen already.

        Test: fullscreen/requestFullscreen-escape-key.html

        * dom/Document.cpp:
        (WebCore::Document::requestFullScreenForElement):
        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::create):
        (WebCore::UserGestureToken::gestureType):
        (WebCore::UserGestureToken::UserGestureToken):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent):

2017-07-26  Nan Wang  <n_wang@apple.com>

        AX: Incorrect range from index and length in contenteditable with <p> tags
        https://bugs.webkit.org/show_bug.cgi?id=174856

        Reviewed by Chris Fleizach.

        When asking for the string inside a text control with a given range, we sometimes get
        a wrong string at the line boundary due to a bad plain range to text marker conversion.
        To fix this, we should use the exsisting method on text controls to avoid this issue. 

        Updated the test to test the problematic case.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2017-07-26  Daewoong Jang  <daewoong.jang@navercorp.com>

        [Curl] Bug fix after r219606
        https://bugs.webkit.org/show_bug.cgi?id=174845

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlContext.h:
        (WebCore::CurlSList::isEmpty):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::didReceiveHeaderLine):
        (WebCore::ResourceHandleInternal::headerCallback):

2017-07-26  Zan Dobersek  <zdobersek@igalia.com>

        [EME][GStreamer] Multi-key support in the GStreamer ClearKey decryptor
        https://bugs.webkit.org/show_bug.cgi?id=174779

        Reviewed by Xabier Rodriguez-Calvar.

        In the CENC decryptor, the key ID value is retrieved from the info structure
        on the GstProtectionMeta object. GstBuffer for that value is retrieved and
        passed to the setupCipher() function.

        In the ClearKey decryptor (which extends the CENC decryptor), the single
        GstBuffer object on the private instance that holds the key value is replaced
        with a Vector object that holds pairs of key ID and value GstBuffers. In the
        handleKeyResponse() implementation that Vector is emptied and then refilled
        with key ID and value pairs that are passed in through the drm-cipher-clearkey
        structure that's attached to the GstEvent that signalled new key information.

        In the ClearKey decryptor's setupCipher() implementation the passed-in key ID
        buffer is used to find a matching key ID and value pair stored on the private
        instance. If not found, an error is thrown. If found, the matching key value
        is used for decryption.

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorHandleKeyResponse):
        (webKitMediaClearKeyDecryptorSetupCipher):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformInPlace):
        (webKitMediaCommonEncryptionDecryptDefaultSetupCipher):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:

2017-07-26  Zan Dobersek  <zdobersek@igalia.com>

        [EME][GStreamer] Handle ClearKey as a supported key system
        https://bugs.webkit.org/show_bug.cgi?id=174778

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsKeySystem):
        Return true for the 'org.w3.clearkey' key system when building with
        ENCRYPTED_MEDIA enabled. The underlying implementation will follow.

2017-07-26  Claudio Saavedra  <csaavedra@igalia.com>

        [WPE] Fix a potential crash in the platform pasteboard when reading a string
        https://bugs.webkit.org/show_bug.cgi?id=174859

        Reviewed by Žan Doberšek.

        We shouldn't assume that the wpe_pasteboard_string struct will be
        filled in, so initialize it.

        * platform/wpe/PlatformPasteboardWPE.cpp:
        (WebCore::PlatformPasteboard::readString): Initialize the struct
        before passing it to wpe and early return if it's still empty.

2017-07-26  Javier Fernandez  <jfernandez@igalia.com>

        InsertOrderedList command applied to table cells inserts an extra BR before the table
        https://bugs.webkit.org/show_bug.cgi?id=174593

        Reviewed by Darin Adler.

        Don't add BR when pruning empty blocks if it's the start of a paragraph.

        The function MoveParagraph is used for several operations and editing
        commands, like 'insertOrderedList'. When moving paragraphs we check out
        whether we should add a 'br' element to avoid undesired block collapse.

        However, we shouldn't do this when destination is the start of a
        paragraph.

        Tests: editing/inserting/insert-list-in-table-cell-01.html
               editing/inserting/insert-list-in-table-cell-02.html
               editing/inserting/insert-list-in-table-cell-03.html
               editing/inserting/insert-list-in-table-cell-04.html
               editing/inserting/insert-list-in-table-cell-05.html
               editing/inserting/insert-list-in-table-cell-06.html
               editing/inserting/insert-list-in-table-cell-07.html
               editing/inserting/insert-list-in-table-cell-08.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):

2017-07-26  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] WebGL2 support
        https://bugs.webkit.org/show_bug.cgi?id=174249

        Reviewed by Alex Christensen.

        Implement WebGL2 support in GraphicsContext3DCairo for the WPE port, but keep
        the implementation specific to libepoxy (which WPE leverages by default).

        In the GraphicsContext3D::create() method, we first construct the
        GraphicsContext3D object that also ensures a current GL context on this thread.
        Only then can we determine through libepoxy whether the underlying GL library
        is able to support WebGL2.

        For WebGL2, the GLES3 support is required. The initial libepoxy implementation
        ensures this only in case of 'non-desktop GL' library of minimum version 3.0.
        This effectively translates to the only supported configuration being the
        EGL and OpenGL ES 3.0 (or higher) combination. If this cannot be ensured, we
        discard the existing GraphicsContext3D object and return null.

        WebGL2 can also be supported via OpenGL (i.e. 'desktop GL'), but this hasn't
        been tested yet. Implementation will in the future be extended to support that
        as required.

        In the GraphicsContext3D constructor itself, the ANGLEWebKitBridge constructor
        has to now receive the second argument, the desired shader specification that's
        used when parsing the provided shaders. This should be SH_WEBGL_SPEC for WebGL1,
        and SH_WEBGL2_SPEC for WebGL2.

        No new tests -- a small set of existing WebGL2 tests is unskipped and passing.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        Add WebGL2-specific methods to the build.

2017-07-26  Nan Wang  <n_wang@apple.com>

        AX: should dispatch accessibilityPerformPressAction async on MacOS
        https://bugs.webkit.org/show_bug.cgi?id=174849

        Reviewed by Chris Fleizach.

        If performing the accessibility press action results in a modal alert being displayed,
        it can cause VoiceOver to hang. To fix it, we should dispatch the action asynchronously.

        Updated tests to adapt to this change.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformPressAction]):
        (-[WebAccessibilityObjectWrapper _accessibilityPerformPressAction]):

2017-07-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Icon loader error on startup
        https://bugs.webkit.org/show_bug.cgi?id=174787

        Reviewed by Brady Eidson.

        This is a regression of the new icon loading, it happens with pages that shouldn't have a favicon, like about
        pages. IconController::startLoader() did several checks before starting the load that
        DocumentLoader::startIconLoading() is not doing. It checked that the frame is the main one, the document can have
        an icon (document url is not empty and not about:blank) and that favicon url is in HTTP family. We should do the
        same checks now before starting to load icons.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading):

2017-07-25  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for HTMLCanvasElement
        https://bugs.webkit.org/show_bug.cgi?id=174847

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp: Removed.
        Remove JSHTMLCanvasElementCustom.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::getContext2d):
        (WebCore::HTMLCanvasElement::getContextWebGL):
        (WebCore::HTMLCanvasElement::getContextWebGPU):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        Move context picking code to HTMLCanvasElement. Give more
        exact types to remaining context getters.

2017-07-25  Chris Dumez  <cdumez@apple.com>

        Clean up ExceptionCode enumeration
        https://bugs.webkit.org/show_bug.cgi?id=174812

        Reviewed by Darin Adler.

        Clean up ExceptionCode enumeration:
        - Updated comments to reflect the latest WebIDL specification
        - Drop special values given to some exception codes. Those legacy codes are already in the
          table inside DOMException.cpp. This also allows us to drop empty rows in the DOMException
          table
        - Drop NoException value in the enumeration and use std::optional<ExceptionCode> when needed
          instead.

        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::IDBError::IDBError):
        (WebCore::IDBError::name):
        (WebCore::IDBError::message):
        * Modules/indexeddb/shared/IDBError.h:
        (WebCore::IDBError::code):
        (WebCore::IDBError::encode):
        (WebCore::IDBError::decode):
        * dom/DOMException.cpp:
        * dom/ExceptionCode.h:
        * fileapi/FileReaderSync.cpp:
        (WebCore::errorCodeToException):
        (WebCore::FileReaderSync::startLoading):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        * xml/XMLHttpRequest.h:

2017-07-25  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add "carteBancaire" as a supported payment network
        https://bugs.webkit.org/show_bug.cgi?id=174841
        <rdar://problem/31935596>

        Reviewed by Alex Christensen.

        Tests: http/tests/ssl/applepay/ApplePaySession.html
               http/tests/ssl/applepay/ApplePaySessionV3.html

        * Modules/applepay/PaymentRequest.cpp:
        (WebCore::PaymentRequest::isValidSupportedNetwork):

2017-07-25  Daniel Bates  <dabates@apple.com>

        Make StyleResolver::isValid{Cue, Region}StyleProperty() static, inline, non-member functions
        https://bugs.webkit.org/show_bug.cgi?id=174827

        Reviewed by Simon Fraser.

        StyleResolver::isValid{Cue, Region}StyleProperty() access neither instance nor
        class data. Moreover, they are private member functions and hence cannot be
        used outside of StyleResolver's implementation. So, make these static, inline,
        non-member functions.

        * css/StyleResolver.cpp:
        (WebCore::isValidRegionStyleProperty):
        (WebCore::isValidCueStyleProperty):
        (WebCore::StyleResolver::CascadedProperties::addMatch):
        (WebCore::StyleResolver::isValidRegionStyleProperty): Deleted.
        (WebCore::StyleResolver::isValidCueStyleProperty): Deleted.
        * css/StyleResolver.h:

2017-07-25  Per Arne Vollan  <pvollan@apple.com>

        Dragged links are blurry on 1x displays.
        https://bugs.webkit.org/show_bug.cgi?id=174831
        <rdar://problem/33519698>

        Reviewed by Simon Fraser.

        When the width and height of the drag image is a multiple of 2, the drag image is not blurry
        on a 1x display. This is a workaround which should be removed when <rdar://problem/33059739>
        is fixed.

        No new tests, since this is not straightforward to test with a layout test.

        * platform/mac/DragImageMac.mm:
        (WebCore::LinkImageLayout::LinkImageLayout):

2017-07-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Refactoring: extract async stack trace logic from InspectorInstrumentation
        https://bugs.webkit.org/show_bug.cgi?id=174738

        Reviewed by Brian Burg.

        Relocate AsyncCallType from InspectorInstrumentation to the debugger
        agent. Plumbing for `requestAnimationFrame` notifications has been added
        to PageDebuggerAgent, which is responsible for managing async stack traces. 

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::registerCallback):
        (WebCore::ScriptedAnimationController::cancelCallback):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        (): Deleted.
        (WebCore::didScheduleAsyncCall): Deleted.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didRequestAnimationFrame):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrame):
        (WebCore::InspectorInstrumentation::willFireAnimationFrame):
        Replaced Frame and Document pointers with references and moved
        pointer validation upstream.

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didRequestAnimationFrame):
        (WebCore::PageDebuggerAgent::willFireAnimationFrame):
        (WebCore::PageDebuggerAgent::didCancelAnimationFrame):
        * inspector/PageDebuggerAgent.h:

2017-07-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Async image decoding for large images should be disabled after the first time a tile is painted
        https://bugs.webkit.org/show_bug.cgi?id=174451
        <rdar://problem/31246421>

        Reviewed by Simon Fraser.

        Flashing because of DOM mutation can be fixed by disabling the asynchronous
        image decoding after the first time a tile was painted.

        We can detect this by consulting the tile repaintCount. If it is zero, then
        it is safe to use asynchronous image decoded. If the tile repaintCount is
        greater than zero, we are not sure if the renderer rectangle has an image
        drawn in it already or not. In this case we have to use the synchronous
        image decoding to avoid causing a flash.

        Tests: fast/images/async-image-background-change.html
               fast/images/async-image-src-change.html
               http/tests/multipart/multipart-async-image.html

        * 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/linux/ResourceUsageOverlayLinux.cpp:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::paintContents):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::paintContents):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerRepaintCount):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::platformCALayerPaintContents):
        * platform/graphics/ca/TileCoverageMap.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerPaintContents):
        (WebCore::TileGrid::platformCALayerRepaintCount):
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        (WebTiledBackingLayerWin::displayCallback):
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * rendering/PaintPhase.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw):
        * rendering/RenderElement.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/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):
        * testing/Internals.cpp:
        (WebCore::imageFromImageElement):
        (WebCore::bitmapImageFromImageElement):
        (WebCore::Internals::imageFrameIndex):
        (WebCore::Internals::setImageFrameDecodingDuration):
        (WebCore::Internals::resetImageAnimation):
        (WebCore::Internals::isImageAnimating):
        (WebCore::Internals::setClearDecoderAfterAsyncFrameRequestForTesting):
        (WebCore::Internals::imageDecodeCount):
        (WebCore::Internals::setLargeImageAsyncDecodingEnabledForTesting):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-07-23  Sam Weinig  <sam@webkit.org>

        [WebIDL] Add support for generating timer bindings
        https://bugs.webkit.org/show_bug.cgi?id=174766

        Reviewed by Darin Adler.

        Adds a new non-standard type, ScheduledAction, which stands in for the
        standard (DOMString or Function). It would be good to move to that in
        future, but for now, this allows for forward momentum on removing custom
        bindings.

        * WebCore.xcodeproj/project.pbxproj:
        Add JSDOMConvertScheduledAction.h.

        * bindings/IDLTypes.h:
        Add IDLScheduledAction.

        * bindings/js/JSDOMConvertScheduledAction.h: Added.
        (WebCore::Converter<IDLScheduledAction>::convert):
        Add conversion from JSValue -> ScheduledAction. This is moved from the old ScheduledAction
        create function.

        * bindings/js/JSDOMConvertVariadic.h:
        (WebCore::convertVariadicArguments):
        (WebCore::Detail::VariadicConverterBase::convert): Deleted.
        (WebCore::Detail::VariadicConverterBase<IDLInterface<T>>::convert): Deleted.
        * bindings/js/JSDOMConvertBase.h:
        * bindings/js/JSDOMConvertAny.h:
        (WebCore::VariadicConverter<IDLAny>::convert):
        * bindings/js/JSDOMConvertInterface.h:
        (WebCore::VariadicConverter<IDLInterface<T>>::convert):
        Rename VariadicConverter to VariadicConverterDetails, and remove base class. Rename 
        VariadicConverterBase to VariadicConverter, and move specializations to the file
        containing the base converter for that IDL type 

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout): Deleted.
        (WebCore::JSDOMWindow::setInterval): Deleted.
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::setTimeout): Deleted.
        (WebCore::JSWorkerGlobalScope::setInterval): Deleted.
        Remove custom implementations of setTimeout and setInterval.

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::~ScheduledAction):
        (WebCore::ScheduledAction::addArguments):
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction): Deleted.
        Rework ScheduledAction. Now has two create functions, one for the function
        form, one for the string form. These are now called by the Converter. Also,
        rather than extracting the arguments directly from the ExecState, allow the
        bindings to work as designed, and have the arguments come in as variadic 
        arguments to setTimeout/setInterval and get added to the ScheduledAction if
        needed. Also, move ContentSecurityPolicy check out of construction, and into
        setTimeout/setInterval.

        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType):
        Add ScheduledAction to the builtin list.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        Add the correct include when ScheduledAction is used.

        (GenerateParametersCheck):
        Remove rule disallowing optional arguments before variadic arguments. That works
        just fine.

        (GetBaseIDLType):
        Add mapping of ScheduledAction -> IDLScheduledAction.

        (JSValueToNativeDOMConvertNeedsGlobalObject):
        Add ScheduledAction to the list of types that need a global object
        for conversion.

        * page/WindowOrWorkerGlobalScope.idl:
        Update interface to match spec and add FIXMEs for moving to TimerHandler.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::setInterval):
        * page/DOMWindow.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::setInterval):
        * workers/WorkerGlobalScope.h:
        Update for new signatures. WorkerGlobalScope now has to return ExceptionOr<int>
        even though it never throws, due to having one IDL file defining these. This is 
        unfortunate and something we should look at addressing the future.

2017-07-25  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        [WinCairo] Fix build with AllInOnes disabled
        https://bugs.webkit.org/show_bug.cgi?id=174784
        <rdar://problem/33488914>

        Reviewed by Alex Christensen.

        * PlatformWin.cmake:
        Add RenderThemeWin.cpp to WebCore_SOURCES

        * rendering/RenderingAllInOne.cpp:
        Remove #include "RenderThemeWin.cpp"

        * testing/MemoryInfo.h:
        Remove #include "JSDomWindow.h"

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMPromiseDeferred.cpp:
        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * dom/ScriptExecutionContext.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderMediaControls.h:
        * rendering/RenderThemeWin.cpp:

        * bindings/scripts/test/JS/JSTestObj.cpp:
        Update test results.

2017-07-25  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed, fix Mac CMake build after r219567

        * PlatformMac.cmake:

2017-07-23  Darin Adler  <darin@apple.com>

        More NeverDestroyed and related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=174745

        Reviewed by Alex Christensen.

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::constructElementWithFallback):
        Use isNull() rather than comparing against nullAtom() since it's
        slightly more efficient.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersReducedMotionEvaluate): Use a switch statement for the
        three states of forcedPrefersReducedMotionAccessibilityValue. Also update
        to use Theme::singleton() instead of platformTheme().

        * dom/QualifiedName.h: Removed some unneeded includes, minor style tweaks,
        and use isNull() rather than comparing against nullAtom() since it's
        slightly more efficient.

        * html/Autofill.cpp:
        (WebCore::AutofillData::createFromHTMLFormControlElement): Use isNull()
        rather than comparing against nullAtom() since it's slightly more efficient.

        * html/HTMLDocument.cpp:
        (WebCore::addLocalNameToSet): Deleted.
        (WebCore::createHtmlCaseInsensitiveAttributesSet): Deleted.
        (WebCore::HTMLDocument::isCaseSensitiveAttribute): Moved the case-sensitive
        attribute set in here and made it use makeNeverDestroyed.

        * html/HTMLNameCollection.cpp:
        (WebCore::WindowNameCollection::elementMatchesIfNameAttributeMatch):
        Formatted vertically and sorted so it's easier to see what it does.
        (WebCore::WindowNameCollection::elementMatches): Use boolean logic instead
        of multiple return statements to make this a little more straightforward.
        (WebCore::isObjectElementForDocumentNameCollection): Added. Calls the new
        isExposed function. The old code called this isDocNamedItem.
        (WebCore::DocumentNameCollection::elementMatchesIfIdAttributeMatch):
        Use isObjectElementForDocumentNameCollection to clean up logic. Also
        sorted classes.
        (WebCore::DocumentNameCollection::elementMatchesIfNameAttributeMatch):
        Use isObjectElementForDocumentNameCollection to clean up logic. Also
        sorted classes and formatted vertically.
        (WebCore::DocumentNameCollection::elementMatches): Write in terms of
        above functions for clarity. Efficiency is roughly the same.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement): Initialize data members
        in class definition instead of here.
        (WebCore::HTMLObjectElement::childrenChanged): Update for name change;
        function is now called updateExposedState rather than updateDocNamedItem.
        Also use m_useFallbackContent directly instead of through a function.
        (WebCore::HTMLObjectElement::renderFallbackContent): Ditto.
        (WebCore::preventsParentObjectFromExposure): Added. Replaces the old
        isRecognizedTagName function, and does almost the same thing, but the
        argument type is different and the param tag is now one of the tags
        exempted here. Also broke up into two overloads so we can handle the
        Element, Text, and other Node cases.
        (WebCore::shouldBeExposed): Added. Helper for the updateExposedState
        function that handles the logic of when the element should be exposed,
        separating it from what to do when the state changes.
        (WebCore::HTMLObjectElement::updateExposedState): Renamed from
        updateDocNamedItem.

        * html/HTMLObjectElement.h: Renamed isDocNamedItem -> isExposed,
        m_docNamedItem -> m_isExposed, updateDocNamedItem -> updateExposedState,
        stopped using bit fields for the two boolean data members, and
        initialized those data members here in the class definition.

        * platform/Theme.cpp:
        (WebCore::Theme::baselinePositionAdjustment): Moved here from header.
        (WebCore::Theme::controlFont): Ditto.
        (WebCore::Theme::controlSize): Ditto.
        (WebCore::Theme::minimumControlSize): Ditto.
        (WebCore::Theme::controlRequiresPreWhiteSpace): Ditto.
        (WebCore::Theme::paint): Ditto.
        (WebCore::Theme::inflateControlPaintRect): Ditto.
        (WebCore::Theme::userPrefersReducedMotion): Ditto.
        (WebCore::Theme::controlBorder): Fixed switch statement indentation.
        (WebCore::Theme::controlPadding): Ditto.

        * platform/Theme.h: Removed the many unnecessary includes. The one
        I was really after here was FontCascade.h. Replaced the platformTheme
        function with a singleton function, following our normal style. Also
        changed the return type to a reference rather than a pointer.
        Removed many unused function and data members.

        * platform/cocoa/ThemeCocoa.h: Tightened up implementation, removing
        unnecessary members and making overrides private.
        * platform/cocoa/ThemeCocoa.mm: Moved include in here.

        * platform/gamepad/glib/GamepadsGlib.cpp:
        (WebCore::sampleGamepads): Use NeverDestroyed instead of
        DEPRECATED_DEFINE_STATIC_LOCAL.

        * platform/graphics/FontCascade.cpp:
        (WebCore::useBackslashAsYenSignForFamily): Build the set in a cleaner
        way and use a NeverDestroyed set instead of a heap-allocated one.
        (WebCore::FontCascade::FontCascade): Moved initialization of data members
        to the class definition.

        * platform/graphics/FontCascade.h: Initialize GlyphOverflow and
        FonstCascade data members in the class definition. Remove the constructor
        for GlyphOverflow entirely. Added FIXME about the peculiar != operator we
        defined for GlyphOverflow.

        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw): Use Theme::singleton() instead
        of platformTheme().
        (WebCore::NamedImageGeneratedImage::drawPattern): Ditto.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::CMTimeRangeStartKey): Use CFSTR directly instead of using
        DEPRECATED_DEFINE_STATIC_LOCAL.
        (WebCore::CMTimeRangeDurationKey): Ditto.
        (WebCore::CACFContextNeedsFlushNotification): Ditto.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::singleton): Use NeverDestroyed instead of
        DEPRECATED_DEFINE_STATIC_LOCAL.
        * platform/graphics/ca/win/LayerChangesFlusher.h: Ditto.

        * platform/graphics/cg/ImageSourceCGWin.cpp:
        (WebCore::preferredExtensionForImageSourceType): Use HashMap constructor
        instead of writing out a lot of add calls.

        * platform/graphics/harfbuzz/HarfBuzzFace.cpp:
        (WebCore::harfBuzzFaceCache): Use NeverDestroyed instead of
        DEPRECATED_DEFINE_STATIC_LOCAL.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFont): Ditto.

        * platform/ios/ThemeIOS.h: Tightened up implementation, removing
        unnecessary members and making overrides private.
        * platform/ios/ThemeIOS.mm:
        (WebCore::Theme::singleton): Renamed from platformTheme.

        * platform/mac/ThemeMac.h: Tightened up implementation, removing
        unnecessary members and making overrides private. Removed unneeded
        WTF_MAKE_FAST_ALLOCATED since this is never allocated on the heap.
        Removed unused -[NSFont webCoreFamilyName] method.
        * platform/mac/ThemeMac.mm:
        (-[NSFont webCoreFamilyName]): Deleted.
        (WebCore::Theme::singleton): Renamed from platformTheme.

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        Removed unneeded include of FontCascade.h.
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        Ditto.
        * platform/mock/MockRealtimeAudioSource.h: Ditto.

        * platform/network/win/DownloadBundleWin.cpp:
        (WebCore::DownloadBundle::fileExtension): Use NeverDestroyed
        instead of DEPRECATED_DEFINE_STATIC_LOCAL.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::replaceNewlinesWithWindowsStyleNewlines): Use
        appendLiteral instead of DEPRECATED_DEFINE_STATIC_LOCAL.

        * platform/win/FileSystemWin.cpp:
        (WebCore::bundleName): Use NeverDestroyed instead of
        DEPRECATED_DEFINE_STATIC_LOCAL, and used a lambda to initialize
        rather than a boolean to control one-time code.
        (WebCore::storageDirectory): Removed unneeded use of
        DEPRECATED_DEFINE_STATIC_LOCAL for a prefix we are appending to
        a String. The + operator can handle a literal just as efficiently
        without first storing it in a String.

        * platform/wpe/ThemeWPE.cpp:
        (WebCore::Theme::singleton): Renamed from platformTheme.
        * platform/wpe/ThemeWPE.h: Tightened up implementation, removing
        unnecessary members and making overrides private.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::RenderTheme): No need to initialize m_theme.
        (WebCore::RenderTheme::adjustStyle): Use Theme::singleton() instead
        of accessing it through m_theme.
        (WebCore::RenderTheme::paint): Ditto.
        (WebCore::RenderTheme::baselinePosition): Ditto.
        (WebCore::RenderTheme::adjustRepaintRect): Ditto.
        (WebCore::RenderTheme::setCustomFocusRingColor): Ditto.
        (WebCore::RenderTheme::platformTapHighlightColor): Ditto.

        * rendering/RenderTheme.h: Removed unneded m_theme and unneeded
        inclusion of Theme.h.

        * rendering/line/LineBreaker.h: Removed unneeded include of
        FontCascade.h.

2017-07-24  Chris Dumez  <cdumez@apple.com>

        ExceptionCode enumeration should use modern exception names
        https://bugs.webkit.org/show_bug.cgi?id=174794

        Reviewed by Geoffrey Garen.

        ExceptionCode enumeration should use modern exception names consistently.
        This makes the code nicer and closer to the text of the specification.

2017-07-24  Andy Estes  <aestes@apple.com>

        Consider implementing W3C Payment Request API
        https://bugs.webkit.org/show_bug.cgi?id=174796

        Reviewed by Daniel Bates.

        Add Payment Request to features.json as "Under Consideration".

        * features.json:

2017-07-24  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed attempt to fix Mac cmake build

        * PlatformMac.cmake:

2017-07-24  Chris Dumez  <cdumez@apple.com>

        Make ExceptionCode a proper enumeration
        https://bugs.webkit.org/show_bug.cgi?id=174771

        Reviewed by Sam Weinig.

        Make ExceptionCode a proper enumeration instead of a typedef to uint8_t.

        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::formData):
        * Modules/indexeddb/shared/IDBError.h:
        (WebCore::IDBError::encode):
        (WebCore::IDBError::decode):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::rejectWithException):
        * dom/Exception.h:
        * dom/ExceptionCode.h:
        * fileapi/FileReaderSync.cpp:
        (WebCore::errorCodeToExceptionCode):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        * xml/XMLHttpRequest.h:

2017-07-24  Simon Fraser  <simon.fraser@apple.com>

        Change "client" coordinates back to match scrolling coordinates
        https://bugs.webkit.org/show_bug.cgi?id=174734
        rdar://problem/33336930

        Reviewed by Tim Horton.

        Baidu.com (which uses jQuery), and various iOS apps make the assumption that getBoundingClientRect() returns a rectangle
        that can be used to set or compare with the scroll position. With visual viewports, that assumption is no longer valid
        when the page is zoomed, or when the keyboard has caused the visual viewport to detach from the layout viewport.

        At this point the compatibility cost of shipping layout viewport-based client rects seems higher than the gain, so revert
        to the shipping behavior. This reverts r216803, and will re-introduce bugs that occurred on zoomed pages on macOS,
        many of which are noted in webkit.org/b/170981.

        * page/FrameView.cpp:
        (WebCore::FrameView::documentToClientOffset):

2017-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [WPE] libepoxy headers can use EGL_CAST, which might not be defined by eglplatform.h
        https://bugs.webkit.org/show_bug.cgi?id=174780

        Reviewed by Carlos Garcia Campos.

        Newer versions of libepoxy provide EGL definitions that already use the EGL_CAST macro.
        We'd like to compile on systems where the eglplatform.h header doesn't yet provide
        that macro that was added only recently (e.g. it's available in Mesa 17.1, but not
        before).

        To address that, the EpoxyEGL.h header is added that first includes the libepoxy's EGL
        header and then provides the EGL_CAST definition in case the eglplatform.h header doesn't.
        This header should be included in place of <epoxy/egl.h> (which is included in this new
        header).

        The EpoxyEGL.h and EpoxyShims.h headers are also moved under the platform/graphics/epoxy/
        directory, with the new directory added to the list of inclusion paths for WPE.

        * PlatformWPE.cmake:
        * platform/graphics/PlatformDisplay.cpp:
        * platform/graphics/cairo/CairoUtilities.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/egl/GLContextEGL.cpp:
        * platform/graphics/egl/GLContextEGLWPE.cpp:
        * platform/graphics/epoxy/EpoxyEGL.h: Added.
        * platform/graphics/epoxy/EpoxyShims.h: Renamed from Source/WebCore/platform/graphics/EpoxyShims.h.
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        * platform/graphics/wpe/PlatformDisplayWPE.cpp:

2017-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Remove unused GLDefs.h header
        https://bugs.webkit.org/show_bug.cgi?id=174712

        Reviewed by Michael Catanzaro.

        * platform/graphics/opengl/GLDefs.h: Remove this unused header.
        As far as my recollection goes it was used in the IPC-based
        CoordinatedGraphics subsystem, which has been removed already.

2017-07-11  Frederic Wang  <fwang@igalia.com>

        Add attribute allow-top-navigation-by-user-activation to iframe sandbox
        https://bugs.webkit.org/show_bug.cgi?id=171327

        Reviewed by Chris Dumez.

        Tests: http/tests/security/frameNavigation/sandbox-ALLOWED-top-navigation-with-user-gesture-1.html
               http/tests/security/frameNavigation/sandbox-ALLOWED-top-navigation-with-user-gesture-2.html
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_top_navigation_by_user_activation_without_user_gesture-expected.txt
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_allow_top_navigation-3-expected.txt

        * dom/Document.cpp:
        (WebCore::Document::canNavigate): Case 2 of conformance verification is refined to match the
        current specification: Top navigation is allowed when it is triggered by user activation and
        when allow-top-navigation-by-user-activation is set. Because we have additional "security
        origin" rules with respect to the specification we also add some early return to ensure that
        navigation is really allowed for this new case.
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::isSupportedSandboxPolicy): Add allow-top-navigation-by-user-activation flag.
        (WebCore::SecurityContext::parseSandboxPolicy): Parse the new flag to allow top user
        navigation by user activation. Also, make sure that allow-top-navigation allows such
        navigation as defined by the specification.
        * dom/SecurityContext.h: Declare new sandboxing flag.

2017-07-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] 5 DataInteractionTests are failing: observed selection rects after dropping don't match expected values
        https://bugs.webkit.org/show_bug.cgi?id=174769
        <rdar://problem/33478864>

        Reviewed by Tim Horton.

        These tests began failing after r219541, due to a change in behavior of whether or not we call
        setIgnoreSelectionChanges(false, RevealSelection::No) or setIgnoreSelectionChanges(false, RevealSelection::Yes)
        when performing a text editing drop.

        Before r219541, we would not reveal the selection when performing an edit drag operation. This is because in
        WebPage::performDragControllerAction, we would begin ignoring selection changes by calling
        setIgnoreSelectionChanges(true). However, while taking a text indicator snapshot, we would stop ignoring
        selection in TextIndicator::createWithRange due to us calling setIgnoreSelectionChanges(false,
        RevealSelection::No) at the end of the function. Then, when we return to the scope of
        WebPage::performDragControllerAction and try to setIgnoreSelectionChanges(false), this is a no-op because we've
        already stopped ignoring selection changes.

        After r219541, switching to using TemporarySelectionChange means that TextIndicator::createWithRange now means
        we respect whether or not we were already ignoring selection before taking the snapshot, so we won't always
        setIgnoreSelectionChanges(false) at the end. This means that selection changes will now be correctly ignored
        when performing a drag operation, but this also means that we'll try to reveal the selection, since
        WebPage::performDragControllerAction calls setIgnoreSelectionChanges(false), for which RevealSelection::Yes
        is used by default.

        Revealing the selection in WebPage::performDragControllerAction was unintended in the first place, so we should
        revert to calling setIgnoreSelectionChanges(false, RevealSelection::No). To ensure this, we adopt
        TemporarySelectionChange here and pass only TemporarySelectionOptionIgnoreSelectionChanges, so that we won't
        additionally try to reveal selection after the drop. This is consistent with behavior prior to macOS 10.13 and
        iOS 11. Additionally, this patch also moves the call to ignore selection change from WebKit into WebCore, so
        that whether we ignore selection is consistent across both WebKit1 and WebKit2.

        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):

2017-07-23  Chris Dumez  <cdumez@apple.com>

        Drop ExceptionCodeDescription class
        https://bugs.webkit.org/show_bug.cgi?id=174757

        Reviewed by Darin Adler.

        Drop ExceptionCodeDescription class now that there is only one exception
        type: DOMException. Instead, we now have static methods on DOMException
        to get the name / message for a given exception code.

        * CMakeLists.txt:
        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::IDBError::name):
        (WebCore::IDBError::message):
        * Modules/quota/StorageErrorCallback.cpp:
        (WebCore::StorageErrorCallback::CallbackTask::CallbackTask):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        * dom/DOMAllInOne.cpp:
        * dom/DOMException.cpp:
        (WebCore::errorCodeFromName):
        (WebCore::DOMException::create):
        (WebCore::DOMException::DOMException):
        (WebCore::DOMException::name):
        (WebCore::DOMException::message):
        * dom/DOMException.h:
        * dom/ExceptionCodeDescription.cpp: Removed.
        * dom/ExceptionCodeDescription.h: Removed.
        * inspector/DOMEditor.cpp:
        (WebCore::populateErrorString):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::toErrorString):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):

2017-07-22  Dan Bernstein  <mitz@apple.com>

        Fixed building for macOS 10.12 with the macOS 10.13 SDK after r219644.

        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::update): Suppress the objc-literal-conversion warning
          in one place where we are calling a class method on a Class and the compiler can’t tell
          which class it is, so it chooses wrong and emits a warning.

2017-07-22  Chris Dumez  <cdumez@apple.com>

        Merge ExceptionBase into DOMException and drop custom toString
        https://bugs.webkit.org/show_bug.cgi?id=174755

        Reviewed by Sam Weinig.

        Merge ExceptionBase into DOMException and drop custom toString, now that DOMException
        is the only remaining exception type.

        * CMakeLists.txt:
        * Modules/mediastream/MediaStream.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::retrieveErrorMessage):
        * dom/DOMAllInOne.cpp:
        * dom/DOMException.cpp:
        (WebCore::DOMException::DOMException):
        (WebCore::DOMException::initializeDescription):
        * dom/DOMException.h:
        (WebCore::DOMException::code):
        (WebCore::DOMException::name):
        (WebCore::DOMException::message):
        * dom/ExceptionBase.cpp: Removed.
        * dom/ExceptionBase.h: Removed.

2017-07-14  Filip Pizlo  <fpizlo@apple.com>

        It should be easy to decide how WebKit yields
        https://bugs.webkit.org/show_bug.cgi?id=174298

        Reviewed by Saam Barati.

        No new tests because the WebCore change is just a change to how we #include things.

        * inspector/InspectorPageAgent.h:
        * inspector/TimelineRecordFactory.h:
        * workers/Worker.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.h:

2017-07-22  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r219045): A partially loaded image may not be repainted when its complete frame finishes decoding
        https://bugs.webkit.org/show_bug.cgi?id=174230

        Reviewed by Simon Fraser.

        Because of r219045, we now only repaint the CachedImageClinets which tried
        to draw the image but they could not because they have to wait for the image
        decoding to finish. This was done by keeping a HashSet of these clients 
        and make CachedImage own it. This HashSet is cleared once the image frame
        finishes decoding and all the waited clients are repainted.

        But Multiple asynchronous image decoding requests are allowed for the same
        frame if new data is added to the image source. If we tried to draw the 
        same image twice before it finishes decoding the first request, we will
        not be to record this second request since the HashSet will not add the
        same client twice. When he second request finishes decoding, CachedImage
        will not repaint any client since its HashSet is empty.

        To fix this problem we can do the following. When an image frame finishes
        decoding, CachedImage will keep its HashSet of pending drawing clients as
        long as the image frame is a partially loaded frame.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImageObserver::imageFrameAvailable):
        (WebCore::CachedImage::imageFrameAvailable):
        * loader/cache/CachedImage.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::setCurrentFrameDecodingStatusIfNecessary):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::internalStartAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        (WebCore::BitmapImage::imageFrameAvailableAtIndex):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageFrame.cpp:
        (WebCore::ImageFrame::decodingStatus):
        * platform/graphics/ImageFrame.h: Move DecodingStatus out of this class
        to ImageTypes.h to avoid adding other header files to ImageObvsever.h
        * platform/graphics/ImageFrameCache.cpp:
        (WebCore::ImageFrameCache::setNativeImage):
        (WebCore::ImageFrameCache::cacheMetadataAtIndex):
        (WebCore::ImageFrameCache::cacheNativeImageAtIndex):
        (WebCore::ImageFrameCache::cacheNativeImageAtIndexAsync):
        (WebCore::ImageFrameCache::requestFrameAsyncDecodingAtIndex):
        (WebCore::ImageFrameCache::frameDecodingStatusAtIndex):
        * platform/graphics/ImageFrameCache.h:
        * platform/graphics/ImageObserver.h:
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::frameDecodingStatusAtIndex):
        * platform/graphics/ImageTypes.h:
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (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::frameComplete):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw):

2017-07-22  Timothy Horton  <timothy_horton@apple.com>

        Drag and Drop preview image for Twitter link is the wrong shape
        ​https://bugs.webkit.org/show_bug.cgi?id=174731
        <rdar://problem/33335616>

        * dom/Range.cpp:
        (WebCore::Range::absoluteRectsForRangeInText):
        * page/TextIndicator.cpp:
        (WebCore::initializeIndicator):
        Apply some post-landing review feedback for r219756.

2017-07-21  Chris Dumez  <cdumez@apple.com>

        Drop IDBDatabaseException class
        https://bugs.webkit.org/show_bug.cgi?id=174743

        Reviewed by Darin Adler.

        Drop IDBDatabaseException class and use DOMException directly. IDBDatabaseException was
        only an internal concept and was already exposed to the Web as a DOMException. This
        simplifies the code a bit and will allow for further simplification in a follow-up patch.

        No new tests, no Web-facing behavior change, except for some exception messages
        being slightly different.

        * CMakeLists.txt:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::advance):
        (WebCore::IDBCursor::continuePrimaryKey):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::deleteFunction):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::transaction):
        (WebCore::IDBDatabase::deleteObjectStore):
        * Modules/indexeddb/IDBDatabaseError.h: Removed.
        * Modules/indexeddb/IDBDatabaseException.cpp: Removed.
        * Modules/indexeddb/IDBDatabaseException.h: Removed.
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::setName):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::doCount):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::doGet):
        (WebCore::IDBIndex::getKey):
        (WebCore::IDBIndex::doGetKey):
        (WebCore::IDBIndex::getAll):
        (WebCore::IDBIndex::getAllKeys):
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        (WebCore::IDBKeyRange::includes):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::setName):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::getKey):
        (WebCore::IDBObjectStore::putOrAdd):
        (WebCore::IDBObjectStore::doDelete):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::count):
        (WebCore::IDBObjectStore::doCount):
        (WebCore::IDBObjectStore::getAll):
        (WebCore::IDBObjectStore::getAllKeys):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::fireErrorAfterVersionChangeCompletion):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::result):
        (WebCore::IDBRequest::error):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::abortOnServerAndCancelRequests):
        (WebCore::IDBTransaction::didCreateIndexOnServer):
        (WebCore::IDBTransaction::putOrAddOnServer):
        * Modules/indexeddb/server/IndexValueStore.cpp:
        (WebCore::IDBServer::IndexValueStore::addRecord):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::MemoryIDBBackingStore::abortTransaction):
        (WebCore::IDBServer::MemoryIDBBackingStore::commitTransaction):
        (WebCore::IDBServer::MemoryIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::clearObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::createIndex):
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteIndex):
        (WebCore::IDBServer::MemoryIDBBackingStore::renameIndex):
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteRange):
        (WebCore::IDBServer::MemoryIDBBackingStore::addRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getAllRecords):
        (WebCore::IDBServer::MemoryIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getCount):
        (WebCore::IDBServer::MemoryIDBBackingStore::generateKeyNumber):
        (WebCore::IDBServer::MemoryIDBBackingStore::openCursor):
        (WebCore::IDBServer::MemoryIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::putIndexKey):
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::createIndex):
        (WebCore::IDBServer::MemoryObjectStore::deleteIndex):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::abortTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::commitTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::clearObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedHasIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteUnusedBlobFileRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRange):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllIndexRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::generateKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::revertGeneratedKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::openCursor):
        (WebCore::IDBServer::SQLiteIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        (WebCore::IDBServer::SQLiteIDBTransaction::begin):
        (WebCore::IDBServer::SQLiteIDBTransaction::commit):
        (WebCore::IDBServer::SQLiteIDBTransaction::abort):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::IDBError::name):
        (WebCore::IDBError::message):
        (WebCore::IDBError::toDOMError):
        * Modules/indexeddb/shared/IDBError.h:
        (WebCore::IDBError::userDeleteError):
        (WebCore::IDBError::isNull):
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):

        * dom/DOMException.cpp:
        (WebCore::DOMException::initializeDescription):
        Initialize description->code from using the actual error codes in the
        coreExceptions table, instead of initializing it using |ec|. |ec| is
        the index in the ExceptionCode enumeration and it matches the error
        code only for legacy exceptions. New exceptions such as DataError
        should have a code of 0. Without this change, w3c for IDB would start
        failing.

        * dom/ExceptionCodeDescription.cpp:
        (WebCore::ExceptionCodeDescription::ExceptionCodeDescription):
        * dom/ExceptionCodeDescription.h:

2017-07-21  Sam Weinig  <sam@webkit.org>

        [WebIDL] Simplify XMLHttpRequest bindings by removing built-ins
        https://bugs.webkit.org/show_bug.cgi?id=174740

        Reviewed by Chris Dumez.

        The behavior we were getting from XMLHttpRequest.js can be implemented
        with the [CachedAttribute] extended attribute. This reduces the number
        of JS -> C++ jumps required and makes the code more similar to other
        bindings that need caching of an IDL any value.

        * CMakeLists.txt:
        * DerivedSources.make:
        * xml/XMLHttpRequest.js: Removed.
        Remove XMLHttpRequest.js.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::response):
        (WebCore::JSXMLHttpRequest::retrieveResponse): Deleted.
        * xml/XMLHttpRequest.idl:
        Replace builtin with a [CachedAttribute] and [CustomGetter]
        for the response property.

2017-07-21  Timothy Horton  <timothy_horton@apple.com>

        Drag and Drop preview image for Twitter link is the wrong shape
        https://bugs.webkit.org/show_bug.cgi?id=174731
        <rdar://problem/33335616>

        Reviewed by Zalan Bujtas.

        TextIndicator uses Range::borderAndTextQuads and ::absoluteTextRects
        in order to get the rects of the indicated text. Currently, these
        functions do not respect clipping, so clipped-out text (e.g. as seen
        inside links on Twitter) generates lots of meaningless indicated rects.

        * page/TextIndicator.cpp:
        (WebCore::estimatedBackgroundColorForRange):
        (WebCore::hasAnyIllegibleColors):
        Change adjustTextIndicatorDataOptionsForEstimatedColorsIfNecessary
        to instead be hasAnyIllegibleColors, and referred to in the same place
        as hasNonInlineOrReplacedElements, so that it follows the same
        upgrade path (leaving textRects empty, so that it is later filled in
        with the absoluteBoundingRect). This was a mistake in r219033, which
        instead would end up painting all content, but filling in textRects
        with the actual individual text rects.

        This alone changes the behavior on Twitter from lots of jagged misplaced
        rects to a too-large bounding rect. Combined with the following changes,
        the bounding rect is reduced to the right size:

        (WebCore::initializeIndicator):
        Adopt the new Range::borderAndTextQuads and ::absoluteTextRects parameter
        and opt-in to respecting clipping for text rects.

        * dom/DOMRectList.cpp:
        (WebCore::DOMRectList::DOMRectList):
        * dom/DOMRectList.h:
        (WebCore::DOMRectList::create):
        Add a DOMRectList constructor and create() that take FloatRects, similar
        to the one that takes FloatQuads, but without the boundingRect() calls.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::convertAbsoluteToClientRects):
        Add convertAbsoluteToClientRects, similar to covertAbsoluteToClientQuads,
        except acting on rects instead of quads.

        * dom/Range.cpp:
        (WebCore::Range::absoluteRectsForRangeInText):
        (WebCore::Range::absoluteTextRects):
        (WebCore::Range::getClientRects):
        (WebCore::Range::borderAndTextRects):
        (WebCore::Range::boundingRect):
        (WebCore::Range::absoluteBoundingRect):
        (WebCore::Range::borderAndTextQuads): Deleted.
        * dom/Range.h:
        Replace borderAndTextQuads with borderAndTextRects, because all callers
        just ended up calling boundingBox() on the quads.

        Factor absoluteRectsForRangeInText out of absoluteTextRects and
        borderAndTextQuads, and teach it to optionally intersect the text rects
        with their renderer's absoluteClippedOverflowRect.

2017-07-21  Per Arne Vollan  <pvollan@apple.com>

        Round-tripping stroke-width styles through getComputedStyle cause the text to gain a stroke.
        https://bugs.webkit.org/show_bug.cgi?id=174701
        <rdar://problem/32903679>

        Reviewed by Simon Fraser.

        The initial value of stroke-color should be transparent, see https://www.w3.org/TR/fill-stroke-3/#stroke-color.
        Also, there is no need to set the graphics context in text stroke mode, if the stroke color is not visible.

        Test: fast/css/round-trip-stroke-width-using-computed-style.html

        * rendering/TextPaintStyle.cpp:
        (WebCore::updateGraphicsContext):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialStrokeWidth):
        (WebCore::RenderStyle::initialStrokeColor):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):

2017-07-21  Timothy Horton  <timothy_horton@apple.com>

        Remove an inaccurate comment from RenderTextLineBoxes

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::absoluteRectsForRange):
        This comment has been wrong for at least 4 years.

2017-07-21  Timothy Horton  <timothy_horton@apple.com>

        TextIndicator::estimatedTextColorsForRange asserts inside HashSet code (inserting reserved value)
        https://bugs.webkit.org/show_bug.cgi?id=174733

        Reviewed by Wenson Hsieh.

        * page/TextIndicator.cpp:
        (WebCore::estimatedTextColorsForRange):
        (WebCore::adjustTextIndicatorDataOptionsForEstimatedColorsIfNecessary):
        RGBA32 isn't a valid hash key, because we have no traits that define the
        empty or deleted values, nor do we have any bits we could feasibly
        use -- the full range of RGBA32 is easy to reach with various colors.

        Instead, hash Color directly.

2017-07-21  Nan Wang  <n_wang@apple.com>

        AX: Expose form validation on iOS as hint
        https://bugs.webkit.org/show_bug.cgi?id=174722
        <rdar://problem/33459761>

        Reviewed by Chris Fleizach.

        Adding the validation message to the hint of the form control element.

        Test: accessibility/ios-simulator/form-control-validation-message.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isShowingValidationMessage):
        (WebCore::AccessibilityObject::validationMessage):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHint]):
        (-[WebAccessibilityObjectWrapper accessibilityIsShowingValidationMessage]):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isShowingValidationMessage):
        * html/HTMLFormControlElement.h:

2017-07-21  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake][Mac] Unreviewed, fix linking WebKitSystemInterface

        After r219560 link_directories() in PlatformXXX.cmake files does not
        affect corresponding targets.

        * PlatformMac.cmake:

2017-07-21  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove the need for the side map of DeprecatedCSSOMValue roots
        https://bugs.webkit.org/show_bug.cgi?id=174713

        Reviewed by Andreas Kling.

        We used to not want to bloat the size of CSSValues with a pointer to the
        owner CSSStyleDeclaration, so, for GC purposes we need kept a mapping of
        them on DOMWrapperWorld that only got set if a wrapper was made. Now that
        we have DeprecatedCSSOMValue, a wrapper for CSSValue that only gets created
        for the bindings, we no longer need the side table, and simply have the
        DeprecatedCSSOMValue maintain a reference to the CSSStyleDeclaration.

        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::wrappers):
        Remove m_deprecatedCSSOMValueRoots and make m_wrappers private with a getter.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue): Deleted.
        Remove custom implementation of getPropertyCSSValue, now that it no longer
        needs to update m_deprecatedCSSOMValueRoots.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::fireFrameClearedWatchpointsForWindow):
        * bindings/js/JSDOMWrapperCache.h:
        (WebCore::getCachedWrapper):
        (WebCore::cacheWrapper):
        (WebCore::uncacheWrapper):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::getOutOfLineCachedWrapper):
        Use wrappers getter rather than direct member variable.

        * bindings/js/JSDeprecatedCSSOMValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::isReachableFromOpaqueRoots):
        Rather than checking the side table for roots, now get the root
        via the reference CSSStyleDeclaration.

        (WebCore::JSDeprecatedCSSOMValueOwner::finalize): Deleted.
        Remove custom finalize now that we don't have to remove ourself
        from m_deprecatedCSSOMValueRoots.

        * css/CSSStyleDeclaration.idl:
        Remove [Custom] from getPropertyCSSValue.

        * css/DeprecatedCSSOMValue.idl:
        Remove [JSCustomFinalize].

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::createDeprecatedCSSOMWrapper):
        * css/CSSImageValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createDeprecatedCSSOMPrimitiveWrapper):
        * css/CSSPrimitiveValue.h:
        * css/CSSStyleDeclaration.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::createDeprecatedCSSOMWrapper):
        * css/CSSValue.h:
        * css/DeprecatedCSSOMCounter.h:
        * css/DeprecatedCSSOMPrimitiveValue.cpp:
        (WebCore::DeprecatedCSSOMPrimitiveValue::getCounterValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getRectValue):
        (WebCore::DeprecatedCSSOMPrimitiveValue::getRGBColorValue):
        * css/DeprecatedCSSOMPrimitiveValue.h:
        (WebCore::DeprecatedCSSOMPrimitiveValue::create):
        (WebCore::DeprecatedCSSOMPrimitiveValue::DeprecatedCSSOMPrimitiveValue):
        * css/DeprecatedCSSOMRGBColor.h:
        * css/DeprecatedCSSOMRect.h:
        * css/DeprecatedCSSOMValue.h:
        (WebCore::DeprecatedCSSOMValue::owner):
        (WebCore::DeprecatedCSSOMValue::DeprecatedCSSOMValue):
        (WebCore::DeprecatedCSSOMComplexValue::create):
        (WebCore::DeprecatedCSSOMComplexValue::DeprecatedCSSOMComplexValue):
        * css/DeprecatedCSSOMValueList.h:
        (WebCore::DeprecatedCSSOMValueList::create):
        (WebCore::DeprecatedCSSOMValueList::DeprecatedCSSOMValueList):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::wrapForDeprecatedCSSOM):
        * css/PropertySetCSSStyleDeclaration.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::getPresentationAttribute):
        Pass owning CSSStyleDeclaration to DeprecatedCSSOMValue and derived classes.

2017-07-21  Andreas Kling  <akling@apple.com>

        Use more references in event dispatch code
        https://bugs.webkit.org/show_bug.cgi?id=174681

        Reviewed by Geoffrey Garen.

        Make EventListener::handleEvent() take a ScriptExecutionContext&, Event&.
        Then make everything build again. Various null checks and assertions
        disappear in the process.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSErrorHandler.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::initializeJSFunction):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::eventHandlerAttribute):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSLazyEventListener.h:
        * dom/EventListener.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * html/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::listenerEntriesFromListenerInfo):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorIndexedDBAgent.cpp:
        * platform/Widget.h:
        (WebCore::Widget::handleEvent):
        * platform/cocoa/WebPlaybackSessionModelMediaElement.h:
        * platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
        (WebCore::WebPlaybackSessionModelMediaElement::handleEvent):
        * platform/cocoa/WebVideoFullscreenModelVideoElement.h:
        * platform/cocoa/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::handleEvent):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefTargetEventListener::handleEvent):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent):
        (WebCore::SVGSMILElement::handleConditionEvent):
        * svg/animation/SVGSMILElement.h:

2017-07-21  Zalan Bujtas  <zalan@apple.com>

        iBooks: Overlapping/missing content at beginning/end of paragraph.
        https://bugs.webkit.org/show_bug.cgi?id=174717
        <rdar://problem/33117912>

        Reviewed by Simon Fraser.

        By definiton simple and normal line layout should always produce the exact same lineboxes. It enables us not
        to force repaint while swapping between these 2 line layouts.
        However in certain cases (font size pixel rounding as an example) they don't agree on how much content fits the line and
        that could result in missing/overlapping content due to the lack of repaint. 

        Unable to test.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::ensureLineBoxes):

2017-07-21  Chris Dumez  <cdumez@apple.com>

        Drop make_dom_exceptions.pl script that we only have DOMException
        https://bugs.webkit.org/show_bug.cgi?id=174699

        Reviewed by Darin Adler.

        Drop make_dom_exceptions.pl script that we only have DOMException.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreMacros.cmake:
        * bindings/js/JSDOMExceptionHandling.cpp:
        * css/FontFaceSet.cpp:
        * dom/DOMAllInOne.cpp:
        * dom/DOMExceptions.in: Removed.
        * dom/ExceptionCodeDescription.cpp: Added.
        (WebCore::ExceptionCodeDescription::ExceptionCodeDescription):
        * dom/ExceptionCodeDescription.h: Added.
        * dom/make_dom_exceptions.pl: Removed.
        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::subtype):

2017-07-21  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] An image should not invoke many system calls before confirming its format is supported
        https://bugs.webkit.org/show_bug.cgi?id=174692

        Reviewed by Tim Horton.

        We should be careful when invoking system calls before confirming that the
        image type is available and it is one of the whitelist formats. Otherwise
        we will be calling the parsers of the unsupported formats.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setImageDataBuffer): The check isAllowedImageUTI()
        is now done in ImageDecoder::encodedDataStatus() which will return Error
        if there is an error in the data or "isAllowedImageUTI() returns false."

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::dataChanged): Avoid calling canUseAsyncDecodingForLargeImages()
        before confirming the image type is available and it's supported by WebKit.
        canUseAsyncDecodingForLargeImages() tries to cache the first frame of the
        image to know its size. Asking the ImageFrameCache to destroy its decoded
        frames is not needed unless ImageFrameCache::decodedSize() is not zero.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoder::encodedDataStatus): Avoid calling CGImageSourceGetStatus()
        before knowing the UTI of the image. When knowing it, we call CGImageSourceGetStatus()
        and if it returns kCGImageStatusIncomplete or kCGImageStatusComplete, we
        check whether isAllowedImageUTI() or not. If isAllowedImageUTI() returns
        false, return Error which will make the CachedImage cancel loading the 
        rest of the image.

2017-07-21  Jeremy Jones  <jeremyj@apple.com>

        AudioTrackPrivateMediaStreamCocoa shouldn't set AudioSession::setPreferredBufferSize
        https://bugs.webkit.org/show_bug.cgi?id=174707
        rdar://problem/33446809

        Reviewed by Eric Carlson.

        Manually tested for audio side effects.

        AudioChannel::copyFrom fails when AudioChannel lengths don't match.

        This happens because PlatformMediaSessionManager::updateSessionState() owns and sets
        AudioSession::setPreferredBufferSize().

        However, AudioTrackPrivateMediaStreamCocoa::createAudioUnit, when it creates an input
        audio unit is setting AudioSession::setPreferredBufferSize() directly to its own arbitrary value.

        AudioSession::setPreferredBufferSize() should be managed by the higher level 
        PlatformMediaSessionManager, and not modified by audio unit creation, in order to keep harmony
        within the audio pipeline.

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::createAudioUnit):

2017-07-21  Jeremy Jones  <jeremyj@apple.com>

        Noise when AudioChannel lengths don't match.
        https://bugs.webkit.org/show_bug.cgi?id=174706
        rdar://problem/33389856

        Reviewed by Eric Carlson.

        When AudioChannel lengths don't match, copyFrom() returns early leaving uninitialized data in the audio buffer.
        This change zeros out the data, so there isn't objectionable noise sent to the speaker.

        * platform/audio/AudioChannel.cpp:
        (WebCore::AudioChannel::copyFrom):

2017-07-21  Sam Weinig  <sam@webkit.org>

        [WebIDL] Make a few parameters non-nullable in inspector IDL files
        https://bugs.webkit.org/show_bug.cgi?id=174719

        Reviewed by Joseph Pecoraro.

        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::databaseId):
        (WebCore::CommandLineAPIHost::storageId):
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIHost.idl:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::storageId):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::databaseId):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showContextMenu):
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Remove nullability from arguments that should never be null.

2017-07-21  Brady Eidson  <beidson@apple.com>

        Get rid of WebCore IconDatabase code.
        https://bugs.webkit.org/show_bug.cgi?id=174700

        Reviewed by Tim Horton.

        No new tests (No behavior change).
        
        Tons of red.
        Very little green.
        No further explanation.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::reset):
        (WebCore::HistoryItem::setURLString):
        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::startIconLoading):
        (WebCore::DocumentLoader::iconLoadDecisionAvailable): Deleted.
        (WebCore::iconLoadDecisionCallback): Deleted.
        (WebCore::DocumentLoader::getIconLoadDecisionForIconURL): Deleted.
        (WebCore::DocumentLoader::continueIconLoadWithDecision): Deleted.
        (WebCore::iconDataCallback): Deleted.
        (WebCore::DocumentLoader::getIconDataForIconURL): Deleted.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::linkIcons):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::stop):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::subframeLoader):
        (WebCore::FrameLoader::icon): Deleted.
        * loader/FrameLoaderClient.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/icon/IconController.cpp: Removed.
        * loader/icon/IconController.h: Removed.
        * loader/icon/IconDatabase.cpp: Removed.
        * loader/icon/IconDatabase.h: Removed.
        * loader/icon/IconDatabaseBase.cpp: Removed.
        * loader/icon/IconDatabaseBase.h: Removed.
        * loader/icon/IconDatabaseClient.h: Removed.
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::IconLoader):
        (WebCore::IconLoader::startLoading):
        (WebCore::IconLoader::notifyFinished):
        * loader/icon/IconLoader.h:
        * loader/icon/IconRecord.cpp: Removed.
        * loader/icon/IconRecord.h: Removed.
        * loader/icon/PageURLRecord.cpp: Removed.
        * loader/icon/PageURLRecord.h: Removed.
        * testing/Internals.cpp:
        (WebCore::Internals::shortcutIconURLs):

2017-07-21  Chris Dumez  <cdumez@apple.com>

        Rename DOMCoreException class to DOMException
        https://bugs.webkit.org/show_bug.cgi?id=174698

        Reviewed by Darin Adler.

        Rename DOMCoreException class to DOMException to match its Web-exposed name.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/quota/StorageErrorCallback.cpp:
        (WebCore::StorageErrorCallback::CallbackTask::CallbackTask):
        * Modules/quota/StorageErrorCallback.h:
        * Modules/quota/StorageErrorCallback.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::retrieveErrorMessage):
        (WebCore::createDOMException):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateOverloadDispatcher):
        * css/FontFaceSet.cpp:
        * css/FontFaceSet.h:
        * dom/DOMAllInOne.cpp:
        * dom/DOMException.cpp: Renamed from Source/WebCore/dom/DOMCoreException.cpp.
        (WebCore::DOMException::create):
        (WebCore::DOMException::DOMException):
        (WebCore::DOMException::initializeDescription):
        * dom/DOMException.h: Renamed from Source/WebCore/dom/DOMCoreException.h.
        (WebCore::DOMException::create):
        (WebCore::DOMException::DOMException):
        * dom/DOMException.idl: Renamed from Source/WebCore/dom/DOMCoreException.idl.
        * dom/DOMExceptions.in:
        * dom/make_dom_exceptions.pl:
        (generateImplementation):

2017-07-21  Sam Weinig  <sam@webkit.org>

        Follow up to https://bugs.webkit.org/show_bug.cgi?id=174659.

        * inspector/InspectorFrontendHost.idl:
        Remove unnecessary JSGenerateToJSObject noticed in review.

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Drop legacy SVGException type
        https://bugs.webkit.org/show_bug.cgi?id=174695

        Reviewed by Darin Adler.

        Drop legacy SVGException type and use DOMException instead, as per the latest
        SVG specification. Both Chrome and Firefox no longer expose the SVGException
        type.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * dom/DOMExceptions.in:
        * svg/SVGAllInOne.cpp:
        * svg/SVGCircleElement.cpp:
        * svg/SVGException.cpp: Removed.
        * svg/SVGException.h: Removed.
        * svg/SVGException.idl: Removed.
        * svg/SVGGraphicsElement.idl:
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGMatrixValue.h:
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getItem):
        (WebCore::SVGPathSegList::replaceItem):
        (WebCore::SVGPathSegList::removeItem):
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegList.idl:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        * svg/properties/SVGListProperty.h:

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Hook up ITP quirks to the needsSiteSpecificQuirks setting
        https://bugs.webkit.org/show_bug.cgi?id=174691

        Reviewed by Darin Adler.

        Hook up ITP quirks to the needsSiteSpecificQuirks setting to make it easier for
        Web-developers to test their fixes.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::shouldEnableSiteSpecificQuirks):
        (WebCore::areDomainsAssociated):
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::resourceNeedsSSOQuirk):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):

2017-07-20  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219700.

        This revision caused consistent timouts on iOS.

        Reverted changeset:

        "Turn tests at media/modern-media-controls/start-support back
        on"
        https://bugs.webkit.org/show_bug.cgi?id=174683
        http://trac.webkit.org/changeset/219700

2017-07-20  David Quesada  <david_quesada@apple.com>

        Add SPI to notify WKNavigationDelegate about client redirects
        https://bugs.webkit.org/show_bug.cgi?id=174680
        rdar://problem/33184886

        Reviewed by Brady Eidson.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::performClientRedirect):
        * loader/FrameLoader.h:
        Add a convenience method for NavigationScheduler that handles a FrameLoadRequest
        as a client redirect. Currently this means loading the request and informing the
        client about it.

        * loader/FrameLoaderClient.h:
        Add FrameLoaderClient::dispatchDidPerformClientRedirect() to inform the client when
        a client redirect occurs.

        * loader/NavigationScheduler.cpp:
        Removed ScheduledURLNavigation::fire(). This class was never instantiated directly,
        and all subclasses override fire(), so this was unused code.
        For ScheduledRedirects and ScheduledLocationChange, use FrameLoader's new method to
        load the request as a client redirect.

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Drop legacy XPathException type
        https://bugs.webkit.org/show_bug.cgi?id=174679

        Reviewed by Sam Weinig.

        Drop legacy XPathException type and use DOMException instead. Both Firefox and Chrome
        no longer expose XPathException.

        Test: fast/dom/DOMException/XPathException-obsolete.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * dom/DOMExceptions.in:
        * xml/XPathException.cpp: Removed.
        * xml/XPathException.h: Removed.
        * xml/XPathException.idl: Removed.
        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::parseStatement):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::convertTo):
        (WebCore::XPathResult::numberValue):
        (WebCore::XPathResult::stringValue):
        (WebCore::XPathResult::booleanValue):
        (WebCore::XPathResult::singleNodeValue):
        (WebCore::XPathResult::snapshotLength):
        (WebCore::XPathResult::iterateNext):
        (WebCore::XPathResult::snapshotItem):

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r219706.

        Broke iOS build

        Reverted changeset:

        "Drop legacy XPathException type"
        https://bugs.webkit.org/show_bug.cgi?id=174679
        http://trac.webkit.org/changeset/219706

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Drop legacy XPathException type
        https://bugs.webkit.org/show_bug.cgi?id=174679

        Reviewed by Sam Weinig.

        Drop legacy XPathException type and use DOMException instead. Both Firefox and Chrome
        no longer expose XPathException.

        Test: fast/dom/DOMException/XPathException-obsolete.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * dom/DOMExceptions.in:
        * xml/XPathException.cpp: Removed.
        * xml/XPathException.h: Removed.
        * xml/XPathException.idl: Removed.
        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::parseStatement):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::convertTo):
        (WebCore::XPathResult::numberValue):
        (WebCore::XPathResult::stringValue):
        (WebCore::XPathResult::booleanValue):
        (WebCore::XPathResult::singleNodeValue):
        (WebCore::XPathResult::snapshotLength):
        (WebCore::XPathResult::iterateNext):
        (WebCore::XPathResult::snapshotItem):

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Regression(ITP): May get frequently logged out of wsj.com
        https://bugs.webkit.org/show_bug.cgi?id=174661
        <rdar://problem/32343256>

        Reviewed by Geoffrey Garen.

        Add the concept of associated domains in the ResourceLoadObserver. We
        previously ignore loads to and from the same domains. We now do the same
        if the to and from domains are associated (i.e. owned by the same entity).

        For now, only add domains owned by Dow Jones & Company, Inc. to the list,
        to address login issues on wsj.com.

        No new tests, verified manually on wsj.com.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::areDomainsAssociated):
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable
        https://bugs.webkit.org/show_bug.cgi?id=174660

        Reviewed by Geoffrey Garen.

        Replace calls to Vector::resize() with calls to more efficient shrink() / grow() when applicable.
        This essentially replaces a branch to figure out if the new size is less or greater than the
        current size by an assertion.

        * Modules/gamepad/Gamepad.cpp:
        (WebCore::Gamepad::Gamepad):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::addReaction):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::skipBuffer):
        * Modules/websockets/WebSocketDeflater.cpp:
        (WebCore::WebSocketDeflater::finish):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeSelector):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::append):
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::gcryptDecrypt):
        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
        (WebCore::gcryptDerive):
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect):
        * platform/gamepad/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::deviceAdded):
        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::setSize):
        * platform/graphics/WOFFFileFormat.cpp:
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
        (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues):
        (WebCore::InbandTextTrackPrivateAVF::readNativeSampleBuffer):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::readNativeSampleBuffer):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::cfData):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::readChunks):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::frameBufferAtIndex):
        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):
        * platform/text/DecodeEscapeSequences.h:
        (WebCore::URLEscapeSequence::decodeRun):
        * platform/text/SuffixTree.h:
        (WebCore::SuffixTree::Node::Node):
        * rendering/Grid.cpp:
        (WebCore::Grid::setNeedsItemsPlacement):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::invalidateCachedColumns):

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Regression(ITP): Can no longer log in on abc.go.com
        https://bugs.webkit.org/show_bug.cgi?id=174533
        <rdar://problem/33325881>

        Reviewed by Geoffrey Garen.

        Add quirk for sp.auth.adobe.com which is used for SSO by web sites such as
        abc.go.com. This would otherwise cause adobe.com to be identified as a
        tracker and log in on abc.go.com would break.

        No new tests, tested manually on abc.go.com.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::resourceNeedsSSOQuirk):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):

2017-07-20  Antoine Quint  <graouts@apple.com>

        Turn tests at media/modern-media-controls/start-support back on
        https://bugs.webkit.org/show_bug.cgi?id=174683

        Reviewed by Dean Jackson.

        Turning those tests back on revealed a small bug that is unlikely to really affect content
        on the Web. In the case where the size of the video is known right away, without the need
        for loading its metadata, as is the case in the start-support-click-to-start.html test with
        a local media resource, all queued layouts are flushed at once and we may call the layout()
        method of the left ButtonsContainer which originally is set to contain the play/pause button,
        which would remove the play/pause button from the center of the media. So before we potentially
        set the play/pause button as the central button, we first assign the default button set for
        the two ButtonsContainer instances and only add the play/pause button when we're not showing
        the prominent play/pause button.

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout):
        (InlineMediaControls.prototype._leftContainerButtons):

2017-07-20  Chris Dumez  <cdumez@apple.com>

        Drop legacy FileException type
        https://bugs.webkit.org/show_bug.cgi?id=174676

        Reviewed by Alex Christensen.

        Drop legacy FileException type and use DOMException instead, as per the latest
        File API specification:
        - https://w3c.github.io/FileAPI/#ErrorAndException

        Both Firefox and Chrome no longer expose FileException.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        * dom/DOMExceptions.in:
        * fileapi/FileException.cpp: Removed.
        * fileapi/FileException.h: Removed.
        * fileapi/FileException.idl: Removed.
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::FileReaderLoader):
        (WebCore::FileReaderLoader::failed):
        * fileapi/FileReaderLoader.h:
        (WebCore::FileReaderLoader::errorCode):
        * fileapi/FileReaderSync.cpp:
        (WebCore::errorCodeToExceptionCode):
        (WebCore::FileReaderSync::startLoading):

2017-07-20  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for InspectorFrontendHost
        https://bugs.webkit.org/show_bug.cgi?id=174659

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSInspectorFrontendHostCustom.cpp: Removed.
        Remove JSInspectorFrontendHostCustom.cpp.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::populateContextMenu):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Re-implement showContextMenu by using an IDL defined ContextMenuItem dictionary
        and converting from that to a WebCore::ContextMenu in the implementation.

2017-07-20  Charlie Turner  <cturner@igalia.com>

        [GTK] Layout Test http/tests/media/hls/hls-progress.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=141469

        Reviewed by Xabier Rodriguez-Calvar.

        A work-around for getting progress information in a timely manner from
        live pipelines. We cannot rely on getting BUFFERING messages within
        the stalled time window (3s), so we have to poll for progress
        information somehow.

        Makes the following pass reliably
         http/tests/media/hls/hls-audio-tracks-has-audio.html passed unexpectedly
         http/tests/media/hls/hls-audio-tracks.html passed unexpectedly
         http/tests/media/hls/hls-progress.html passed unexpectedly

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::findHLSQueue):
        (WebCore::isHLSProgressing):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):

2017-07-20  Andreas Kling  <akling@apple.com>

        Minor Node->Element type tightening fixes
        https://bugs.webkit.org/show_bug.cgi?id=174651

        Reviewed by Sam Weinig.

        Tighten up some Node* into Element* or even better, Element&.

        * dom/Document.cpp:
        (WebCore::acceptsEditingFocus): Take a const Element&.
        (WebCore::Document::setFocusedElement):
        * editing/Editor.cpp:
        (WebCore::Editor::findEventTargetFrom): Return an Element*.
        (WebCore::Editor::findEventTargetFromSelection): Ditto.
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::pasteAsFragment):
        (WebCore::Editor::dispatchCPPEvent):
        * editing/Editor.h:
        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor):

2017-07-20  Brady Eidson  <beidson@apple.com>

        WKHTTPCookieStore API tests fail on High Sierra.
        <rdar://problem/33410271> and https://bugs.webkit.org/show_bug.cgi?id=174666

        Reviewed by Andy Estes.

        Covered by existing API tests.

        In r219567 I'd moved cookie storage observation off of NSHTTPCookieStorage and NSNotificationCenter
        to CFHTTPCookieStorage observation callbacks.
        
        This is because notifications were only sent for the default [NSHTTPCookieStorage sharedHTTPCookieStorage]
        and not any of the other ones we keep in flight.
        
        Unfortunately that SPI has been disabled in High Sierra.
        Fortunately we found a way we can get non-shared NSHTTPCookieStorages to send notifications that works everywhere.
        
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/cocoa/CookieStorageObserver.mm:
        (-[WebCookieObserverAdapter initWithObserver:]):
        (-[WebCookieObserverAdapter cookiesChangedNotificationHandler:]):
        (WebCore::CookieStorageObserver::create):
        (WebCore::CookieStorageObserver::CookieStorageObserver):
        (WebCore::CookieStorageObserver::~CookieStorageObserver):
        (WebCore::CookieStorageObserver::startObserving): Use a trick to call some SPI on non-shared NSHTTPCookieStorages
          to get them to send notifications.
        (WebCore::CookieStorageObserver::stopObserving):
        (WebCore::cookiesChanged): Deleted.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::cookieStorageObserver):

2017-07-20  Miguel Gomez  <magomez@igalia.com>

        [GStreamer] Some layout tests issue "g_mutex_clear() called on uninitialised or locked mutex" and flaky crash in ~MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=173952

        Reviewed by Carlos Garcia Campos.

        Adjust MediaPlayerPrivateGStreamerBase to avoid concurrence problems with the GStreamer thread when
        destroying the object.

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::cancelRepaint):

2017-07-19  Zan Dobersek  <zdobersek@igalia.com>

        [EME] Push CDMInstance, CDMPrivate and associated types into the Platform layer
        https://bugs.webkit.org/show_bug.cgi?id=174496

        Reviewed by Xabier Rodriguez-Calvar.

        Move the CDMInstance and CDMPrivate interfaces into the platform layer, enabling
        implementations of specific key systems at that level, as well as integration with
        the MediaPlayerPrivate stack without any layering violations.

        While the platform layer still uses the WebCore namespace, the two interface files
        have now been moved under the platform/encryptedmedia/ directory and out of the
        Modules/encryptedmedia/ directory where the Web-facing API implementation resides.

        The two interfaces integrated closely with the Web-facing enumerations and
        dictionaries: MediaKeyMessageType, MediaKeySessionType, MediaKeyStatus,
        MediaKeySystemConfiguration, MediaKeySystemCapability, MediaKeysRequirement
        and MediaKeysRestrictions. Definitions of these types are also moved to the
        platform layer without any changes (apart from renaming), and the previous
        types now alias against the types now located in the platform layer.

        No new tests -- no change in behavior.

        * CMakeLists.txt:
        * Modules/encryptedmedia/CDM.cpp:
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/MediaKeyMessageType.h:
        * Modules/encryptedmedia/MediaKeySessionType.h:
        * Modules/encryptedmedia/MediaKeyStatus.h:
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        * Modules/encryptedmedia/MediaKeySystemAccess.h:
        * Modules/encryptedmedia/MediaKeySystemConfiguration.h:
        * Modules/encryptedmedia/MediaKeySystemMediaCapability.h:
        * Modules/encryptedmedia/MediaKeysRequirement.h:
        * Modules/encryptedmedia/MediaKeysRestrictions.h:
        * platform/encryptedmedia/CDMInstance.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMInstance.h.
        * platform/encryptedmedia/CDMKeyStatus.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyStatus.h.
        * platform/encryptedmedia/CDMKeySystemConfiguration.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySystemConfiguration.h.
        * platform/encryptedmedia/CDMMediaCapability.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySystemMediaCapability.h.
        * platform/encryptedmedia/CDMMessageType.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageType.h.
        * platform/encryptedmedia/CDMPrivate.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivate.h.
        * platform/encryptedmedia/CDMRequirement.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeysRequirement.h.
        * platform/encryptedmedia/CDMRestrictions.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeysRestrictions.h.
        * platform/encryptedmedia/CDMSessionType.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySessionType.h.

2017-07-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r219674.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        Remove the AsyncScrollingCoordinator.h header include that was added by accident.

2017-07-19  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Clean up Web Crypto build targets
        https://bugs.webkit.org/show_bug.cgi?id=174253

        Reviewed by Alex Christensen.

        Gather the common WebCrypto source files in CMakeLists.txt, including them
        in the build unconditionally and instead relying on ENABLE_SUBTLE_CRYPTO
        build guards to exclude the code from compilation if the feature is disabled.

        PlatformGTK.cmake, PlatformMac.cmake and PlatformWPE.cmake can then remove
        duplicated build targets. PlatformMac.cmake still lists all the Mac-specific
        Web Crypto build targets.

        PlatformGTK.cmake and PlatformWPE.cmake now include GCrypt.cmake if the
        USE_GCRYPT variable is enabled. Both ports at the moment enable that variable
        though as they by default leverage a libgcrypt-based CrpytoDigest implementation
        in the PAL library.

        The new GCrypt.cmake file adds the libgcrypt-specific Web Crypto build targets to
        the build and also sets up libgcrypt include directiories and libraries.

        No new tests -- no change in behavior.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * platform/GCrypt.cmake: Added.

2017-07-19  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for CommandLineAPIHost
        https://bugs.webkit.org/show_bug.cgi?id=174642

        Reviewed by Joseph Pecoraro.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCommandLineAPIHostCustom.cpp: Removed.
        Remove JSCommandLineAPIHostCustom.cpp.

        * bindings/js/JSDOMConvertObject.h:
        (WebCore::JSConverter<IDLObject>::convert):
        Add missing JSConverter specialization for IDLObject.

        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspect):
        (WebCore::listenerEntriesFromListenerInfo):
        (WebCore::CommandLineAPIHost::inspectedObject):
        (WebCore::CommandLineAPIHost::databaseId):
        (WebCore::CommandLineAPIHost::storageId):
        (WebCore::CommandLineAPIHost::inspectImpl): Deleted.
        (WebCore::CommandLineAPIHost::getEventListenersImpl): Deleted.
        (WebCore::CommandLineAPIHost::databaseIdImpl): Deleted.
        (WebCore::CommandLineAPIHost::storageIdImpl): Deleted.
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIHost.idl:
        Replace custom bindings with modern bindings affordances: dictionaries, records and sequences.

2017-07-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed CoordGraphics build fix.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateNodeViewportConstraints):
        This should be defined for the ScrollingCoordinatorCoordinatedGraphics class.
        Also fix the setFixedToViewport() call, fishing out the GraphicsLayer object from
        the ScrollingStateNode's LayerRepresentation.
        (WebCore::AsyncScrollingCoordinator::updateNodeViewportConstraints): Deleted.

2017-07-19  Chris Dumez  <cdumez@apple.com>

        Drop SQLException type
        https://bugs.webkit.org/show_bug.cgi?id=174665

        Reviewed by Sam Weinig.

        Drop SQLException type. We never throw such exception. Also, Firefox
        and Chrome no longer expose this type.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/webdatabase/SQLException.cpp: Removed.
        * Modules/webdatabase/SQLException.h: Removed.
        * Modules/webdatabase/SQLException.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * dom/DOMExceptions.in:

2017-07-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, tweak a comment above TemporarySelectionOptionIgnoreSelectionChanges in Editor.cpp.

        The comment references the UI process, but it describes an entity in WebCore. This should have been generalized
        to instead refer to the client layer in general (i.e. WebKit1 or WebKit2).

        * editing/Editor.h:

2017-07-19  Simon Fraser  <simon.fraser@apple.com>

        getBoundingClientRects not updated for programmatic scrolls
        https://bugs.webkit.org/show_bug.cgi?id=174538
        rdar://problem/33049012

        Reviewed by Tim Horton.

        Baidu.com has two event handlers on its <input>, and both query the input location with getBoundingClientRect()
        and the current pageYOffset (via jQuery), then try to scroll the input to the top of the screen. The bug is that
        programmatic scrolls did not immediately update the layout viewport rect, so the second call to
        getBoundingClientRect() would return stale coordinates, triggering an extra scroll.

        To fix this, undo the fix for r219320 which tried to keep getBoundingClientRect() current during unstable scroll
        updates by adding a shadow layout viewport rect. Instead, almost always update the layout viewport rect on
        FrameView, even during unstable visible rect updates, but not if content insets are being changed interactively,
        since changing viewport heights cause problems with bottom-fixed elements. Also, we need to compute a new layout
        viewport rect in FrameView::updateLayoutViewport() for programmatic scrolls.

        However, always updating the layout viewport triggered issues with the scrolling tree. The scrolling state tree
        fossilizes layer positions relative to a specific viewport rect, and that relationship has to be maintained.
        There are code paths that recompute fixed/sticky viewport constraints when the layout viewport has changed but
        we haven't done layout or recomputed layer positions (e.g. updating viewport-constrained layers via
        updateScrollCoordinatedLayersAfterFlush()) and in these cases using a new layout viewport for those computations
        results in an inconsistent scrolling tree.

        Fix this by not updating scrolling constraints every time we have to re-register scrolling nodes.
        updateScrollCoordinatedLayersAfterFlush() only needs to update the layer on the scrolling node (to handle
        tiled/non-tiled switches), so make updateScrollCoordinatedLayer() a little more fine-grained, and only update
        constraints when we've just computed layer geometry. This allows for different scrolling nodes to have
        constraints computed at different times, with different layout viewports, which happens.

        Two additional fixes were required to make bottom-fixed bars behave correctly.

        First, FrameView::computeLayoutViewportOrigin() had a bug where rounding of half-pixel values would cause it to
        fall into the if (visualViewport.height() > layoutViewport.height()) clause, but then fail to clamp for
        rubber-banding.
        
        Second, the FrameView::unscaledMaximumScrollPosition() was wrong after zooming on iOS, since it uses visibleSize()
        which is affected by page scale on iOS only (and the function wants scale-independent values). Fix with a hack that
        should be cleaned up via webkit.org/b/174648.

        Tested by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::computeUpdatedLayoutViewportRect):
        (WebCore::FrameView::computeLayoutViewportOrigin):
        (WebCore::FrameView::setLayoutViewportOverrideRect):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::unscaledMaximumScrollPosition):
        (WebCore::FrameView::documentToClientOffset):
        (WebCore::FrameView::setUnstableLayoutViewportRect): Deleted.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::reconcileViewportConstrainedLayerPositions):
        (WebCore::AsyncScrollingCoordinator::updateNodeLayer):
        (WebCore::AsyncScrollingCoordinator::updateNodeViewportConstraints):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::reconcileScrollingState):
        (WebCore::ScrollingCoordinator::updateNodeLayer):
        (WebCore::ScrollingCoordinator::updateNodeViewportConstraints):
        (WebCore::ScrollingCoordinator::updateViewportConstrainedNode): Deleted.
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        (WebCore::ScrollingStateStickyNode::reconcileLayerPositionForViewportRect):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayersAfterFlush):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        * rendering/RenderLayerCompositor.h:

2017-07-19  Megan Gardner  <megan_gardner@apple.com>

        Don't write file URLs to iOS Pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=174647
        <rdar://problem/33199730>

        Reviewed by Wenson Hsieh.

        Tests updated to reflect the changes. We are no longer vending file URLs in Drag & Drop and Copy/Paste.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2017-07-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
        https://bugs.webkit.org/show_bug.cgi?id=174406

        Reviewed by Simon Fraser.
        <rdar://problem/10139227>

        Reviewed by NOBODY.

        When the minimumFontSize API preference is set, we will increase the font size without increasing
        the line height. If the content specifies line-height as an absolute value, there can be two
        unfortunate results:

        - Adjacent lines in a paragraph can overlap
        - If the paragraph (or containin block or whatever) uses overflow: hidden, the first and last lines
        can be cut off and potentially indecipherable.

        Instead, we should use the minimum font size preference as a signal that we should increase the
        line-height as well as the font-size. Eventually, we will want to increase it by an amount
        proportional to the increase in font-size (which can be due to minimumFontSize, minimumLogicalFontSize,
        text autosizing, etc.). However, because minimumLogicalFontSize is on by default, this would cause
        a behavior change on many webpages which use small text, so such a change would be too risky right now.
        Instead, we can pretend that minimumFontSize is the only cause that text increases, and use this as the
        only signal to boost the corresponding line-height.

        Tests: fast/text/line-height-minimumFontSize-text-zoom.html
               fast/text/line-height-minimumFontSize-visual.html
               fast/text/line-height-minimumFontSize-zoom.html
               fast/text/line-height-minimumFontSize.html
               fast/text/line-height-minimumFontSize-autosize.html

        * css/StyleBuilderCustom.h:
        (WebCore::computeBaseSpecifiedFontSize):
        (WebCore::computeLineHeightMultiplierDueToFontSize):
        (WebCore::StyleBuilderCustom::applyValueLineHeight):
        (WebCore::StyleBuilderCustom::applyValueFill):
        (WebCore::StyleBuilderCustom::applyValueStroke):
        (WebCore::StyleBuilderCustom::applyValueContent):
        * rendering/TextAutoSizing.cpp:

2017-07-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
        https://bugs.webkit.org/show_bug.cgi?id=174406
        <rdar://problem/10139227>

        Reviewed by Simon Fraser.

        When the minimumFontSize API preference is set, we will increase the font size without increasing
        the line height. If the content specifies line-height as an absolute value, there can be two
        unfortunate results:

        - Adjacent lines in a paragraph can overlap
        - If the paragraph (or containin block or whatever) uses overflow: hidden, the first and last lines
        can be cut off and potentially indecipherable.

        Instead, we should use the minimum font size preference as a signal that we should increase the
        line-height as well as the font-size. Eventually, we will want to increase it by an amount
        proportional to the increase in font-size (which can be due to minimumFontSize, minimumLogicalFontSize,
        text autosizing, etc.). However, because minimumLogicalFontSize is on by default, this would cause
        a behavior change on many webpages which use small text, so such a change would be too risky right now.
        Instead, we can pretend that minimumFontSize is the only cause that text increases, and use this as the
        only signal to boost the corresponding line-height.

        Tests: fast/text/line-height-minimumFontSize-text-zoom.html
               fast/text/line-height-minimumFontSize-visual.html
               fast/text/line-height-minimumFontSize-zoom.html
               fast/text/line-height-minimumFontSize.html
               fast/text/line-height-minimumFontSize-autosize.html

        * css/StyleBuilderCustom.h:
        (WebCore::computeBaseSpecifiedFontSize):
        (WebCore::computeLineHeightMultiplierDueToFontSize):
        (WebCore::StyleBuilderCustom::applyValueLineHeight):
        (WebCore::StyleBuilderCustom::applyValueFill):
        (WebCore::StyleBuilderCustom::applyValueStroke):
        (WebCore::StyleBuilderCustom::applyValueContent):
        * rendering/TextAutoSizing.cpp:

2017-07-19  Chris Dumez  <cdumez@apple.com>

        DOMException should not have its own toString()
        https://bugs.webkit.org/show_bug.cgi?id=174630

        Reviewed by Sam Weinig.

        DOMException should not have its own toString() and should use the one from Error.prototype.toString()
        instead:
        - https://heycam.github.io/webidl/#idl-DOMException

        No new tests, rebaselined existing tests.

        * dom/DOMCoreException.idl:

2017-07-19  Antoine Quint  <graouts@apple.com>

        [iOS] REGRESSION: Scrubbing media using built-in controls does not pause media
        https://bugs.webkit.org/show_bug.cgi?id=174650
        <rdar://problem/33401877>

        Reviewed by Dean Jackson.

        We would only pause when scrubbing on macOS because we only listened to "mousedown" events on the
        scrubber's backing <input> element to identify that the user had started interacting with the
        scrubber.

        Implementing the same technique on iOS required a little more work than just listening to "touchstart"
        events on the same element. On top of that, we needed to make sure that we would only respond to
        "touchstart" events on the slider's thumb, and not on the track, since only on macOS should the user
        be able to click anywhere on the track to scrub. So we turn off pointer-events for the <input> on iOS
        only, and turn them back on specifically for the thumb.

        There is also some finessing when dealing with touch events where we need to track the identifier of
        the touch that started the user interaction. So we keep track of it in an ivar and wait until we get
        a "touchend" event where the changedTouches list contains a touch with that same identifier to ensure
        the same touch that initiates and ends the scrubbing interaction.

        Finally, we fix another issue that was uncovered while turning back on the ScrubbingSupport tests
        where we would not trash the cached _value ivar when we initiated scrubbing, which was important since
        we would mistakenly use the pre-srubbing value during a scrub.

        * Modules/modern-media-controls/controls/slider.css:
        (.ios .slider > input):
        (.slider > input::-webkit-slider-thumb):
        * Modules/modern-media-controls/controls/slider.js:
        (Slider.prototype.handleEvent):
        (Slider.prototype._handleMousedownEvent):
        (Slider.prototype._interactionEndTarget):
        (Slider.prototype._handleTouchstartEvent):
        (Slider.prototype._valueWillStartChanging):
        (Slider.prototype._valueDidStopChanging):
        (Slider.prototype._handleMouseupEvent):
        (Slider.prototype._handleTouchendEvent):

2017-07-19  Nan Wang  <n_wang@apple.com>

        AX: Web page reloaded when a node is labelling multiple childnodes
        https://bugs.webkit.org/show_bug.cgi?id=174655

        Reviewed by Chris Fleizach.

        When we are asking for the aria-labelledby attribute of a node and its
        sibling is also labelled by the same node, we get into an infinite loop
        in textUnderElement since we only ignore one child. Added checks for 
        siblings to avoid such loop.

        Test: accessibility/mac/aria-labelledby-multiple-child-crash.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement):

2017-07-19  Andy Estes  <aestes@apple.com>

        Use a cast to work around clang's false -Wobjc-literal-conversion warnings
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Dan Bernstein.

        Instead of ignoring -Wobjc-literal-conversion, use a cast to work around rdar://problem/33383354.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2017-07-19  Chris Dumez  <cdumez@apple.com>

        Make cross-origin properties enumerable
        https://bugs.webkit.org/show_bug.cgi?id=174576

        Reviewed by Darin Adler.

        Makes cross-origin properties enumerable on Window and Location objects
        as per:
        - https://github.com/whatwg/html/pull/2777

        This simplifies our code quite a bit.

        No new tests, updated existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::getOwnPropertySlotCommon):
        (WebCore::JSLocation::getOwnPropertyNames):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2017-07-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [EME] Build failure with Clang-3.8 on InitDataRegistry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=174628

        Reviewed by Žan Doberšek.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids): Add an explicit cast to unsigned.

2017-07-19  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219646.

        The test added are failing on all platforms

        Reverted changeset:

        "Setting the minimum font size preference doesn’t affect
        absolute line-height values, so lines overlap"
        https://bugs.webkit.org/show_bug.cgi?id=174406
        http://trac.webkit.org/changeset/219646

2017-07-19  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-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_RANGE_LOOP_ANALYSIS
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * rendering/Grid.cpp:
        (WebCore::Grid::insert):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::printSimpleLineLayoutCoverage):

2017-07-18  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 Mark Lam.

        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.

        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.

        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread):

2017-07-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Setting the minimum font size preference doesn’t affect absolute line-height values, so lines overlap
        https://bugs.webkit.org/show_bug.cgi?id=174406
        <rdar://problem/10139227>

        Reviewed by Simon Fraser.

        When the minimumFontSize API preference is set, we will increase the font size without increasing
        the line height. If the content specifies line-height as an absolute value, there can be two
        unfortunate results:

        - Adjacent lines in a paragraph can overlap
        - If the paragraph (or containin block or whatever) uses overflow: hidden, the first and last lines
        can be cut off and potentially indecipherable.

        Instead, we should use the minimum font size preference as a signal that we should increase the
        line-height as well as the font-size. Eventually, we will want to increase it by an amount
        proportional to the increase in font-size (which can be due to minimumFontSize, minimumLogicalFontSize,
        text autosizing, etc.). However, because minimumLogicalFontSize is on by default, this would cause
        a behavior change on many webpages which use small text, so such a change would be too risky right now.
        Instead, we can pretend that minimumFontSize is the only cause that text increases, and use this as the
        only signal to boost the corresponding line-height.

        Tests: fast/text/line-height-minimumFontSize-text-zoom.html
               fast/text/line-height-minimumFontSize-visual.html
               fast/text/line-height-minimumFontSize-zoom.html
               fast/text/line-height-minimumFontSize.html
               fast/text/line-height-minimumFontSize-autosize.html

        * css/StyleBuilderCustom.h:
        (WebCore::computeBaseSpecifiedFontSize):
        (WebCore::computeLineHeightMultiplierDueToFontSize):
        (WebCore::StyleBuilderCustom::applyValueLineHeight):
        (WebCore::StyleBuilderCustom::applyValueFill):
        (WebCore::StyleBuilderCustom::applyValueStroke):
        (WebCore::StyleBuilderCustom::applyValueContent):
        * rendering/TextAutoSizing.cpp:

2017-07-18  Zalan Bujtas  <zalan@apple.com>

        Media controls are missing content in fullscreen when document has scroll offset.
        https://bugs.webkit.org/show_bug.cgi?id=174644
        <rdar://problem/32415323>

        Reviewed by Simon Fraser.

        If a non-user initiated scrolling (result of resize for example) is processed asynchronously, it might
        leapfrog other, programatic scrollings and trigger unintentional scroll offsets (and turn into unwanted clippings). 
        This patch ensures that both resize and top content inset change are translated into programatic scrolling. 

        Unable to test full screen video.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::topContentInsetDidChange):

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_OBJC_LITERAL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2017-07-18  Ali Juma  <ajuma@chromium.org>

        Align quirky number parsing with other browsers
        https://bugs.webkit.org/show_bug.cgi?id=155874

        Reviewed by Simon Fraser.

        Parse unit-less non-zero values for animation-duration and transition-duration
        as invalid time values in quirks mode.

        Test: fast/css/animation-transition-duration-quirksmode.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeAnimationValue):

2017-07-18  Chris Dumez  <cdumez@apple.com>

        HysteresisActivity cannot be used in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=174643
        <rdar://problem/33086442>

        Reviewed by Tim Horton.

        Port HysteresisActivity to RunLoop::Timer so that it can safely be used in
        the UIProcess as well.

        * platform/HysteresisActivity.h:

2017-07-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Modernize InjectedScriptSource
        https://bugs.webkit.org/show_bug.cgi?id=173890

        Reviewed by Brian Burg.

        Covered by existing tests.

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPIImpl.prototype.copy):
        (CommandLineAPIImpl.prototype._inspect):
        Use RemoteObject, a new parameter.

2017-07-18  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r218910): Crash when password field changes to text field
        https://bugs.webkit.org/show_bug.cgi?id=174560

        Reviewed by Zalan Bujtas.

        The crash was caused by textMarkerDataForFirstPositionInTextControl accessing a nullptr returned by getOrCreate.
        Unfortunately, in order to this fix bug while preserving the exact behavior would require synchronously creating
        a renderer for the editing host when the input type changed since we can't create an accessbility object out of
        a renderer-less node.

        Instead, revert back to pre-r218910 behavior of always using the text control element's axID when notifying
        the value change. While this is inconsistent with the way editing commands report content changes, I've since
        learned that VoiceOver has code to deal with this exact situation.

        Test: accessibility/mac/input-type-change-crash-2.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForFirstPositionInTextControl):

2017-07-18  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Refactoring: replace InspectorCanvasAgent::CanvasEntry with a helper class
        https://bugs.webkit.org/show_bug.cgi?id=174311

        Reviewed by Devin Rousso.

        This patch adds a helper class for tracking canvases and their data. The
        current approach of defining a helper structure in the agent's header is
        awkward to use and maintain, and won't scale well as more canvas instrumentation
        points and data are added.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        New file.

        * inspector/InspectorCanvas.cpp: Added.
        (WebCore::InspectorCanvas::create):
        (WebCore::InspectorCanvas::InspectorCanvas):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        * inspector/InspectorCanvas.h: Added.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::requestNode):
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::resolveCanvasContext):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateCSSCanvas):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::canvasDestroyedTimerFired):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::unbindCanvas):
        (WebCore::InspectorCanvasAgent::assertInspectorCanvas):
        (WebCore::InspectorCanvasAgent::findInspectorCanvas):
        (WebCore::InspectorCanvasAgent::getCanvasEntry): Deleted.
        (WebCore::InspectorCanvasAgent::buildObjectForCanvas): Deleted.
        * inspector/InspectorCanvasAgent.h:

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        Remove unused constructor argument.

2017-07-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Move detail implementation from ResourceHandle to ResourceHandleInternal
        https://bugs.webkit.org/show_bug.cgi?id=174641

        After moving stuff from ResourceHandleManager to ResourceHandle on 
        https://bugs.webkit.org/show_bug.cgi?id=173630, still there're many violation
        remains between ResourceHandle and ResourceHandleInternal classes.
        Many of implementation detail should be move to ResourceHandleInternal
        to improve build speed.

        Reviewed by Alex Christensen.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandleInternal::initialize):
        (WebCore::ResourceHandleInternal::applyAuthentication):
        (WebCore::ResourceHandleInternal::setupPUT):
        (WebCore::ResourceHandleInternal::setupPOST):
        (WebCore::ResourceHandleInternal::setupFormData):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::ResourceHandleInternal::didFinish):
        (WebCore::ResourceHandleInternal::didFail):
        (WebCore::ResourceHandleInternal::calculateWebTimingInformations):
        (WebCore::ResourceHandleInternal::handleLocalReceiveResponse):
        (WebCore::ResourceHandleInternal::willPrepareSendData):
        (WebCore::ResourceHandleInternal::didReceiveHeaderLine):
        (WebCore::ResourceHandleInternal::didReceiveAllHeaders):
        (WebCore::ResourceHandleInternal::didReceiveContentData):
        (WebCore::ResourceHandleInternal::readCallback):
        (WebCore::ResourceHandleInternal::headerCallback):
        (WebCore::ResourceHandleInternal::writeCallback):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandleInternal::dispatchSynchronousJob):
        (WebCore::ResourceHandleInternal::handleDataURL):
        (WebCore::ResourceHandle::initialize): Deleted.
        (WebCore::ResourceHandle::applyAuthentication): Deleted.
        (WebCore::ResourceHandle::setupPUT): Deleted.
        (WebCore::ResourceHandle::setupPOST): Deleted.
        (WebCore::ResourceHandle::setupFormData): Deleted.
        (WebCore::ResourceHandle::didFinish): Deleted.
        (WebCore::ResourceHandle::didFail): Deleted.
        (WebCore::ResourceHandle::calculateWebTimingInformations): Deleted.
        (WebCore::ResourceHandle::handleLocalReceiveResponse): Deleted.
        (WebCore::ResourceHandle::willPrepareSendData): Deleted.
        (WebCore::ResourceHandle::didReceiveHeaderLine): Deleted.
        (WebCore::ResourceHandle::didReceiveAllHeaders): Deleted.
        (WebCore::ResourceHandle::didReceiveContentData): Deleted.
        (WebCore::ResourceHandle::readCallback): Deleted.
        (WebCore::ResourceHandle::headerCallback): Deleted.
        (WebCore::ResourceHandle::writeCallback): Deleted.
        (WebCore::ResourceHandle::dispatchSynchronousJob): Deleted.
        (WebCore::ResourceHandle::handleDataURL): Deleted.

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_NON_LITERAL_NULL_CONVERSION
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2017-07-18  Antoine Quint  <graouts@apple.com>

        [macOS] Mouse pointer does not hide during fullscreen playback
        https://bugs.webkit.org/show_bug.cgi?id=174638
        <rdar://problem/33244399>

        Reviewed by Dean Jackson.

        Test: media/modern-media-controls/css/webkit-cursor-visibility-auto-hide.html

        The user-agent stylesheet sets the "-webkit-cursor-visibility" to "auto-hide" for fullscreen <video>
        elements. Since we reset the page styles, including UA styles, on .media-controls-container, we need
        to explicitly inherit this style property from the page to ensure the mouse pointer automatically
        hides in fullscreen.

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container):

2017-07-18  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings for MockContentFilterSettings
        https://bugs.webkit.org/show_bug.cgi?id=174606

        Reviewed by Andy Estes.

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMockContentFilterSettingsCustom.cpp: Removed.
        Remove JSMockContentFilterSettingsCustom.

        * testing/MockContentFilterSettings.h:
        * testing/MockContentFilterSettings.idl:
        Switch from constants to IDL enums to make the bindings and tests simpler.

2017-07-18  Sam Weinig  <sam@webkit.org>

        [WebIDL] Replace some custom bindings code in JSCSSStyleDeclarationCustom.cpp with named getters/setters
        https://bugs.webkit.org/show_bug.cgi?id=174529

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        Add CSSStyleDeclaration.cpp

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        Move getter / setter / getOwnProperties logic from here to CSSStyleDeclaration.cpp.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlot):
        (GenerateGetOwnPropertySlotByIndex):
        (InstanceOverridesGetOwnPropertySlot):
        (GenerateHeader):
        Remove support for no longer needed [CustomGetOwnPropertySlotAndDescriptor].
        Add support for [PutOnlyForSupportedProperties], which allows named setters to behave
        a bit more like normal setters by allowing the implementation to note which properties
        are supported which in turn, allows the bindings to continue down the normal put path
        for unsupported properties. This is necessary to mimic the behavior of CSSStyleDeclaration
        which is using named setters in place hundreds of additional properties.

        (InstanceOverridesDefineOwnProperty):
        Add [DefaultDefineOwnProperty] to allow disabling defineOwnProperty overriding that comes
        automatically with named setters. We need this for CSSStyleDeclaration since the named
        setter usage modeling real properties, not a dictionary style setter. We may want to 
        revisit this, and add support for DefineOwnProperty here, but this allows us to maintain
        the status quo.

        (GenerateDefineOwnProperty):
        Fix the case when you have a named setter, an indexed getter, but no indexed setter. In that
        case, we would get a compile error, due to the index variable being unused.

        * bindings/scripts/IDLAttributes.json:
        Remove support for no longer needed [CustomGetOwnPropertySlotAndDescriptor], add
        [PutOnlyForSupportedProperties] and [DefaultDefineOwnProperty].

        * css/CSSStyleDeclaration.h:
        * css/CSSStyleDeclaration.cpp: Added.
        (WebCore::CSSStyleDeclaration::namedItem):
        (WebCore::CSSStyleDeclaration::setNamedItem):
        (WebCore::CSSStyleDeclaration::isSupportedPropertyName):
        (WebCore::CSSStyleDeclaration::supportedPropertyNames):
        Use standard getter / setter functions to implement CSS property name getting and setting.
        Convert from Identifier to AtomicString, which are now bridgeable.

        * css/CSSStyleDeclaration.idl:
        Add named getter and setter. Remove [CustomGetOwnPropertyNames], [CustomGetOwnPropertySlotAndDescriptor]
        and [CustomPut], add [DefaultDefineOwnProperty].

        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp: Added.
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h: Added.
        * bindings/scripts/test/TestNamedSetterWithIndexedGetter.idl: Added.
        * bindings/scripts/test/TestNamedSetterWithIndexedGetterAndSetter.idl: Added.
        Add tests for improved behavior when using named setters with variations of indexed getters and setters as well.

2017-07-18  Antoine Quint  <graouts@apple.com>

        [iOS] WebKit media controls are sometimes shown after exiting full screen on vimeo.com
        https://bugs.webkit.org/show_bug.cgi?id=174627
        <rdar://problem/33301005>

        Reviewed by Dean Jackson, provisionally reviewed by Jeremy Jones.

        On iOS 11, both the WebKit media controls and the Vimeo custom controls would appear sometimes when exiting
        from fullscreen when the video was playing and the user would tap the X button, which would pause the video
        as well as exit fullscreen.

        The reason this happens is that the ControlsVisibilitySupport object, which governs whether the WebKit media
        controls should be displayed for a given video, woud listen to "pause" and "webkitfullscreenchange" events
        and determine whether to show the WebKit media controls. We listen to the "pause" event because when media
        pauses, and the video has the "controls" attribute set, we should show the controls and suspend the controls
        auto-hide timer. And we're interested in knowing when we enter and exit fullscreen because we want to override
        the "controls" attribute not being set when we enter fullscreen.

        However, on iOS 11, it appears that the "webkitfullscreenchange" event is not reliably fired as the user enters
        and exits fullscreen, which is tracked by webkit.org/b/174626. So, when the user exits fullscreen, we would be
        informed of the video being paused via a "pause" event, but not of the video exiting fullscreen. And because
        media events are asynchronous, the "pause" event would sometimes be fired before we exited fullscreen, and when
        the _updateControls() would run, we would sometimes determine that we are in fullscreen still and determine
        that the WebKit media controls should be shown.

        Of course, on iOS, the WebKit media controls are not shown and instead we delegate to AVKit to display media controls.
        So we could simply disregard this whole logic in iOS. But we choose to instead use the "webkitpresentationmodechanged"
        when the presentation mode API is supported, as is the case on iOS 11, to determine changes of media fullscreen state.
        This way, should we ever choose to support fullscreen media controls provided by WebKit on iOS, this logic is already
        correct and we write less platform-specific code.

        This, alas, cannot be tested since we can't force the X button to be tapped within the AVKit fullscreen controls.

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.get mediaEvents):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):
        * Modules/modern-media-controls/media/start-support.js:
        (StartSupport.prototype.get mediaEvents):

2017-07-18  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219610.

        This caused an api failure on all platforms for the test
        SnapshotImageLargeAsyncDecoding

        Reverted changeset:

        "Async image decoding for large images should be disabled
        after the first time a tile is painted"
        https://bugs.webkit.org/show_bug.cgi?id=174451
        http://trac.webkit.org/changeset/219610

2017-07-18  Devin Rousso  <drousso@apple.com>

        Add CanvasRenderingContext2D::getTransform
        https://bugs.webkit.org/show_bug.cgi?id=174278

        Reviewed by Dean Jackson.

        Tests: fast/canvas/2d.getTransform.modification.html
               fast/canvas/2d.getTransform.newobject.html
               fast/canvas/2d.setTransform.matrix.html

        * css/DOMMatrixReadOnly.h:
        Make DOMMatrixReadOnly::validateAndFixup public so that values of DOMMatrixInit are still
        usable without having to construct a DOMMatrixReadOnly. This is beneficial in the case that
        an exception is thrown, as the validateAndFixup check can happen without any allocations.

        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getTransform):
        (WebCore::CanvasRenderingContext2D::setTransform):

2017-07-18  Andy Estes  <aestes@apple.com>

        [Xcode] Enable CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
        https://bugs.webkit.org/show_bug.cgi?id=174631

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2017-07-18  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed build fix after r219595

        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::makeNeverDestroyed): Remove duplicate makeNeverDestroyed definition.
        * platform/ios/DragImageIOS.mm:
        (WebCore::cascadeForSystemFont): Return correct FontCascade object.
        (WebCore::createDragImageForLink): Fix compiler error.

2017-07-18  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove AlternativeTextInfo and use Variant to represent alternative text info details
        https://bugs.webkit.org/show_bug.cgi?id=174604

        I inadvertently did not commit some of my local changes.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::startAlternativeTextUITimer):
        (WebCore::AlternativeTextController::stopAlternativeTextUITimer):
        (WebCore::AlternativeTextController::applyPendingCorrection):
        (WebCore::AlternativeTextController::hasPendingCorrection):
        (WebCore::AlternativeTextController::show):
        (WebCore::AlternativeTextController::handleCancelOperation):
        (WebCore::AlternativeTextController::dismiss):
        (WebCore::AlternativeTextController::dismissSoon):
        (WebCore::AlternativeTextController::applyAutocorrectionBeforeTypingIfAppropriate):
        (WebCore::AlternativeTextController::timerFired):
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult):
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord):
        (WebCore::AlternativeTextController::markerDescriptionForAppliedAlternativeText):

2017-07-17  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove AlternativeTextInfo and use Variant to represent alternative text info details
        https://bugs.webkit.org/show_bug.cgi?id=174604

        Reviewed by Darin Adler.

        Remove struct AlternativeTextInfo and represent the alternative text info as instance variables
        using Variant to hold either an autocorrection replacement string or the alternative dictation
        context.

        Not functionality changed. So, no new tests.

        * editing/AlternativeTextController.cpp: Remove header Event.h as it is ultimately included by TextEvent.h.
        (WebCore::AlternativeTextController::show): Update code as needed.
        (WebCore::AlternativeTextController::timerFired): Ditto.
        (WebCore::AlternativeTextController::alternativeTextClient): Substitute nullptr for 0.
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord): Update code as needed.
        (WebCore::AutocorrectionAlternativeDetails::create): Deleted.
        (WebCore::AutocorrectionAlternativeDetails::replacementString): Deleted.
        (WebCore::AutocorrectionAlternativeDetails::AutocorrectionAlternativeDetails): Deleted.
        (WebCore::DictationAlternativeDetails::create): Deleted.
        (WebCore::DictationAlternativeDetails::dictationContext): Deleted.
        (WebCore::DictationAlternativeDetails::DictationAlternativeDetails): Deleted.
        * editing/AlternativeTextController.h: Remove header Range.h and forward declare Range. Include header
        Position.h and wtf/Variant.h. Sort forward declarations.
        (WebCore::AlternativeTextDetails::~AlternativeTextDetails): Deleted.

2017-07-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Async image decoding for large images should be disabled after the first time a tile is painted
        https://bugs.webkit.org/show_bug.cgi?id=174451

        Reviewed by Simon Fraser.

        Flashing because of DOM mutation can be fixed by disabling the asynchronous
        image decoding after the first time a tile was painted.

        We can detect this by consulting the tile repaintCount. If it is zero, then
        it is safe to use asynchronous image decoded. If the tile repaintCount is
        greater than zero, we are not sure if the renderer rectangle has an image
        drawn in it already or not. In this case we have to use the synchronous
        image decoding to avoid causing a flash.

        Tests: fast/images/async-image-background-change.html
               fast/images/async-image-src-change.html
               http/tests/multipart/multipart-async-image.html

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::paintContents):
        * page/PageOverlayController.h:
        * page/linux/ResourceUsageOverlayLinux.cpp:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::paintContents):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::paintContents):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerRepaintCount):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::platformCALayerPaintContents):
        * platform/graphics/ca/TileCoverageMap.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerPaintContents):
        (WebCore::TileGrid::platformCALayerRepaintCount):
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        (WebTiledBackingLayerWin::displayCallback):
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw):
        * rendering/RenderElement.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::imageFromImageElement):
        (WebCore::bitmapImageFromImageElement):
        (WebCore::Internals::imageFrameIndex):
        (WebCore::Internals::setImageFrameDecodingDuration):
        (WebCore::Internals::resetImageAnimation):
        (WebCore::Internals::isImageAnimating):
        (WebCore::Internals::setClearDecoderAfterAsyncFrameRequestForTesting):
        (WebCore::Internals::imageDecodeCount):
        (WebCore::Internals::setLargeImageAsyncDecodingEnabledForTesting):
        * testing/Internals.h:
        * testing/Internals.idl:

2017-07-18  Chris Dumez  <cdumez@apple.com>

        DOMException should have its properties on the prototype
        https://bugs.webkit.org/show_bug.cgi?id=174597

        Reviewed by Alex Christensen.

        DOMException should have its properties on the prototype, as other interfaces:
        - https://heycam.github.io/webidl/#idl-DOMException

        No new tests, rebaselined existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InterfaceRequiresAttributesOnInstance):

2017-07-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Unify ResourceHandleManager into CurlJobManager.
        https://bugs.webkit.org/show_bug.cgi?id=173991

        Use CurlJobManager to make ResourceHandle run in background.
        CurlJobManager::start() now accept callback to manage life cycle
        of the resource easily in a same context.
        Actual management tasks of CurlJobManager is now private class
        in CurlJobManager which is better thread safeness.
        ResourceHandleManager is deleted at all.

        Reviewed by Alex Christensen.

        * platform/Curl.cmake:
        * platform/network/ResourceHandle.h:
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookiesForSession):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::CurlHandle):
        (WebCore::CurlHandle::~CurlHandle):
        (WebCore::CurlHandle::errorDescription):
        (WebCore::CurlHandle::perform):
        (WebCore::CurlHandle::pause):
        (WebCore::CurlHandle::appendRequestHeaders):
        (WebCore::CurlHandle::appendRequestHeader):
        (WebCore::CurlHandle::enableRequestHeaders):
        (WebCore::CurlHandle::fetchCookieList):
        (WebCore::CurlHandle::getEffectiveURL):
        (WebCore::CurlHandle::setPrivateData): Deleted.
        (WebCore::CurlHandle::clearRequestHeaders): Deleted.
        (WebCore::CurlHandle::getCookieList): Deleted.
        (WebCore::CurlHandle::clearCookieList): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlSList::CurlSList):
        (WebCore::CurlSList::~CurlSList):
        (WebCore::CurlSList::operator struct curl_slist** ):
        (WebCore::CurlSList::head):
        (WebCore::CurlSList::isEmpty):
        (WebCore::CurlSList::clear):
        (WebCore::CurlSList::append):
        (WebCore::CurlHandle::errorCode):
        (WebCore::CurlHandle::setErrorCode):
        (WebCore::CurlHandle::privateData):
        (WebCore::CurlHandle::setPrivateData):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::cancel):
        (WebCore::CurlDownload::addHeaders):
        (WebCore::CurlDownload::didReceiveData):
        (WebCore::CurlDownload::didFail):
        (WebCore::CurlDownload::handleCurlMsg): Deleted.
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlJobManager.cpp:
        (WebCore::CurlJobList::append):
        (WebCore::CurlJobList::cancel):
        (WebCore::CurlJobList::complete):
        (WebCore::CurlJobList::isEmpty):
        (WebCore::CurlJobList::withJob):
        (WebCore::CurlJobList::withCurlHandle):
        (WebCore::CurlJob::invoke):
        (WebCore::CurlJobManager::add):
        (WebCore::CurlJobManager::cancel):
        (WebCore::CurlJobManager::callOnJobThread):
        (WebCore::CurlJobManager::startThreadIfNeeded):
        (WebCore::CurlJobManager::stopThreadIfNoMoreJobRunning):
        (WebCore::CurlJobManager::stopThread):
        (WebCore::CurlJobManager::updateJobs):
        (WebCore::CurlJobManager::workerThread):
        (WebCore::CurlJobManager::CurlJobManager): Deleted.
        (WebCore::CurlJobManager::~CurlJobManager): Deleted.
        (WebCore::CurlJobManager::remove): Deleted.
        (WebCore::CurlJobManager::getActiveCount): Deleted.
        (WebCore::CurlJobManager::getPendingCount): Deleted.
        (WebCore::CurlJobManager::stopThreadIfIdle): Deleted.
        (WebCore::CurlJobManager::updateHandleList): Deleted.
        (WebCore::CurlJobManager::addToCurl): Deleted.
        (WebCore::CurlJobManager::removeFromCurl): Deleted.
        * platform/network/curl/CurlJobManager.h:
        (WebCore::CurlJob::CurlJob):
        (WebCore::CurlJob::~CurlJob):
        (WebCore::CurlJob::operator=):
        (WebCore::CurlJob::curlHandle):
        (WebCore::CurlJob::ticket):
        (WebCore::CurlJob::finished):
        (WebCore::CurlJob::error):
        (WebCore::CurlJob::cancel):
        (WebCore::CurlJobManager::singleton):
        (WebCore::CurlJobManager::~CurlJobManager):
        (WebCore::CurlJobManager::isActiveJob):
        (WebCore::CurlJobManager::runThread): Deleted.
        (WebCore::CurlJobManager::setRunThread): Deleted.
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::initialize):
        (WebCore::ResourceHandle::applyAuthentication):
        (WebCore::getFormElementsCount):
        (WebCore::ResourceHandle::setupPUT):
        (WebCore::ResourceHandle::setupPOST):
        (WebCore::ResourceHandle::setupFormData):
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):
        (WebCore::ResourceHandle::setClientCertificateInfo):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::ResourceHandle::didFinish):
        (WebCore::ResourceHandle::didFail):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::ResourceHandle::calculateWebTimingInformations):
        (WebCore::ResourceHandle::handleLocalReceiveResponse):
        (WebCore::ResourceHandle::willPrepareSendData):
        (WebCore::ResourceHandle::didReceiveHeaderLine):
        (WebCore::ResourceHandle::didReceiveAllHeaders):
        (WebCore::ResourceHandle::didReceiveContentData):
        (WebCore::ResourceHandle::readCallback):
        (WebCore::ResourceHandle::headerCallback):
        (WebCore::ResourceHandle::writeCallback):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::dispatchSynchronousJob):
        (WebCore::calculateWebTimingInformations): Deleted.
        (WebCore::handleLocalReceiveResponse): Deleted.
        (WebCore::writeCallback): Deleted.
        (WebCore::headerCallback): Deleted.
        (WebCore::readCallback): Deleted.
        (WebCore::setupFormData): Deleted.
        (WebCore::ResourceHandle::handleCurlMsg): Deleted.
        * platform/network/curl/ResourceHandleManager.cpp: Removed.
        * platform/network/curl/ResourceHandleManager.h: Removed.

2017-07-17  Konstantin Tokarev  <annulen@yandex.ru>

        Unreviewed fix to Mac CMake build after r219474.

        * PlatformMac.cmake:

2017-07-17  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Set library types before their targets are created
        https://bugs.webkit.org/show_bug.cgi?id=174600

        Reviewed by Michael Catanzaro.

        Since r219560 library targets are created before PlatformXXX.cmake
        files are processed, however library type must be passed in
        add_library() call and cannot be changed afterwards. Set these
        variables in OptionsXXX.cmake.

        No new tests needed.

        * PlatformMac.cmake:

2017-07-17  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Move USE_AVFOUNDATION definition on Windows to wtf/Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=174356

        Reviewed by Brent Fulgham.

        Move the definition of USE_AVFOUNDATION on Windows to wtf/platform.h

        Rename WebCoreHeaderDetection.h to AVFoundationHeaderDetection.h

        * AVFoundationSupport.py: Moved to Source/WTF/AVFoundationSupport.py.
        * DerivedSources.make:
        * PlatformWin.cmake:
        * config.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:

2017-07-17  Sam Weinig  <sam@webkit.org>

        [WebIDL] Remove custom bindings that require non-caching JS strings
        https://bugs.webkit.org/show_bug.cgi?id=174552

        Reviewed by Darin Adler.

        Adds two new types, UncachedString and OwnedString (both of which
        are simple structs that wrap a String) to communicate to the bindings
        layer which function to use when converting to a JS string.

        * bindings/IDLTypes.h:
        (WebCore::IDLString::isNullValue):
        Add overloads of isNullValue for UncachedString and OwnedString.

        * bindings/js/JSDOMConvertStrings.h:
        (WebCore::JSConverter<IDLDOMString>::convert):
        (WebCore::JSConverter<IDLByteString>::convert):
        (WebCore::JSConverter<IDLUSVString>::convert):
        Add overloads of convert for UncachedString that uses JSC::jsString 
        and for OwnedString that uses JSC::jsOwnedString.

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::toDataURL): Deleted.
        Remove custom binding for toDataURL.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::retrieveResponse):
        (WebCore::JSXMLHttpRequest::responseText): Deleted.
        Remove custom binding for responseText. Replace the caller of the 
        binding function with a simple conversion that will do the same thing.

        * bindings/js/StringAdaptors.h: Added.
        Add UncachedString and OwnedString adaptors.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        Move quality conversion here, matching toBlob and the spec. Return a UncachedString
        to instruct the bindings to use JSC::jsString and not JSC::jsStringWithCache.

        (WebCore::HTMLCanvasElement::toBlob):
        Use asNumber() rather than toNumber(), since we just checked that it is a number.

        * html/HTMLCanvasElement.h:
        Update header to account for returning an UncachedString.

        * html/HTMLCanvasElement.idl:
        Remove [Custom] and make the signature of toDataURL match the spec (and what we have been doing).

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::requestContent):
        Update to account for UncachedString.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText):
        * xml/XMLHttpRequest.h:
        Update responseText to return OwnedString. OwnedString instruct the bindings to 
        use JSC::jsOwnedString and not JSC::jsStringWithCache.

        * xml/XMLHttpRequest.idl:
        Remove [CustomGetter].

2017-07-17  Daniel Bates  <dabates@apple.com>

        Cleanup: Use OptionSet to represent marker types
        https://bugs.webkit.org/show_bug.cgi?id=174594

        Reviewed by Darin Adler.

        Remove class DocumentMarker::MarkerTypes that duplicates most of functionality of OptionSet
        and use OptionSet directly to represent a set of marker types.

        No functionality changed. So, no new tests.

        * dom/Document.cpp:
        (WebCore::Document::updateLayout):
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::MarkerTypes::MarkerTypes): Deleted.
        (WebCore::DocumentMarker::MarkerTypes::contains): Deleted.
        (WebCore::DocumentMarker::MarkerTypes::intersects): Deleted.
        (WebCore::DocumentMarker::MarkerTypes::operator==): Deleted.
        (WebCore::DocumentMarker::MarkerTypes::add): Deleted.
        (WebCore::DocumentMarker::MarkerTypes::remove): Deleted.
        (WebCore::DocumentMarker::AllMarkers::AllMarkers): Deleted.
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::possiblyHasMarkers):
        (WebCore::DocumentMarkerController::detach):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::markersFor):
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::removeMarkersFromList):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (DocumentMarkerController::setMarkersActive):
        (DocumentMarkerController::hasMarkers):
        (DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        Update code as needed.

        * dom/DocumentMarkerController.h:
        (WebCore::DocumentMarkerController::hasMarkers):
        Update code as needed.

        * editing/AlternativeTextController.cpp:
        (WebCore::markerTypesForAutocorrection):
        (WebCore::markerTypesForReplacement):
        (WebCore::markerTypesForAppliedDictationAlternative):
        Marked as inline and returns an OptionSet<DocumentMarker::MarkerType>. It is unnecessary to use NeverDestroyed
        in these functions as constructing an OptionSet and copying/moving it is very efficient. Such operations are
        effectively equivalent to an integral assignment and copy of an integral value, respectively.

        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):
        (WebCore::AlternativeTextController::markCorrection):
        Update code as needed.

        * editing/AlternativeTextController.h: While I am here, remove some unnecessary #includes and group
        forward declarations of structs.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers): Update code as needed.
        * editing/Editor.cpp:
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing): Ditto.
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheckSucceed): Ditto.
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot): Ditto.
        * testing/Internals.cpp:
        (WebCore::markerTypesFrom): Ditto.
        (WebCore::Internals::markerCountForNode): Ditto.
        (WebCore::Internals::markerAt): Ditto.

2017-07-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: overlay page highlight doesn't disappear when a page is constantly updating
        https://bugs.webkit.org/show_bug.cgi?id=174468

        Reviewed by Simon Fraser.

        Do not allow the PageOverlay to start another fade animation of the same type if one has
        already started. As an example, if the PageOverlay is fading out, startFadeOutAnimation
        should just return.

        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::startFadeInAnimation):
        (WebCore::PageOverlay::startFadeOutAnimation):

2017-07-17  Darin Adler  <darin@apple.com>

        Improve use of NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=174348

        Reviewed by Sam Weinig.

        * Modules/encryptedmedia/MediaKeySession.cpp: Removed unneeded include of
        NeverDestroyed.h.

        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        (WebCore::installedCDMFactories): Use makeNeverDestroyed and a lambda rather
        than a separate boolean for initialization.

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::clearKeyVM): Removed unneeded use of NeverDestroyed to hold a
        RefPtr. Simple to just use leakRef instead.

        * Modules/gamepad/GamepadManager.cpp: Added an include of NeverDestroyed.h.

        * Modules/indexeddb/IDBTransaction.cpp: Removed unneeded include of
        NeverDestroyed.h.
        * Modules/indexeddb/server/MemoryObjectStore.cpp: Ditto.

        * Modules/mediasession/MediaSessionManager.cpp: Moved include of
        NeverDestroyed.h here ...
        * Modules/mediasession/MediaSessionManager.h: ... from here.

        * Modules/mediasource/MediaSourceRegistry.cpp: Moved include of
        NeverDestroyed.h here ...
        * Modules/mediasource/MediaSourceRegistry.h: ... from here.

        * Modules/mediasource/SourceBuffer.cpp: Removed unneeded include of
        NeverDestroyed.h.

        * Modules/plugins/QuickTimePluginReplacement.h: Initialize
        m_scriptObject in the class definition.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::supportsMimeType): Use
        makeNeverDestroyed and the HashSet constructor instead of a loop.
        (WebCore::QuickTimePluginReplacement::supportsFileExtension): Ditto.
        (WebCore::QuickTimePluginReplacement::QuickTimePluginReplacement): Did a
        slight cleanup of the initializers.
        (WebCore::QuickTimePluginReplacement::~QuickTimePluginReplacement): Added
        a FIXME; unclear why there is code here at all.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole): Use
        makeNeverDestroyed and the Vector constructor instead of using empty
        vector checks and Vector::add. Use std::any_of rather than Vector::contains
        since we now are matching against pointers.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumerationImplementationContent): Use const NeverDestroyed.

        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp:
        Regenerated.

        * css/CSSProperty.cpp:
        (WebCore::borderDirections): Removed unnecesssary use of NeverDestroyed
        for a global object that has a trivial destructor.

        * css/ElementRuleCollector.cpp:
        (WebCore::leftToRightDeclaration): Removed unneeded use of NeverDestroyed to hold a
        Ref. Simple to just use leakRef instead. Also use a lambda instead of an explicit
        isEmpty check each time this is called.
        (WebCore::rightToLeftDeclaration): Ditto.

        * css/makeprop.pl: Removed unneeded include of NeverDestroyed.h and the
        uneeded global emptyShorthand. Constructing an empty StylePropertyShorthand
        is no less efficient than copying a global empty one was.

        * dom/CustomElementReactionQueue.cpp: Added an include of NeverDestroyed.h.

        * dom/DOMImplementation.cpp: Removed unneeded include of NeverDestroyed.h.
        * dom/InputEvent.cpp: Ditto.

        * dom/Microtasks.cpp: Moved include of NeverDestroyed.h here ...
        * dom/Microtasks.h: ... from here.

        * dom/MutationObserver.cpp: Added an include of NeverDestroyed.h.

        * dom/ScopedEventQueue.cpp: Moved include of NeverDestroyed.h here ...
        * dom/ScopedEventQueue.h: ... from here. Added Forward.h.

        * dom/ScriptElement.cpp:
        (WebCore::isLegacySupportedJavaScriptLanguage): Use makeNeverDestroyed
        and the HashSet constructor rather than an isEmpty check and a lot of
        add function calls. Also removed comments that don't have value any more,
        with dubious no longer relevant claims about the behavior of old web browsers.
        The function that calls this one already has sufficient comments about why we
        hope some day this function can be eliminated.

        * dom/SecurityContext.cpp: Removed unneeded include of NeverDestroyed.h.

        * dom/make_names.pl:
        (printFactoryCppFile): Instead of using a "populate" function, use a function
        that creates as HashMap. Then use const auto and makeNeverDestroyed.
        (printWrapperFactoryCppFile): Ditto.

        * editing/AlternativeTextController.cpp:
        (WebCore::markerTypesForAutocorrection): Use makeNeverDestroyed
        and the Vector constructor rather than an isEmpty check and a lot of
        append function calls.
        (WebCore::markerTypesForReplacement): Ditto.
        (WebCore::markerTypesForAppliedDictationAlternative): Ditto.

        * editing/EditingStyle.cpp:
        (WebCore::htmlElementEquivalents): Use const auto, makeNeverDestroyed,
        the Vector constructor, and new rather than make_unique. Changed return
        type to use const pointers rather than unique_ptr with non-const type.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement): Updated
        for the above change to htmlElementEquivalents.
        (WebCore::htmlAttributeEquivalents): Same approach as above.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes): Ditto.
        (WebCore::elementMatchesAndPropertyIsNotInInlineStyleDecl): Take
        references instead of pointers.
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement): Updated
        for the above.

        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock): Use const auto, makeNeverDestroyed,
        and the HashSet constructor rather than isEmpty and a lot of calls to add.
        * editing/RemoveFormatCommand.cpp:
        (WebCore::isElementForRemoveFormatCommand): Ditto.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isProhibitedParagraphChild): Use const auto, makeNeverDestroyed,
        and a lambda, rather than isEmpty and a lot of calls to add.

        * html/Autofill.cpp:
        (WebCore::fieldNameMap): Changed return type to be const. Use const auto,
        makeNeverDestroyed, a lambda, and an array of values rather than isEmpty
        and a lot of calls to add. Stopped doing the ConstructFromLiteral
        optimization here. (Easy to add it back if that is a mistake.)

        * html/HTMLObjectElement.cpp:
        (WebCore::isRecognizedTagName): Use const auto, makeNeverDestroyed, and
        a lambda rather than isEmpty.

        * html/HTMLStyleElement.cpp: Added include of NeverDestroyed.h.

        * html/HTMLVideoElement.cpp: Removed uneeded include of NeverDestroyed.h.

        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap): Replaced the populate function
        with this create function.
        (WebCore::InputType::create): Use const auto and makeNeverDestroyed
        istead of isEmpty. Also put the map right where it is used so it's
        not initialized in code path where not needed.

        * html/parser/HTMLParserIdioms.cpp: Removed uneeded include of
        NeverDestroyed.h.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::networkStateChanged):
        Merged into a single line.

        * loader/ContentFilter.cpp:
        (WebCore::blockedPageURL): Use const auto and makeNeverDestroyed
        rather than std::call_once. Since this is a URL and has a non-thread-safe
        reference count, this was not thread safe before, so no need to use the
        more roundabout and less efficient idiom for its thread safety.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlResponseHeaderWhitelist): Deleted.
        * loader/CrossOriginAccessControl.h: Deleted unused function
        isOnAccessControlResponseHeaderWhitelist.

        * loader/EmptyClients.cpp: Use leakRef instead of NeverDestroyed<Ref>.

        * loader/appcache/ApplicationCacheStorage.cpp: Removed unneeded include of
        NeverDestroyed.h.
        * page/CaptionUserPreferences.cpp: Ditto.

        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors): Changed the return type to const, since
        the callers do not modify the map. Use const auto, makeNeverDestroyed, and
        a lambda rather than isEmpty and repeated calls to add.

        * page/MainFrame.cpp: Removed unneeded include of NeverDestroyed.h.

        * page/MemoryRelease.cpp:
        (WebCore::releaseMemory): Use a function directly instead of calling it
        inside a lambda.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::onLine): Updated to call
        NetworkStateNotifier::singleton.

        * page/Page.cpp:
        (WebCore::allPages): Made this a function instead of a global to use the
        normal idiom for such globals.
        (WebCore::Page::forEachPage): Updated for change to allPages.
        (WebCore::networkStateChanged): Ditto. Also removed a bit of unnecessary
        churn by using const AtomicString& instead of AtomicString.
        (WebCore::Page::Page): Moved initialization of most data members to the
        class definition. Removed initialiation of allPages. Updated the use of
        NetworkStateNotifier for its new slightly changed  interface.
        (WebCore::Page::~Page): Updated for change to allPages.
        (WebCore::Page::clearPreviousItemFromAllPages): Ditto.
        (WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment): Ditto.
        (WebCore::Page::refreshPlugins): Ditto.

        * page/Page.h: Moved initialization of most data members here.

        * page/PerformanceUserTiming.cpp: Removed many unneded includes.
        (WebCore::restrictedMarkFunction): Use const auto, makeNeverDestroyed, and
        a lambda instead of isEmpty. Also use an array rather than std::array and
        got rid fo the unneeded use of anonymous namespace since this is fine in
        the top level WebCore namespace.
        (WebCore::clearPerformanceEntries): Tweaked coding style.
        (WebCore::UserTiming::mark): Ditto.
        (WebCore::UserTiming::findExistingMarkStartTime): Got rid of double hash
        table lookup by using find instead of using contains followed by get.
        removed unneeded explicit cast to double. Tweaked coding style.
        (WebCore::convertToEntrySequence): Tweaked coding style.
        (WebCore::getEntrySequenceByName): Deleted.
        (WebCore::UserTiming::getMarks): Call get directly instead of getEntrySequenceByName.
        (WebCore::UserTiming::getMeasures): Ditto.

        * page/RuntimeEnabledFeatures.cpp: Moved include of NeverDestroyed.h here ...
        * page/RuntimeEnabledFeatures.h: ... from here. Added Forward.h and Noncopyable.h.

        * platform/LocalizedStrings.cpp: Removed unneeded include of NeverDestroyed.h.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes): Added a missing const for a global
        constant array.
        (WebCore::initializeSupportedJavaScriptMIMETypes): Ditto.
        (WebCore::initializeSupportedNonImageMimeTypes): Ditto.
        (WebCore::typesForCommonExtension): Replaced the old mediaMIMETypeMap function
        with this one. Moved the common media types array here since it's only used here.
        Use const auto, makeNeverDestroyed, and a lambda instead of using an isEmpty check.
        Iterate the array using a mdoern for loop. Use HashMap::ensure to avoid the
        double hashing that the old code was doing. And moved the code to find an entry
        in the map in here from the client functions.
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension): Updated to use the
        typesForCommonExtension, and changed logic to use this first, and only call
        getMIMETypeForExtension for extensions not in the map. This gives the same
        result but should be slightly more efficient.
        (WebCore::MIMETypeRegistry::getMediaMIMETypesForExtension): Updated to use the
        typesForCommonExtension function. Comment about strategy is now in there.
        (WebCore::initializeUnsupportedTextMIMETypes): Added a missing const for a global
        constant array. Also started using ASCIILiteral.

        * platform/MainThreadSharedTimer.cpp: Moved include of NeverDestroyed.h here ...
        * platform/MainThreadSharedTimer.h: ... from here. Added Forward.h.

        * platform/SchemeRegistry.cpp:
        (WebCore::add): Added helper functions to keep code below simpler.
        (WebCore::makeNeverDestroyedSchemeSet): Ditto.
        (WebCore::allBuiltinSchemes): Use const auto, makeNeverDestroyed, a lambda,
        and the helper functions above, rather than isEmpty.
        (WebCore::builtinLocalURLSchemes): Use const auto, makeNeverDestroyed, and
        the HashSet constructor instead of isEmpty and add calls. Also changed the
        return type to be const.
        (WebCore::localURLSchemes): Copy the map using assignment instead of an
        isEmpty function and a loop with calls to add.
        (WebCore::builtinSecureSchemes): Use const auto, makeNeverDestroyed, and
        the Vector constructor rather than isEmpty, repeated calls to append,
        and shrinkToFit.
        (WebCore::secureSchemes): Use auto and makeNeverDestroyedSchemeSet rather
        than isEmpty and repeated calls to add.
        (WebCore::builtinSchemesWithUniqueOrigins): More of the same.
        (WebCore::schemesWithUniqueOrigins): Ditto.
        (WebCore::builtinEmptyDocumentSchemes): Ditto.
        (WebCore::emptyDocumentSchemes): Ditto.
        (WebCore::schemesForbiddenFromDomainRelaxation): Ditto.
        (WebCore::builtinCanDisplayOnlyIfCanRequestSchemes): Ditto.
        (WebCore::canDisplayOnlyIfCanRequestSchemes): Ditto.
        (WebCore::builtinCORSEnabledSchemes): Ditto.
        (WebCore::CORSEnabledSchemes): Ditto.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal): Replaced check for
        empty string with check for null string, since that's slightly more efficient
        for non-null, non-empty strings, and the hash table can handle empty strings
        just fine.
        (WebCore::SchemeRegistry::registerURLSchemeAsNoAccess): Added null check here.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNoAccess): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated): Ditto.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsSecure): Ditto.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsEmptyDocument): Ditto.
        (WebCore::SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument): Ditto.
        (WebCore::SchemeRegistry::setDomainRelaxationForbiddenForURLScheme): Ditto.
        (WebCore::SchemeRegistry::isDomainRelaxationForbiddenForURLScheme): Ditto.
        (WebCore::SchemeRegistry::canDisplayOnlyIfCanRequest): Ditto.
        (WebCore::SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsNotAllowingJavascriptURLs): Ditto.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNotAllowingJavascriptURLs): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing): Ditto.
        (WebCore::SchemeRegistry::allowsLocalStorageAccessInPrivateBrowsing): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing): Ditto.
        (WebCore::SchemeRegistry::allowsDatabaseAccessInPrivateBrowsing): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsCORSEnabled): Ditto.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy): Ditto.
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy): Ditto.
        (WebCore::SchemeRegistry::schemeShouldBypassContentSecurityPolicy): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsAlwaysRevalidated): Ditto.
        (WebCore::SchemeRegistry::shouldAlwaysRevalidateURLScheme): Ditto.
        (WebCore::SchemeRegistry::registerURLSchemeAsCachePartitioned): Ditto.
        (WebCore::SchemeRegistry::shouldPartitionCacheForURLScheme): Ditto.
        (WebCore::SchemeRegistry::isUserExtensionScheme): Tweaked #if a bit.
        (WebCore::SchemeRegistry::isBuiltinScheme): Added null check.

        * platform/cocoa/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::observedEventNames): Use const auto,
        makeNeverDestroyed, and the Vector constructor rather than a call to size
        and then append eacn time this funciton is called.

        * platform/gamepad/cocoa/GameControllerGamepadProvider.h: Moved include of
        NeverDestroyed.h from here ...
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm: ... to here.

        * platform/gamepad/mac/HIDGamepadProvider.cpp: Moved include of
        NeverDestroyed.h here ...
        * platform/gamepad/mac/HIDGamepadProvider.h: ... from here.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::hasValidAverageCharWidth): Use const auto,
        makeNeverDestroyed, and the HashSet constructor.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::transformColorSpace): Removed unneeded use of
        NeverDestroyed<Vector<int>> here, instead using const std::array.

        * platform/graphics/ImageBuffer.h: Changed platformTransformColorSpace to take
        const std::array<uint8_t, 256>& instead of const Vector<int>&, since the whole
        pointer of the argument is that it's a table to map bytes onto other bytes.

        * platform/graphics/MediaPlaybackTarget.h: Removed unneeded include of
        NeverDestroyed.h, unneeded unused noMediaPlaybackTargetContext function,
        and unneeded include of MediaPlaybackTargetContext.h, forward declaring instead.
        Made most functions in this class pure virtual instead of having default
        implementations.

        * platform/graphics/avfoundation/MediaPlaybackTargetMac.h: Added include
        of MediaPlaybackTargetContext.h now that it was removed above.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::staticMIMETypeList): Use const auto,
        makeNeverDestroyed, and the HashSet constructor.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Reversed the sense
        of the boolean logic here to make this simpler and easier to read.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::getSupportedTypes): Changed
        the implementation here, which empties out the passed in hash set, to use
        the clear function rather than assignment from a global empty hash set. Added
        a FIXME because it seems peculiar that this would be considered OK.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType): Used ? : to make
        this a little more terse; I think it's clearer.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace): Updated for change to
        argument type.

        * platform/graphics/cg/ImageDecoderCG.cpp: Removed unneeded include of
        NeverDestroyed.h.
        (WebCore::appendImageSourceOption): Streamlined code using auto with
        adoptCF; there is no need to write out the type of the RetainPtr.
        (WebCore::imageSourceOptions): Instead of NeverDestroyed<RetainPtr>, just use
        const auto and leakRef.
        (WebCore::imageSourceAsyncOptions): Ditto.

        * platform/graphics/gtk/GdkCairoUtilities.cpp:
        (WebCore::getDefaultCairoFontOptions): Instead of using LazyNeverDestroyed
        on a pointer, just use a global pointer. There is no need to use any kind
        of NeverDestroyed on a type with a trivial destructor such as a pointer.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase): Instead of using
        NeverDestroyed<RetainPtr> just use a raw pointer global.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase): Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::createFileTypesSet): Return the HashSet instead of adding to it.
        Use Objective-C for/in syntax for an NSArray, not C++ for syntax, although
        it seems the C++ syntax was working fine.
        (WebCore::mimeCommonTypesCache): Fixed return type so we won't copy the
        HashMap every time this function is called. Use const auto and makeNeverDestroyed
        instead of using a boolean to do one time initialization.
        (WebCore::mimeModernTypesCache): Ditto.
        (WebCore::MediaPlayerPrivateQTKit::disableUnsupportedTracks): Marked a
        constant array const.

        * platform/ios/Device.cpp:
        (WebCore::deviceClass): Use a lambda to initialize a variable here instead
        of using std::call_once. This function does not need to be thread safe.
        (WebCore::deviceName): Use const NeverDestroyed instead of LazyNeverDestroyed
        and std::call_once. This function does not need to be thread safe.

        * platform/ios/DragImageIOS.mm: Make defaultLinkIndicatorOptions be a
        constant instead of a variable.
        (WebCore::cascadeForSystemFont): Added helper function.
        (WebCore::createDragImageForLink): Use const auto and makeNeverDestroyed
        instead of LazyNeverDestroyed and dispatch_once. This code does not need
        to be thread safe since its arguments include, for example, a DOM element.

        * platform/ios/LegacyTileLayerPool.h: Removed unneeded include of
        NeverDestroyed.h.

        * platform/ios/QuickLook.mm:
        (WebCore::QLPreviewGetSupportedMIMETypesSet): Use a global raw pointer
        instead of NeverDestroyed<RetainPtr<NSSet>>.
        (WebCore::createQLPreviewProtocol): Deleted.
        (WebCore::QLPreviewProtocol): Use a global raw pointer instead of
        a NeverDestroyed<Vector<char>>. It's cleaner to use fastStrdup instead
        of appending to an array, and less wasteful of memory too.

        * platform/ios/WebCoreMotionManager.mm: Removed unneeded include of
        NeverDestroyed.h.
        * platform/ios/WebSQLiteDatabaseTrackerClient.h: Ditto.
        * platform/mac/DragImageMac.mm: Ditto.
        * platform/mediastream/CaptureDeviceManager.cpp: Ditto.
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp: Ditto.

        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::audioDevices): Use auto,
        makeNeverDestroyed, and a lambda instead of checking size each time.
        (WebCore::MockRealtimeMediaSource::videoDevices): Ditto.

        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::mimeTypeCache): Use const auto, makeNeverDestroyed, and the
        HashSet constructor instead of an explicit boolean to initialize.

        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::blobUtilityQueue): Use a global with a raw reference instead
        of a NeverDestroyed<Ref>.

        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::singleton): Renamed this from
        networkStateNotifier. We must have missed this when we changed to use the
        singleton idiom consistently. Also changed to use normal NeverDestroyed
        rather than using LazyNeverDestroyed and call_once, because this is not
        used from multiple threads and has no special thread safety requirements.
        (WebCore::NetworkStateNotifier::NetworkStateNotifier): Moved the constructor
        here and construct the timer. Before the timer was used only on the Mac
        platform but now it is there for all platforms.
        (WebCore::NetworkStateNotifier::onLine): Moved function here from the header.
        It's a littlel less trivial than before because it now triggers a call to
        updateState as needed.
        (WebCore::NetworkStateNotifier::addListener): Renamed from
        addNetworkStateChangeListener since there is only one kind of listener and
        the old name was too wordy. Changed to call the new startObserving function,
        and guaranteed to call it onlh once. The platform-specific logic for iOS is
        now inside the iOS version of that function instead of here.
        (WebCore::NetworkStateNotifier::updateState): Moved here now that it is the
        same for all platforms. The actual state updating is done in a function named
        updateStateWithoutNotifying, which is implemented for each platform.
        (WebCore::NetworkStateNotifier::updateStateSoon): New function which takes
        advantage of the timer to coalesce network state updates.
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying): Empty stub
        version of this function.
        (WebCore::NetworkStateNotifier::startObserving): Ditto.
        (WebCore::NetworkStateNotifier::notifyNetworkStateChange): Deleted. Code from
        this has moved into updateState.

        * platform/network/NetworkStateNotifier.h: Greatly cut down what part of this
        class is platform-specific.

        * platform/network/ios/NetworkStateNotifierIOS.mm:
        (-[WebNetworkStateObserver initWithBlock:]): Simplified this class so it
        takes a block, rather than using a pointer to the C++ notifier and doing
        WebThreadRun.
        (-[WebNetworkStateObserver dealloc]): Ditto.
        (-[WebNetworkStateObserver networkStateChanged:]): Ditto.
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying):
        This now calls isNetworkReachable.
        (WebCore::NetworkStateNotifier::startObserving): Check the
        Settings::shouldOptOutOfNetworkStateObservation function, and if it's OK
        to observe, then create the observer. This code now takes care of the
        WebThreadRun and calls updateStateSoon.
        (WebCore::NetworkStateNotifier::NetworkStateNotifier): Deleted. The
        constructor is now platform independent.
        (WebCore::NetworkStateNotifier::~NetworkStateNotifier): Deleted. This
        object is never destroyed so we should not write a destructor for it.
        (WebCore::NetworkStateNotifier::registerObserverIfNecessary): Deleted.
        Replaced by startObserving.
        (WebCore::NetworkStateNotifier::onLine): Deleted. This function is now
        platform-independent.
        (WebCore::setOnLine): Deleted. The logic from this is now in
        updateState and updateStateWithoutNotifying.

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying): Renamed
        this from updateState and tightened up the code a bit. Also changed
        to not assume anything. If there is an error, we leave m_isOnLine alone.
        Default behavior is now in the platform-independent code, and the default
        is to treat things as on-line if updateStateWithoutNotifying was called
        and it was never able to update the state even once.
        (WebCore::NetworkStateNotifier::startObserving): Moved most of the code
        from the constructor into this function.
        (WebCore::NetworkStateNotifier::dynamicStoreCallback): Deleted. This is
        now a lambda inside startObserving.
        (WebCore::NetworkStateNotifier::networkStateChangeTimerFired): Deleted.
        This function is now platform-independent and is named updateState.

        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying): Renamed
        from updateState and tightened the code up a bit. Also changed
        to not assume anything. If there is an error, we leave m_isOnLine alone.
        Default behavior is now in the platform-independent code, and the default
        is to treat things as on-line if updateStateWithoutNotifying was called
        and it was never able to update the state even once.
        (WebCore::NetworkStateNotifier::addressChanged): Deleted.
        This function is now platform-independent and is named updateState.
        (WebCore::NetworkStateNotifier::addressChangeCallback): Renamed from
        addrChangeCallback. Simplified by using the singleton function instead
        of relying on the context pointer.
        (WebCore::NetworkStateNotifier::startObserving): Moved most of the code
        from the constructor here.

        * platform/text/LocaleToScriptMappingDefault.cpp:
        (WebCore::scriptNameToCode): Use makeNeverDestroyed.
        (WebCore::localeToScriptCodeForFontSelection): Ditto.

        * platform/text/ios/LocalizedDateCache.h: Moved include of
        NeverDestroyed.h from here ...
        * platform/text/ios/LocalizedDateCache.mm: ... to here.

        * platform/wpe/RenderThemeWPE.cpp:
        (WebCore::RenderTheme::singleton): Use a theme that is never destroyed
        rather than Ref that is never destroyed.

        * platform/wpe/RenderThemeWPE.h: Use friend NeverDestroyed rather than
        a create function since RenderTheme is no longer reference counted.

        * rendering/RenderTheme.h: Made RenderTheme no longer reference counted.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::create): Deleted.
        (WebCore::RenderTheme::singleton): Use a theme that is never destroyed
        rather than Ref that is never destroyed.

        * rendering/RenderThemeGtk.h: Use friend NeverDestroyed rather than
        a create function since RenderTheme is no longer reference counted.
        * rendering/RenderThemeIOS.h: Ditto.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::create): Deleted.
        (WebCore::RenderTheme::singleton): Use a theme that is never destroyed
        rather than Ref that is never destroyed.

        * rendering/RenderThemeMac.h: Use friend NeverDestroyed rather than
        a create function since RenderTheme is no longer reference counted.
        Also marked a lot of functions final rather than override and initialized
        data members in the class deifnition.

        * rendering/RenderThemeMac.mm: Moved some SPI interfaces to the top of the
        file. They should really go into SPI headers.
        (-[WebCoreRenderThemeNotificationObserver init]): Removed the theme argument
        here because the theme is a singleton and we don't need a pointer to it.
        Add the observer here instead of doing it in the caller.
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]): Call
        platformColorsDidChange through the singleton rather than using a pointer.
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:]):
        Tightened up the code a bit by using CFAutorelease instead of using a
        combination of NSMakeCollectable, autorelease, and a typecast to accomplish
        the same thing.
        (WebCore::RenderTheme::singleton): Use a theme that is never destroyed
        rather than Ref that is never destroyed.
        (WebCore::RenderThemeMac::create): Deleted.
        (WebCore::RenderThemeMac::RenderThemeMac): Moved initialization into the
        class definition and observing into the WebCoreRenderThemeNotificationObserver
        init function.
        (WebCore::RenderThemeMac::~RenderThemeMac): Deleted. No need for this since
        the object will never be destroyed.
        (WebCore::RenderThemeMac::mediaControlsBase64StringForIconNameAndType):
        Removed an unnecessary conversion from C string literal to WTF::String and
        then to NSString. Instead, just use an NSString literal.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::create): Deleted.
        (WebCore::RenderTheme::singleton): Use a theme that is never destroyed
        rather than Ref that is never destroyed.

        * rendering/RenderThemeWin.h: Use friend NeverDestroyed rather than
        a create function since RenderTheme is no longer reference counted.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies): Moved a global into
        the code where it is used.

        * svg/SVGAnimatedLength.cpp: Removed unneeded include of NeverDestroyed.h.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isSupportedAttribute): Use const auto,
        makeNeverDestroyed, a lambda, and the new HashSet::add overload instead of
        an isEmpty check and lots of separate add function calls.
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::isSupportedAttribute): Ditto.
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::isSupportedAttribute): Ditto.
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::isSupportedAttribute): Ditto.

        * svg/SVGElement.cpp:
        (WebCore::createAttributeNameToCSSPropertyIDMap): Replaced the populate
        function with this create function.
        (WebCore::createAttributeNameToAnimatedPropertyTypeMap): Ditto.
        (WebCore::attributeNameToAnimatedPropertyTypeMap): Changed return type to
        const reference. Use const auto and makeNeverDestroyed instead of using
        isEmpty and a populate function.
        (WebCore::createCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        More of the same.
        (WebCore::cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): Ditto.
        (WebCore::SVGElement::childShouldCreateRenderer): Use an array instead of
        a HashSet since we are checking against only 3 or 4 values.
        (WebCore::addQualifiedName): Deleted.
        (WebCore::SVGElement::animatableAttributeForName): Use const auto,
        makeNeverDestroyed, and a lambda to efficiently build the map in this function.
        (WebCore::SVGElement::cssPropertyIdForSVGAttributeName): Use const auto and
        makeNeverDestroyed instead of using isEmpty and a populate function.

        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::isSupportedAttribute): Use const auto,
        makeNeverDestroyed, a lambda, and the new HashSet::add overload instead of
        an isEmpty check and lots of separate add function calls.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::isSupportedAttribute): Ditto.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::isSupportedAttribute): Ditto.
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::isSupportedAttribute): Ditto.
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::isSupportedAttribute): Ditto.
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::isSupportedAttribute): Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::isSupportedAttribute): Ditto.
        * svg/SVGLangSpace.cpp:
        (WebCore::addWithAndWithoutXMLPrefix): Added helper. Uses xmlAtom instead
        of making our own NeverDestroyed local xmlPrefix.
        (WebCore::SVGLangSpace::addSupportedAttributes): Rewrote to use helper.
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::isSupportedAttribute): Use const auto,
        makeNeverDestroyed, a lambda, and the new HashSet::add overload instead of
        an isEmpty check and lots of separate add function calls.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::isSupportedAttribute): Ditto.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::isSupportedAttribute): Ditto.
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::isSupportedAttribute): Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::isSupportedAttribute): Ditto.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::isSupportedAttribute): Ditto.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::isSupportedAttribute): Ditto.
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::isSupportedAttribute): Ditto.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::isSupportedAttribute): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::isSupportedAttribute): Ditto.

        * testing/MockContentFilterSettings.h: Removed unneeded include of
        NeverDestroyed.h.

        * testing/MockGamepadProvider.cpp: Moved include of
        NeverDestroyed.h here ...
        * testing/MockGamepadProvider.h: ... from here.

        * testing/MockPreviewLoaderClient.h: Removed unneeded include of
        NeverDestroyed.h.

        * workers/Worker.cpp:
        (WebCore::allWorkers): Changed this from a global to a function.
        (WebCore::Worker::networkStateChanged): Updated for above change and
        made this a member function.
        (WebCore::Worker::Worker): Updated for above change and
        change to NetworkStateNotifier.
        (WebCore::Worker::~Worker): Ditto.
        * workers/Worker.h: Made networkStateChanged a static member instead of
        a friend since that is a cleaner way to give it access to private member
        functions.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunctionMap): Use create instead of populate style.
        (WebCore::XPath::Function::create): Use const auto and makeNeverDestroyed
        instead of an isEmpty check.

        * xml/XPathParser.cpp:
        (WebCore::XPath::createAxisNamesMap): Use create instead of populate style.
        (WebCore::XPath::parseAxisName): Use const auto and makeNeverDestroyed
        instead of an isEmpty check.

2017-07-17  Brady Eidson  <beidson@apple.com>

        REGRESSION(r219298): imported/w3c/IndexedDB-private-browsing/idbfactory_open.html is crashing occassionaly (UniqueIDBDatabase being taken from the IDBServer set twice).
        <rdar://problem/33294987> and https://bugs.webkit.org/show_bug.cgi?id=174354

        Reviewed by Alex Christensen.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::postDatabaseTaskReply): Remove a now invalid ASSERT
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose): Add a RELEASE_ASSERT.
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore): Instead of an ad-hoc main thread dispatch, use the "schedule task reply" system
          to keep dispatch ordering in tact.
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply): Remove a now invalid ASSERT
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete): Only take the owning pointer if the object doesn't already own itself.

2017-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS DnD] Web process uses too much memory when beginning a drag on a very large image
        https://bugs.webkit.org/show_bug.cgi?id=174585
        <rdar://problem/33302541>

        Reviewed by Tim Horton.

        Currently, attempting to drag a very large image fails, either due to us telling CoreGraphics to create an image
        buffer that is too large, or because the web process exceeds its memory limit and gets jetsamed. There are two
        places where we can optimize our memory use during the drag initialization sequence, and this patch improves
        both.

        First, on iOS, we attempt to encode and send over a WebCore::Image in the PasteboardImage when writing to the
        item providers upon starting a drag. Currently, this Image is only used in the drag and drop codepath, in
        PlatformPasteboard::writeObjectRepresentations, to grab the size of the image being written for the purpose of
        specifying estimated display size. Serializing and deserializing an Image calls into Image::nativeImage, which
        attempts to draw the contents of the image into a buffer so that it can be shipped across to the UI process.
        Instead, we can simply compute the size in the web process while we already have the Image, and simply send that
        across. For copy/paste, this doesn't result in any behavior change, since we don't use the PasteboardImage's
        image in the first place.

        Secondly, when starting a drag, we try to allocate create an image buffer the size of the WebCore::Image for the
        purpose of generating the drag preview. Instead, this patch establishes a limit on the size of this drag preview
        image, such that if the Image's size is larger, we'll scale down the drag preview image to be the maximum
        allowed size.

        Test: DataInteractionTests.CanStartDragOnEnormousImage.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard):
        * platform/Pasteboard.h:
        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::sizeWithAreaAndAspectRatio):

        Introduce a new helper function to compute a size with the given aspect ratio and area.

        * platform/graphics/GeometryUtilities.h:
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageFromImage):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::writeObjectRepresentations):

2017-07-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Include most CMake modules from WebKitCommon.cmake
        https://bugs.webkit.org/show_bug.cgi?id=174546

        Reviewed by Konstantin Tokarev.

        * WebCoreMacros.cmake:

2017-07-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Macros in WebKitMacros.cmake should be prefixed with WEBKIT_ namespace
        https://bugs.webkit.org/show_bug.cgi?id=174547

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * WebCoreMacros.cmake:

2017-07-17  Alex Christensen  <achristensen@webkit.org>

        Modernize content extension code
        https://bugs.webkit.org/show_bug.cgi?id=174588

        Reviewed by Sam Weinig.

        No change in behavior.  Just use Ref instead of RefPtr where possible.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::create):
        * contentextensions/ContentExtension.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::addContentExtension):
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/ContentExtensionsBackend.h:

2017-07-17  Simon Fraser  <simon.fraser@apple.com>

        clientX/clientY on TouchEvent.touches are wrong
        https://bugs.webkit.org/show_bug.cgi?id=174561
        rdar://problem/33336041

        Reviewed by Tim Horton.
        
        Do some refactoring so that WebKitAdditions code that computes Touch coordinates can use
        the same code that MouseRelatedEvent uses.
        
        There is no behavior change in this patch, but the test exercises a behavior change in
        WebKitAdditions code.

        Test: fast/events/touch/ios/touches-client-coords-after-zoom.html

        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::init):
        (WebCore::MouseRelatedEvent::frameViewFromDOMWindow):
        (WebCore::MouseRelatedEvent::pagePointToClientPoint):
        (WebCore::MouseRelatedEvent::pagePointToAbsolutePoint):
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::MouseRelatedEvent::documentToAbsoluteScaleFactor):
        (WebCore::MouseRelatedEvent::computePageLocation):
        (WebCore::MouseRelatedEvent::locationInRootViewCoordinates):
        (WebCore::MouseRelatedEvent::frameView): Deleted.
        * dom/MouseRelatedEvent.h:

2017-07-17  Jeremy Jones  <jeremyj@apple.com>

        Add video fullscreen transition logging.
        https://bugs.webkit.org/show_bug.cgi?id=174474

        Reviewed by Jer Noble.

        No new tests, because there is no functional change.

        This change just adds logging.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen):
        (WebCore::HTMLVideoElement::webkitExitFullscreen):
        (WebCore::HTMLVideoElement::webkitSetPresentationMode):

2017-07-17  Chris Dumez  <cdumez@apple.com>

        click event does not dispatch to parent when child target stops hit testing after mousedown
        https://bugs.webkit.org/show_bug.cgi?id=174564
        <rdar://problem/33340234>

        Reviewed by Simon Fraser.

        As per [1], if the mouse down node and the mouse release node differ, then we are supposed to
        fire the click event at their common ancestor, if such node exists. This patch implements this
        logic. This also aligns our behavior with Blink.

        [1] https://w3c.github.io/uievents/#events-mouseevent-event-order

        Test: fast/events/mouse-click-different-mouseDown-mouseUp-nodes.html

        * page/EventHandler.cpp:
        (WebCore::targetNodeForClickEvent):

2017-07-17  Brady Eidson  <beidson@apple.com>

        WKHTTPCookieStore observing only works on the default cookie store.
        <rdar://problem/33330724> and https://bugs.webkit.org/show_bug.cgi?id=174580

        Reviewed by Sam Weinig.

        Covered by new API tests.
        
        startObservingCookieChanges and stopObservingCookieChanges are passed a NetworkStorageSession to observe.
        On Mac/iOS, the passed-in storage session was ignored and the shared cookie storage was assumed.
        Let's fix that.
        
        Also, since using NSNotification based observing only works reliably for the shared cookie storage,
        switch to direct CFHTTPCookieStorageRef observing.

        * WebCore.xcodeproj/project.pbxproj:
        
        * platform/network/NetworkStorageSession.h:
        
        * platform/network/cocoa/CookieStorageObserver.h: Added.
        * platform/network/cocoa/CookieStorageObserver.mm: Added.
        (WebCore::cookiesChanged):
        (WebCore::CookieStorageObserver::create):
        (WebCore::CookieStorageObserver::CookieStorageObserver):
        (WebCore::CookieStorageObserver::~CookieStorageObserver):
        (WebCore::CookieStorageObserver::startObserving):
        (WebCore::CookieStorageObserver::stopObserving):
        (WebCore::CookieStorageObserver::cookiesDidChange):
        
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::cookieStorageObserver):
        
        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):
        (-[WebCookieStorageObjCAdapter notifyCookiesChangedOnMainThread]): Deleted.
        (-[WebCookieStorageObjCAdapter cookiesChangedNotificationHandler:]): Deleted.
        (-[WebCookieStorageObjCAdapter startListeningForCookieChangeNotificationsWithCallback:]): Deleted.
        (-[WebCookieStorageObjCAdapter stopListeningForCookieChangeNotifications]): Deleted.
        
        * platform/spi/cf/CFNetworkSPI.h:

2017-07-17  Sam Weinig  <sam@webkit.org>

        [WebIDL] Rename JSCSSValueCustom.cpp to JSDeprecatedCSSOMValueCustom.cpp to match the underlying class
        https://bugs.webkit.org/show_bug.cgi?id=174550

        Reviewed by Brady Eidson.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCSSValueCustom.cpp: Removed.
        * bindings/js/JSDeprecatedCSSOMValueCustom.cpp: Renamed from bindings/js/JSCSSValueCustom.cpp.
        Rename file and update references.

2017-07-17  Antoine Quint  <graouts@apple.com>

        REGRESSION: order of AirPlay and volume controls is inconsistent between <audio> and <video>
        https://bugs.webkit.org/show_bug.cgi?id=174581
        <rdar://problem/33297519>

        Reviewed by Sam Weinig.

        We had an inconsistency between <audio> and <video> controls for the relative order of the
        volume and AirPlay buttons. The <video> layout was correct (volume first and AirPlay after)
        and the <audio> layout now is the same.

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype._rightContainerButtons):

2017-07-17  Konstantin Tokarev  <annulen@yandex.ru>

        [CMake] Create targets before WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS is called
        https://bugs.webkit.org/show_bug.cgi?id=174557

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * CMakeLists.txt:

2017-07-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r219556.

        Broke build without WebCrypto

        Reverted changeset:

        "[CMake] Clean up Web Crypto build targets"
        https://bugs.webkit.org/show_bug.cgi?id=174253
        http://trac.webkit.org/changeset/219556

2017-07-17  Antoine Quint  <graouts@apple.com>

        Media controls draw behind captions
        https://bugs.webkit.org/show_bug.cgi?id=174579
        <rdar://problem/33295427>

        Reviewed by Dean Jackson.

        Ensure the captions container is added as a previous sibling to the controls container.

        Test: media/modern-media-controls/media-controls/media-controls-display-above-captions.html

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController):

2017-07-17  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Clean up Web Crypto build targets
        https://bugs.webkit.org/show_bug.cgi?id=174253

        Reviewed by Michael Catanzaro.

        Gather the common WebCrypto source files in CMakeLists.txt, including them
        in the build unconditionally and instead relying on ENABLE_SUBTLE_CRYPTO
        build guards to exclude the code from compilation if the feature is disabled.

        PlatformGTK.cmake, PlatformMac.cmake and PlatformWPE.cmake can then remove
        duplicated build targets. PlatformMac.cmake still lists all the Mac-specific
        Web Crypto build targets.

        PlatformGTK.cmake and PlatformWPE.cmake now include GCrypt.cmake if the build
        was configured to enable the use of libgcrypt. The new CMake file adds the
        libgcrypt-specific Web Crypto build targets to the build if the feature was
        enabled, and also sets up libgcrypt include directiories and libraries.

        No new tests -- no change in behavior.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * platform/GCrypt.cmake: Added.

2017-07-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        -Wreorder warning caused by GraphicsContext3D cleanup
        https://bugs.webkit.org/show_bug.cgi?id=174511

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2017-07-16  Antoine Quint  <graouts@apple.com>

        Dismissing the captions panel using the mouse is too eager to remove the captions panel and media controls
        https://bugs.webkit.org/show_bug.cgi?id=174571
        <rdar://problem/33294968>

        Reviewed by Eric Carlson.

        We did several things wrong when dismissing the tracks panel:

            - we did not check whether we were hosted in a shadow root when figuring if a click was on the tracks panel
            - we did not check whether we clicked over the media when dismissing the tracks panel
            - we did not check whether auto-hide was on before fading the media controls out when we clicked outside
              the media controls bounds

        We now correctly account for all of those cases and implement the following behavior when clickng as the tracks
        panel is presented:
        
            - dismiss the panel if the click is outside of the panel
            - dismiss the panel and the media controls if the click is outside the video and the media controls have
              auto-hide on (ie. media is playing)
            - dismiss the panel and the media controls after the track selection animation is finished if a track is selected

        Tests: media/modern-media-controls/tracks-panel/tracks-panel-up-click-outside-media-does-not-dimiss-media-controls-when-media-is-paused.html
               media/modern-media-controls/tracks-panel/tracks-panel-up-click-over-media-does-not-dimiss-media-controls-when-media-is-playing.html

        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.hideTracksPanel): Only hide the media controls if we clicked outside of the media
        controls bounds and if we have auto-hide on when idle (ie. the media is playing).
        (MediaControls.prototype.isPointInControls): Add an option to specify whether the container should be
        considered when checking if a point is contained within the media controls bounds.
        * Modules/modern-media-controls/controls/tracks-panel.js:
        (TracksPanel.prototype._handleMousedown):
        (TracksPanel.prototype._isPointInTracksPanel): Correctly check whether the element that we started pressing
        on is contained within the tracks panel, accounting for the case where we are presented within a shadow root
        (ie. always when runing inside a Web page).

2017-07-16  Ali Juma  <ajuma@chromium.org>

        DisallowUserAgentShadowContent moves out of non-UA shadow roots
        https://bugs.webkit.org/show_bug.cgi?id=165647

        Reviewed by Ryosuke Niwa.

        Make rect-based hit-testing include nodes in non-UA shadow trees when the
        HitTestRequest has type DisallowUserAgentShadowContent.

        Test: fast/dom/nodesFromRect/nodesFromRect-shadow.html

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):
        * testing/Internals.h:

2017-07-16  Antoine Quint  <graouts@apple.com>

        Clicking edges of media control buttons changes visual state of button (pressed) but doesn't execute action
        https://bugs.webkit.org/show_bug.cgi?id=174565
        <rdar://problem/33294833>

        Reviewed by Dean Jackson.

        WebCore doesn't dispatch a "click" event to a parent element when a child that was the original target when
        the "mousedown" occured is no longer hit-testing at the location where the mouse pointer is at when the "mouseup"
        occurs (see webkit.org/b/174564). Since button icons, which are a <picture> element that is a child of the
        <button> element for media controls buttons, shrink to 89% of their size when the ":active" pseudo-class matches,
        clicking on the edges of the media controls buttons would not trigger the expected action.

        Test: media/modern-media-controls/button/button-click-on-edges.html

        * Modules/modern-media-controls/controls/button.css:
        (button > picture):

2017-07-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Make the decision for asynchronously decoding an image be in one place
        https://bugs.webkit.org/show_bug.cgi?id=174479

        Reviewed by Tim Horton.

        Move all the logic of whether a large image should be asynchronously decoded 
        or not be in one place: RenderBoxModelObject::decodingModeForImageDraw().

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addPendingImageDrawingClient): Fixing unrelated 
        spelling error.
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isIBooks):
        (WebCore::IOSApplication::isIBooksStorytime):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateFromSettings): Remove reading the setting
        largeImageAsyncDecodingEnabled from this function because it will be read
        by RenderBoxModelObject::decodingModeForImageDraw().
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::shouldAnimate):
        (WebCore::BitmapImage::canAnimate):
        (WebCore::BitmapImage::canUseAsyncDecodingForLargeImages):
        (WebCore::BitmapImage::shouldUseAsyncDecodingForAnimatedImages):
        (WebCore::BitmapImage::canDestroyDecodedData):
        (WebCore::BitmapImage::shouldUseAsyncDecodingForLargeImages): Deleted.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::canUseAsyncDecoding): It is okay to keep the 
        decoded frame if canUseAsyncDecodingForLargeImages() is true by the setting
        largeImageAsyncDecodingEnabled is false.
        (WebCore::ImageSource::shouldUseAsyncDecoding): Deleted.
        * platform/graphics/ImageSource.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw): The plan is to
        add a new Internal settings to force asynchronous image decoding regardless
        of the image size and the settings.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):

2017-07-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Raise minimum CMake requirement
        https://bugs.webkit.org/show_bug.cgi?id=174545

        Reviewed by Konstantin Tokarev.

        * WebCoreMacros.cmake:

2017-07-15  Brady Eidson  <beidson@apple.com>

        Make sure all CFHTTPCookieStorageRefs we create are scheduled.
        <rdar://problem/33221110> and https://bugs.webkit.org/show_bug.cgi?id=174513

        Reviewed by Tim Horton.

        * platform/spi/cf/CFNetworkSPI.h:

2017-07-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename RenderStyle::fontSize() to RenderStyle::computedFontPixelSize()
        https://bugs.webkit.org/show_bug.cgi?id=174509

        Reviewed by Simon Fraser.

        We have three font size functions:
        - computedFontSize(): returns a float
        - specifiedFontSize(): also returns a float
        - fontSize(): returns the rounded computedFontSize()

        FontDescription uses the convention of labelling rounded values as "pixel",
        so a better name font fontSize() is computedFontPixelSize().

        Also, because font sizes can never be negative, switch the type from an int
        to an unsigned.

        No new tests because there is no behavior change.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::computedPixelSize):
        (WebCore::FontDescription::fontSelectionRequest):
        * rendering/RenderBlock.cpp:
        (WebCore::styleForFirstLetter):
        * rendering/RenderRubyRun.cpp:
        (WebCore::shouldOverhang):
        (WebCore::RenderRubyRun::getOverhang):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::adjustSearchFieldIconStyle):
        (WebCore::paintSearchFieldIcon):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::adjustCheckboxStyle):
        (WebCore::RenderThemeIOS::adjustRadioStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::controlSizeForFont):
        (WebCore::RenderThemeMac::controlSizeForSystemFont):
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        (WebCore::RenderThemeMac::popupInternalPaddingBox):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeWin::adjustSearchFieldResultsButtonStyle):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::computeLineVerticalStretch):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::computedFontPixelSize):
        (WebCore::RenderStyle::computedLineHeight):
        (WebCore::RenderStyle::fontSize): Deleted.
        * rendering/style/RenderStyle.h:
        * style/InlineTextBoxStyle.cpp:
        (WebCore::visualOverflowForDecorations):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToEMS):
        (WebCore::SVGLengthContext::convertValueFromEMSToUserUnits):

2017-07-15  Myles C. Maxfield  <mmaxfield@apple.com>

        line-height: <number> gets visually applied twice when text autosizing is in effect
        https://bugs.webkit.org/show_bug.cgi?id=174536
        <rdar://problem/33338259>

        Reviewed by Simon Fraser.

        StyleBuilderConverter::convertLineHeight() converts line-height: <number> into a
        "percentage" length. Then, when layout needs to know what the computed value of
        line-height is, RenderStyle::computedLineHeight() multiplies this percentage by
        the computed font size.

        With autosizing, the computed font size already incorporates the autosizing
        multiplier, so we shouldn't also incorporate this multiplier into the percentage
        value itself. getComputedStyle()'s lineHeightFromStyle() was compensating for
        this double application by multiplying the percentage by the font-size's specified
        value instead of its computed value, which is incorrect.

        Test: fast/text-autosizing/line-height-number.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::lineHeightFromStyle):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLineHeight):

2017-07-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS WK2] Presenting an action sheet on an image map prevents selection UI from updating
        https://bugs.webkit.org/show_bug.cgi?id=174539
        <rdar://problem/33307395>

        Reviewed by Darin Adler.

        Currently, if TextIndicator fails to take a snapshot in TextIndicator::createWithRange, we will enter an
        inconsistent state in the web process where Editor will continue to ignore selection changes until the next time
        Editor::setIgnoreSelectionChanges(false) is called. This causes us to indefinitely defer EditorState updates to
        the UI process, which leads to selection UI appearing unresponsive.

        To fix this, we introduce a new TemporarySelectionChange object to simplify selection changes and/or
        EditorState-update-ignoring behaviors within the scope of a single function. The constructor applies these
        temporary changes, and the destructor reverts them as needed to their prior values.

        This patch only adopts TemporarySelectionChange in order to fix this bug, but future patches will replace the
        remaining places where we temporarily change selection and/or ignore selection with this helper.

        Test: ActionSheetTests.ImageMapDoesNotDestroySelection.

        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        (WebCore::TemporarySelectionChange::~TemporarySelectionChange):
        * editing/Editor.h:
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::isUpdateAppearanceEnabled):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):

2017-07-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up line-height and minimumFontSize functions
        https://bugs.webkit.org/show_bug.cgi?id=174535

        Reviewed by Simon Fraser.

        No behavior change.

        No new tests because there is no behavior change.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLineHeight):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::cascadedPropertiesForRollback):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::checkForZoomChange):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::CascadedProperties::set):
        (WebCore::StyleResolver::applyCascadedProperties):
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::computedFontSizeFromSpecifiedSize):
        (WebCore::Style::computedFontSizeFromSpecifiedSizeForSVGInlineText):
        (): Deleted.

2017-07-14  Jonathan Bedard  <jbedard@apple.com>

        Add iOS 11 SPI
        https://bugs.webkit.org/show_bug.cgi?id=174430
        <rdar://problem/33269288>

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj: Add sqlite3SPI.h header.
        * platform/ios/PlatformPasteboardIOS.mm: Move UIKit SPI to UIKitSPI.h.
        * platform/ios/WebItemProviderPasteboard.mm: Ditto.
        * platform/network/cf/FormDataStreamCFNet.cpp: Explicitly define fnfErr and remove
        MacErrors.h header for iOS.
        * platform/spi/cocoa/IOSurfaceSPI.h: IOSurface is no longer SPI in iOS 11.
        * platform/spi/cocoa/PassKitSPI.h: Do not re-define setRequiredShippingContactFields
        and setRequiredBillingContactFields in iOS 11.
        * platform/spi/cocoa/QuartzCoreSPI.h: Added QuartzCoreSPI used in iOS 11.
        * platform/spi/ios/UIKitSPI.h: Add drag-and-drop SPI.
        * platform/spi/ios/sqlite3SPI.h: Define required sqlite3 macros.
        * platform/sql/SQLiteFileSystem.cpp: Use sqlite3SPI.h.

2017-07-14  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyRSA PKCS#8 exports
        https://bugs.webkit.org/show_bug.cgi?id=173697

        Reviewed by Jiewen Tan.

        Implement the PKCS#8 import operation for RSA keys for platforms that use
        libgcrypt.

        In CryptoKeyRSA::exportPkcs8(), we bail early with an invalid access exception if
        this export is not being done for a private key. Otherwise, we start with creating
        the `RSAPrivateKey` ASN.1 structure, writing out '0' under the `version` element
        and then retrieving the modulus, public and private exponent and both primes.
        MPI data for those parameters is written out into corresponding elements in the
        `RSAPrivateKey` structure. We then manually compute values of both exponents and
        the coefficient parameters, using the private exponent's and both primes' MPI
        values. The p and q parameters (i.e. the primes) are switched in libgcrypt,
        deviating from the standard practice, so we have to operate with those two
        accordingly. We eliminate the optional `otherPrimeInfos` attribute on the
        `RSAPrivateKey` structure. Support for this attribute will be added later.

        We then create the `PrivateKeyInfo` ASN.1 structure, and write out '0' under the
        `version` element. The id-rsaEncryption object identifier is written out under
        the `algorithm.algorithm` element. In the future, an object identifier that
        matches this key's algorithm will have to be written out here (id-RSASSA-PSS or
        id-RSAES-OAEP), along with the appropriate parameters structure, but no test in
        WebKit or the web-platform-tests suite covers this detail. For now, a null value
        is written out under the `algorithm.parameters` element.

        Data for the `RSAPrivateKey` structure is retrieved and written out under the
        `privateKey` element.  The optional `attributes` element on the `PrivateKeyInfo`
        structure is eliminated.

        Data that was encoded through the `PrivateKeyInfo` structure is then retrieved
        and returned from the exportPkcs8() method.

        No new tests -- related tests are now passing and are unskipped.

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::exportPkcs8):

2017-07-14  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyRSA PKCS#8 imports
        https://bugs.webkit.org/show_bug.cgi?id=173696

        Reviewed by Jiewen Tan.

        Implement the PKCS#8 import operation for RSA keys for platforms that use
        libgcrypt.

        In CryptoKeyRSA::importPkcs8(), the provided key data is decoded against the
        'PrivateKeyInfo` ASN.1 structure. We then validate the `version` element and
        check that the `privateKeyAlgorithm.algorithm` element contains a supported
        object identifier. This check is for now mostly superficial, only ensuring
        that the object identifier is either id-rsaEncryption, id-RSAES-OAEP or
        id-RSASSA-PSS. This has to be further extended to also check the
        id-sha{1,256,384,512}WithRSAEncryption identifiers as well as decoding the
        `privateKeyAlgorithm.parameters` element against a specific ASN.1 structure, if
        necessary (RSASSA-PSS-params or RSAES-OAEP-params), and cross-checking the
        specified digest algorithm with the algorithm that's specified through the main
        object identifier or the structure contained in `privateKeyAlgorithm.parameters`.
        This is avoided for now because no test in WebKit or the web-platform-tests
        suite covers this detail of the specification.

        Data under the `privateKey` element is decoded against the `RSAPrivateKey` ASN.1
        structure, and the `version` element of that structure is validated. We then
        retrieve data from that structure for the modulus, public exponent, private
        exponent, both primes, both exponents and the coefficient parameters, bailing if
        any of them is missing. Because libgcrypt switches the use of p and q parameters,
        deviating from the standard use, we have to recompute the u parameter (the
        coefficient). With that calculated, we're then able to construct the `private-key`
        s-expression, embedding into it all the necessary parameters, and transferring
        the ownership of this object to the new CryptoKeyRSA object that's then returned
        from the importPkcs8() method.

        No new tests -- related tests are now passing and are unskipped.

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::importPkcs8):

2017-07-14  Chris Dumez  <cdumez@apple.com>

        Possible crash in ~UserGestureIndicator() when on non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=174522
        <rdar://problem/30283071>

        Reviewed by Sam Weinig.

        UserGestureIndicator objects may be constructed / destructed in worker thread
        (e.g. in DOMTimer::fired()). The UserGestureIndicator constructor / destructor
        are supposed to be no-op on non-main threads so that it is safe. However,
        we were mistakenly initializing m_previousToken data member in the constructor
        on background thread, which meant that we could crash later on in the
        UserGestureIndicator destructor when destroying m_previousToken.

        Test: fast/workers/worker-user-gesture.html

        * dom/UserGestureIndicator.cpp:
        (WebCore::currentToken):
        (WebCore::UserGestureIndicator::UserGestureIndicator):

2017-07-14  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219516.

        This caused an API failure on macOS.

        Reverted changeset:

        "Make sure all CFHTTPCookieStorageRefs we create are
        scheduled."
        https://bugs.webkit.org/show_bug.cgi?id=174513
        http://trac.webkit.org/changeset/219516

2017-07-14  Jer Noble  <jer.noble@apple.com>

        Allow clients to override their own hardware media requirements where no fallback media exists.
        https://bugs.webkit.org/show_bug.cgi?id=174426
        <rdar://problem/32537704>

        Reviewed by Eric Carlson.

        Add a new setting which allows clients to specify their own mediaContentTypesRequiringHardwareSupport should be
        ignared in the case where no fallback exists, such as the case of a single <source> element, or setting the src
        attribute directly.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::havePotentialSourceChild):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::sourceWasRemoved):
        (WebCore::HTMLMediaElement::mediaPlayerShouldCheckHardwareSupport):
        * html/HTMLMediaElement.h:
        * page/Settings.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::shouldCheckHardwareSupport):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerShouldCheckHardwareSupport):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):

2017-07-14  Chris Dumez  <cdumez@apple.com>

        Possible crash under NetworkSocketStream::didFailSocketStream()
        https://bugs.webkit.org/show_bug.cgi?id=174526
        <rdar://problem/32831441>

        Reviewed by Brent Fulgham.

        Call m_client.didFailSocketStream() asynchronously in the constructor as our
        caller (the client) is also being initialized at this point.

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):

2017-07-14  Youenn Fablet  <youenn@apple.com>

        WebRTC: silence data not sent for disabled audio track
        https://bugs.webkit.org/show_bug.cgi?id=174456
        <rdar://problem/33284623>

        Reviewed by Eric Carlson.

        Test: webrtc/audio-muted-stats.html
              webrtc/audio-muted-stats2.html

        Adding a timer-based approach to send 10ms of silence every second.
        This is consistent with how muted video tracks are implemented.
        In case the audio track is muted at the time it is added, no silence data is sent.

        * platform/mediastream/mac/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::initializeConverter):
        (WebCore::RealtimeOutgoingAudioSource::stop):
        (WebCore::RealtimeOutgoingAudioSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingAudioSource::sourceEnabledChanged):
        (WebCore::RealtimeOutgoingAudioSource::handleMutedIfNeeded):
        (WebCore::RealtimeOutgoingAudioSource::sendSilence):
        * platform/mediastream/mac/RealtimeOutgoingAudioSource.h:

2017-07-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Unclear distinction between WebKitHelpers and WebKitMacros
        https://bugs.webkit.org/show_bug.cgi?id=153189

        Reviewed by Antonio Gomes.

        * CMakeLists.txt: Include WebCoreMacros.cmake.
        * WebCoreMacros.cmake: Added.

2017-07-14  Jeremy Jones  <jeremyj@apple.com>

        Fix style for name of class alloc function in WebVideoFullscreenInterfaceAVKit.
        https://bugs.webkit.org/show_bug.cgi?id=174476

        Reviewed by Alex Christensen.

        No new tests because no behavior change.

        This is a rename for per style requirements.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (allocWebAVPictureInPicturePlayerLayerViewInstance):
        (WebAVPlayerLayerView_pictureInPicturePlayerLayerView):
        (allocWebAVPlayerLayerViewInstance):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        (getWebAVPictureInPicturePlayerLayerViewClass): Deleted.
        (getWebAVPlayerLayerViewClass): Deleted.

2017-07-14  Jer Noble  <jer.noble@apple.com>

        [MSE] Removing samples when presentation order does not match decode order can cause bad behavior.
        https://bugs.webkit.org/show_bug.cgi?id=174514

        Reviewed by Sam Weinig.

        Test: media/media-source/media-source-remove-decodeorder-crash.html

        Fix the algorithm in removeCodedFrames() so that it's not possible to have a removePresentationStart >
        removePresentationEnd (and also removeDecodeStart > removeDecodeEnd).

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::PresentationOrderSampleMap::findSampleContainingOrAfterPresentationTime):
        (WebCore::PresentationOrderSampleMap::findSampleStartingAfterPresentationTime):
        * Modules/mediasource/SampleMap.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames):

2017-07-14  Youenn Fablet  <youenn@apple.com>

        Increase CoreAudio render audio buffer sizes for WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=174508

        Reviewed by Eric Carlson.

        Covered by manually testing audio rendering through WebRTC sites.

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::createAudioUnit): Setting audio buffer size equivalent to 20 ms.

2017-07-14  Brady Eidson  <beidson@apple.com>

        Make sure all CFHTTPCookieStorageRefs we create are scheduled.
        <rdar://problem/33221110> and https://bugs.webkit.org/show_bug.cgi?id=174513

        Reviewed by Tim Horton.

        * platform/spi/cf/CFNetworkSPI.h:

2017-07-14  Youenn Fablet  <youenn@apple.com>

        Remove CoreAudioCaptureSource speaker configuration
        https://bugs.webkit.org/show_bug.cgi?id=174512

        Reviewed by Eric Carlson.

        Covered by manually testing audio rendering through WebRTC sites.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):

2017-07-14  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Limit the number of remote video samples queued
        https://bugs.webkit.org/show_bug.cgi?id=174505
        <rdar://problem/33223015>

        Reviewed by Youenn Fablet.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::removeOldSamplesFromPendingQueue): Only
        enqueue a fixed number of frames with invalid or negative decode times.

2017-07-14  Youenn Fablet  <youenn@apple.com>

        Report CoreAudioCaptureSource failure in case shared unit stops working properly
        https://bugs.webkit.org/show_bug.cgi?id=174494

        Reviewed by Eric Carlson.

        Manual test by interrupting an audio capture on Mac.

        This patch adds a timer to CoreAudioSharedUnit.
        In case the capture callback is not called after one second, the shared unit is said to fail.
        Each source is notified that capture is failing.
        This will in turn trigger onend track event so that web pages can remedy capture failure.

        Timer starts with 10 seconds for audio data to start being captured.
        It is then decreased to 2 seconds.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::captureFailed):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::CoreAudioSharedUnit):
        (WebCore::CoreAudioSharedUnit::processMicrophoneSamples):
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioSharedUnit::verifyIsCapturing):
        (WebCore::CoreAudioSharedUnit::stopInternal):

2017-07-14  Jer Noble  <jer.noble@apple.com>

        Adding the 'autoplay' attribute to a media element during a user gesture should remove user gesture restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=174373

        Reviewed by Eric Carlson.

        Test: media/video-add-autoplay-user-gesture.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2017-07-14  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219500.

        The test is consistently failing on iOS simulator.

        Reverted changeset:

        "AX: VoiceOver silent or skipping over time values on media
        player."
        https://bugs.webkit.org/show_bug.cgi?id=174324
        http://trac.webkit.org/changeset/219500

2017-07-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] error 'm_compositorTexture': undeclared identifier since Bug 174345
        https://bugs.webkit.org/show_bug.cgi?id=174493

        Reviewed by Alex Christensen.

        Compilation errors are reported by the code using a member
        m_compositorTexture of GraphicsContext3D which exists only if
        USE(COORDINATED_GRAPHICS_THREADED). WinCairo port doesn't use it.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        Use m_compositorTexture only if USE(COORDINATED_GRAPHICS_THREADED).
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Ditto.
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        Ditto. Fix the wrong indentation level.

2017-07-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [HarfBuzz] Decomposed Vietnamese characters are rendered incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=174418

        Reviewed by Michael Catanzaro.

        HarfBuzzShaper should normalize the input text before collecting
        HarfBuzzRuns. Actually, HarfBuzzShaper::setNormalizedBuffer does
        the task. But, this function hasn't been called from anywhere
        since Bug 108077.

        Test: fast/text/international/vietnamese-nfd.html

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::HarfBuzzShaper):
        Call setNormalizedBuffer instead of normalizeCharacters.
        (WebCore::normalizeCharacters): Deleted.

2017-07-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Build broken "Cannot open include file: 'GL/glext.h'" since Bug 172104
        https://bugs.webkit.org/show_bug.cgi?id=174492

        Reviewed by Žan Doberšek.

        WinCairo port uses GLES. OpenGLShims.h shouldn't be included.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        Include "OpenGLShims.h" only if !USE(OPENGL_ES_2) instead of USE(OPENGL).

2017-07-14  Chris Dumez  <cdumez@apple.com>

        PageCache::removeAllItemsForPage(Page&) may reenter itself and cause crashes
        https://bugs.webkit.org/show_bug.cgi?id=174473
        <rdar://problem/32177485>

        Reviewed by Antti Koivisto.

        This could happen when a Page containing an SVGImage is removed from PageCache and
        this resulted in the destruction of the SVGImage. Because the SVGImage has an internal
        utility Page, it will also call PageCache::removeAllItemsForPage(WebCore::Page&) upon
        destruction, causing us to reenter.

        Address the issue by not calling PageCache::removeAllItemsForPage() for utility pages
        since those cannot be in PageCache in the first place.

        Also add assertions to make sure:
        1. We never insert a utility page into PageCache
        2. PageCache::removeAllItemsForPage() does not reenter

        No new tests, because I was unable to write a test which reproduced the crash. This
        is in theory testable using an API test which enables PageCache, loads a page
        containing an SVGImage, navigates away from this page so that it goes into PageCache,
        and then calls [WebView _close]. However, when I tried writing such test, I could
        not get the SVGImage to get destroyed while PageCache::removeAllItemsForPage() is
        called for the top-level page for some reason. Something seems to be keeping the
        SVGImage alive longer. I tried disabling the MemoryCache but it did not help.

        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        (WebCore::PageCache::removeAllItemsForPage):
        * history/PageCache.h:
        * page/Page.cpp:
        (WebCore::Page::~Page):

2017-07-14  Aaron Chu  <aaron_chu@apple.com>

        AX: VoiceOver silent or skipping over time values on media player.
        https://bugs.webkit.org/show_bug.cgi?id=174324
        <rdar://problem/32021784>

        Reviewed by Antoine Quint.

        Added role attribute to modern media controls time lable class so that VoiceOver can access the time label when the media is playing.

        Updated: media/modern-media-controls/time-label/time-label.html

        * Modules/modern-media-controls/controls/time-label.js:

2017-07-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix compiler warnings when building with GCC 7
        https://bugs.webkit.org/show_bug.cgi?id=174463

        Reviewed by Darin Adler.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldManageAudioSessionCategory):

2017-07-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Incorrect call to StyledElement::setInlineStyleProperty in ImageDocument::createDocumentStructure
        https://bugs.webkit.org/show_bug.cgi?id=174470

        Reviewed by Darin Adler.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):

2017-07-13  Dean Jackson  <dino@apple.com>

        Fix iOS build.

        * platform/graphics/GraphicsContext3D.h:

2017-07-12  Dean Jackson  <dino@apple.com>

        Rename GraphicsContext[3D]Mac to Cocoa and move things into graphics/cocoa
        https://bugs.webkit.org/show_bug.cgi?id=174453
        <rdar://problem/33281481>

        Reviewed by Simon Fraser.

        Two renames, two moves:
        graphics/mac/GraphicsContext3DMac.mm -> graphics/cocoa/GraphicsContext3DCocoa.mm
        graphics/mac/GraphicsContext.mm -> graphics/cocoa/GraphicsContextCocoa.mm
        graphics/mac/WebGLLayer.h -> graphics/cocoa/WebGLLayer.h
        graphics/mac/WebGLLayer.mm -> graphics/cocoa/WebGLLayer.mm

        * PlatformMac.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm: Renamed from Source/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm.
        * platform/graphics/cocoa/GraphicsContextCocoa.mm: Renamed from Source/WebCore/platform/graphics/mac/GraphicsContextMac.mm.
        * platform/graphics/cocoa/WebGLLayer.h: Renamed from Source/WebCore/platform/graphics/mac/WebGLLayer.h.
        * platform/graphics/cocoa/WebGLLayer.mm: Renamed from Source/WebCore/platform/graphics/mac/WebGLLayer.mm.

2017-07-12  Dean Jackson  <dino@apple.com>

        Clean-up some things in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=174452
        <rdar://problem/33281257>

        Reviewed by Simon Fraser.

        General clean-up in GC3D.

        Covered by existing tests.

        * platform/graphics/GraphicsContext3D.h: Use initial values where possible.
        (WebCore::GraphicsContext3D::GraphicsContext3DState::GraphicsContext3DState): Deleted.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): Nearly everything can come from the
        initial values now.
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Remove code that won't be enabled
        on this platform.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas): While unlikely to happen,
        and possibly harmless in this case, add some checked arithmetic to make sure we don't overflow
        when working out how big a buffer to create.
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData): Ditto.
        (WebCore::GraphicsContext3D::reshape): Do nothing if we are ever given negative
        width or height. Again unlikely.

2017-07-13  Dean Jackson  <dino@apple.com>

        Avoid unnecessary copy of framebuffer into WebGL Layer
        https://bugs.webkit.org/show_bug.cgi?id=174345
        <rdar://problem/33228950>

        Reviewed by Sam Weinig.

        On macOS, we're unnecessarily copying the framebuffer into another
        texture before pushing it into the compositing layer. Instead we
        should simply render the FBO into the CALayer we use to draw on
        the screen.

        Covered by the existing WebGL tests.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformTexture): Return the FBO texture instead.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): No need to have a compositing
        texture.
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Don't copy the pixels from
        the FBO into the compositing texture

2017-07-13  Mark Lam  <mark.lam@apple.com>

        Implementors of memoryCost() need to be thread-safe.
        https://bugs.webkit.org/show_bug.cgi?id=172738
        <rdar://problem/32474881>

        Reviewed by Keith Miller.

        No new tests. This patch fixes a race condition bug that can result in random
        crashes (and other unpredictable behavior), and is very difficult to test for.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::releaseMemory):
        (WebCore::AudioBuffer::memoryCost):
        * Modules/webaudio/AudioBuffer.h:
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h:
        (WebCore::CollectionIndexCache::memoryCost):
        * dom/LiveNodeList.h:
        * html/CachedHTMLCollection.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::memoryCost):
        (WebCore::HTMLCanvasElement::externalMemoryCost):
        (WebCore::HTMLCanvasElement::setImageBuffer):
        * html/HTMLCanvasElement.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::invalidateNamedElementCache):
        * html/HTMLCollection.h:
        (WebCore::CollectionNamedElementCache::memoryCost):
        (WebCore::HTMLCollection::memoryCost):
        (WebCore::HTMLCollection::setNamedItemCache):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::memoryCost):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::memoryCost):
        (WebCore::ImageBuffer::externalMemoryCost):

2017-07-13  Jeremy Jones  <jeremyj@apple.com>

        Fix style. Use #pragma once in VideoFullscreen and PlaybackSession headers.
        https://bugs.webkit.org/show_bug.cgi?id=174448

        Reviewed by Eric Carlson.

        No behavior change.

        * platform/cocoa/WebPlaybackSessionInterface.h:
        * platform/cocoa/WebVideoFullscreenChangeObserver.h:
        * platform/cocoa/WebVideoFullscreenModel.h:
        * platform/cocoa/WebVideoFullscreenModelVideoElement.h:
        * platform/ios/WebPlaybackSessionInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/mac/WebVideoFullscreenInterfaceMac.h:

2017-07-13  Alex Christensen  <achristensen@webkit.org>

        Deleting last URLSearchParams key should remove trailing ? in associated URL
        https://bugs.webkit.org/show_bug.cgi?id=174465

        Reviewed by Chris Dumez.

        This makes us match the behavior of Chrome and Firefox, and the spec after https://github.com/whatwg/url/issues/332 is approved.
        This will be covered by an upcoming web platform test, and I updated fast/dom/DOMURL/searchparams.html to cover it now.

        * platform/URLParser.cpp:
        (WebCore::URLParser::serialize):
        If there are no tuples, serialize to the null string instead of a non-null empty string.
        This makes it so URL::setQuery removes the ?

2017-07-13  Jeremy Jones  <jeremyj@apple.com>

        Style fix. Replace strongThis with protectedThis.
        https://bugs.webkit.org/show_bug.cgi?id=174444

        Reviewed by Eric Carlson.

        Rename, no behavior change.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::finish):
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::maybeBecomeReadyForMoreMediaData):
        (WebCore::WebCoreDecompressionSession::enqueueSample):
        (WebCore::WebCoreDecompressionSession::handleDecompressionOutput):
        (WebCore::WebCoreDecompressionSession::enqueueDecodedSample):
        (WebCore::WebCoreDecompressionSession::requestMediaDataWhenReady):
        (WebCore::WebCoreDecompressionSession::flush):

2017-07-13  Jeremy Jones  <jeremyj@apple.com>

        Fix block style in WebVideoFullscreen classes.
        https://bugs.webkit.org/show_bug.cgi?id=174446

        Reviewed by Eric Carlson.

        No behavior change.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::setVideoLayerFrame):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer layoutSublayers]):
        (getWebAVPictureInPicturePlayerLayerViewClass):
        (getWebAVPlayerLayerViewClass):

2017-07-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused and untested Page domain commands
        https://bugs.webkit.org/show_bug.cgi?id=174429

        Reviewed by Timothy Hatcher.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad): Deleted.
        (WebCore::InspectorPageAgent::removeScriptToEvaluateOnLoad): Deleted.
        * inspector/InspectorPageAgent.h:

2017-07-13  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyRSA SPKI exports
        https://bugs.webkit.org/show_bug.cgi?id=173695

        Reviewed by Jiewen Tan.

        Implement the SPKI export operation for RSA keys for platforms that use
        libgcrypt.

        In CryptoKeyRSA::exportSpki(), we bail early with an invalid access exception if
        this export is not being done for a public key. Otherwise, we start with creating
        the `RSAPublicKey` ASN.1 structure, filling in the modulus and public exponent
        data that's retrieved from the `public-key` s-expression in the signed MPI format.

        We then create the `SubjectPublicKeyInfo` ASN.1 structure and fill it out with
        the necessary data. The id-rsaEncryption object identifier is written out under
        the `algorithm.algorithm` element, and a null value is written out under the
        `algorithm.parameters` element. This doesn't follow the specification at the
        moment, since id-RSASSA-PSS would have to be written for the RSA-PSS algorithm,
        and id-RSAES-OAEP for the RSA-OAEP algorithm, along with specific parameter
        structures. But no test in WebKit or the web-platform-tests suite covers this,
        so this deviation should be addressed later.

        Data of the previously-constructed `RSAPublicKey` structure is retrieved and
        written out under the `subjectPublicKey` element, before finally retrieving
        data of the `SubjectPublicKeyInfo` structure and returning that to the caller.

        A helper mpiSignedData() function is added, providing overloads for gcry_mpi_t
        and gcry_sexp_t parameters. MPI data for that parameter is retrieved and the
        first byte of that data is tested, inserting an additional 0x00 byte at the
        beginning of the Vector if that first byte has the first bit set, avoiding this
        data accidentally being interpreted as a signed integer.

        No new tests -- related tests are now passing and are unskipped.

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::exportSpki):
        * crypto/gcrypt/GCryptUtilities.h:
        (WebCore::mpiSignedData):

2017-07-13  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Implement CryptoKeyRSA SPKI imports
        https://bugs.webkit.org/show_bug.cgi?id=173694

        Reviewed by Jiewen Tan.

        Implement the SPKI import operation for RSA keys for platforms that use
        libgcrypt.

        The passed-in key data is decoded against the `SubjectPublicKeyInfo` ASN.1
        structure. We then validate the `algorithm.algorithm` element, ensuring that
        the value under that represents a supported object identifier. This check is
        for now mostly superficial, only ensuring that the object identifier is either
        id-rsaEncryption, id-RSAES-OAEP or id-RSASSA-PSS. This has to be further extended
        to also check the id-sha{1,256,384,512}WithRSAEncryption identifiers as well as
        decoding the `algorithm.parameters` element against a specific ASN.1 structure,
        if necessary (RSASSA-PSS-params or RSAES-OAEP-params), and cross-checking the
        specified digest algorithm with the algorithm that's specified through the main
        object identifier or the structure contained in `algorithm.parameters`. This is
        avoided for now because no test in WebKit or the web-platform-tests suite covers
        this detail of the specification.

        After the algorithm is identified as supported, we proceed with decoding the
        `subjectPublicKey` data against the `RSAPublicKey` ASN.1 structure. From there,
        we retrieve the `modulus` and `publicExponent` data from which we can construct
        an RSA `public-key` s-expression that can be used through libgcrypt. A new
        CryptoKeyRSA object is then created, taking over ownership of the `public-key`
        s-expression, and returned.

        No new tests -- related tests are now passing and are unskipped.

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::supportedAlgorithmIdentifier):
        (WebCore::CryptoKeyRSA::importSpki):

2017-07-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r219332): [GTK] 9 new failures on fast/forms spinbutton related tests
        https://bugs.webkit.org/show_bug.cgi?id=174395

        Reviewed by Carlos Garcia Campos.

        Covered by existing tests.

        Before r219332 the height of the spin button widget was
        calculated as the maximum value between the individual button
        ( the [+] or [-] ) width (33 pixels) and height (16 pixels).
        And r219332 caused the height of the widget to be calculated as
        the height of the button (16 pixels), which was incorrect as
        each button should be first expanded vertically to fit the
        preferred size of the widget.

        Fix this by making the calculations about the spin button widget
        on a new function spinButtonSize() that takes this into account,
        and use this values both for adjusting the style of the input
        field and the spin button widget itself.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::spinButtonSize):
        (WebCore::RenderThemeGtk::adjustTextFieldStyle):
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):

2017-07-13  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] border-radius with non visible border doesn't work on images that have their own RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=174157

        Reviewed by Carlos Garcia Campos.

        Do not allow direct compositing of images when they have a border-radius property on WebKitGTK+ and WPE.
        These platforms don't support clipping using rounded rectangles during composition, which is required
        when using border-radius and the border is not visible. Due to this, they need to perform the clippping
        with cairo.

        This is a temporal fix, until appropriate clipping is implemented in the TextureMapper.

        No new tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):

2017-07-13  Chris Fleizach  <cfleizach@apple.com>

        AX: WebView crashes app after opening VoiceOver context box menu from modal dialog
        https://bugs.webkit.org/show_bug.cgi?id=163999
        <rdar://problem/28949013>

        Reviewed by Joanmarie Diggs.

        Protect when m_object goes away.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):

2017-07-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Async image decoding for large images should be disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=174432

        Reviewed by Simon Fraser.

        -- Rename GraphicsLayerPaintFlags::Snapshotting to AllowAsyncImageDecoding.
        -- Replace every reference to GraphicsLayerPaintFlags::Snapshotting by
           GraphicsLayerPaintFlags::None and every GraphicsLayerPaintFlags::None
           by AllowAsyncImageDecoding.
        -- Rename PaintBehaviorSnapshotting to PaintBehaviorAllowAsyncImageDecoding.
        -- Propagate PaintBehaviorAllowAsyncImageDecoding from a parent view to 
           a child view instead of propagating PaintBehaviorSnapshotting.
        -- Remove setting the bit PaintBehaviorSnapshotting in any new PaintBehavoir.
        -- Replace setting the bit PaintBehaviorSnapshotting in an existing PaintBehavoir
           by resetting the bit PaintBehaviorAllowAsyncImageDecoding.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::paintContentsForSnapshot):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * rendering/PaintPhase.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintForegroundForFragments):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents): We need to propagate the 
        PaintBehaviorAllowAsyncImageDecoding from RenderWidget to the FrameView.
        We did not need to do that for PaintBehaviorSnapshotting because 
        FrameView was setting it in its m_paintBehavior if (document->printing())
        in FrameView::willPaintContents().

2017-07-12  Timothy Hatcher  <timothy@hatcher.name>

        REGRESSION(r219391): Broke the USE(OPENGL_ES_2) build
        https://bugs.webkit.org/show_bug.cgi?id=174442

        Unreviewed build fix.

        * platform/graphics/egl/GLContextEGL.cpp: Fix typo of OPENGL_ES2.

2017-07-12  Youenn Fablet  <youenn@apple.com>

        Recreate the AudioUnit when restarting capture
        https://bugs.webkit.org/show_bug.cgi?id=174439

        Reviewed by Jer Noble.

        Sometimes other applications in the system like FaceTime may make the audio unit not functional.
        Reloading the tab capturing audio will trigger a call to stop the audio shared unit.
        When the tab requests again audio, the shared unit will restart.
        At that time, the AudioUnit shared unit will be fully recreated.

        Manually tested by doing a webrtc call and then doing a FaceTime call.
        Remote WebRTC endpoints may not receive any audio.
        With the patch, reloading the web page will get back the audio.
        Previously, restarting the UIProcess was the only way.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::startProducingData): Cleaning the audio unit when starting to produce data if there is a preexisting audio unit.

2017-07-12  Youenn Fablet  <youenn@apple.com>

        Accessing localDescription, remoteDescription, etc. after setTimeout raises EXC_BAD_ACCESS
        https://bugs.webkit.org/show_bug.cgi?id=174323
        <rdar://problem/33267876>

        Reviewed by Eric Carlson.

        Test: webrtc/calling-peerconnection-once-closed.html

        In case the libwebrtc backend is null, we should not use it to get description from it.
        Return null in that case.

        Adding ASSERT to other calls where the layer above LibWebRTCMediaEndpoint should protect
        from calling a function on a null libwebrtc backend.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::currentLocalDescription):
        (WebCore::LibWebRTCMediaEndpoint::currentRemoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::pendingLocalDescription):
        (WebCore::LibWebRTCMediaEndpoint::pendingRemoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::localDescription):
        (WebCore::LibWebRTCMediaEndpoint::remoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetLocalDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetRemoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::removeTrack):
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::doCreateAnswer):
        (WebCore::LibWebRTCMediaEndpoint::createDataChannel):

2017-07-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219176.
        https://bugs.webkit.org/show_bug.cgi?id=174436

        "Can cause infinite recursion on iOS" (Requested by mlam on
        #webkit).

        Reverted changeset:

        "WTF::Thread should have the threads stack bounds."
        https://bugs.webkit.org/show_bug.cgi?id=173975
        http://trac.webkit.org/changeset/219176

2017-07-12  Nan Wang  <n_wang@apple.com>

        AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
        https://bugs.webkit.org/show_bug.cgi?id=174393
        <rdar://problem/33248006>

        Reviewed by Chris Fleizach.

        Used the existing findClosestPlainText function to search the range on iOS.
        Also exposed a function on the iOS wrapper to return the selection rects of
        the result range from the searching. 

        Test: accessibility/ios-simulator/text-marker-range-matches-text.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::visiblePositionForPositionWithOffset):
        (WebCore::AXObjectCache::rangeMatchesTextNearRange):
        * accessibility/AXObjectCache.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper rangeFromMarkers:withText:]):
        (-[WebAccessibilityObjectWrapper textMarkerRangeFromMarkers:withText:]):
        (-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]):
        (-[WebAccessibilityObjectWrapper rectsForSelectionRects:]):

2017-07-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r219409.

        The revision caused the Windows builds to fail.

        Reverted changeset:

        "AX: [iOS] Implement a way to retrieve a text marker range
        with desired text that is closest to a position"
        https://bugs.webkit.org/show_bug.cgi?id=174393
        http://trac.webkit.org/changeset/219409

2017-07-12  Alicia Boya García  <aboya@igalia.com>

        [FreeType] Enable BCI on webfonts
        https://bugs.webkit.org/show_bug.cgi?id=174403

        Reviewed by Michael Catanzaro.

        The FreeType BCI hinter used to be disabled on webfonts in favor of
        the autohinter.

        FreeType BCI hinter has improved considerably in the past and now most
        other browsers enable it too. Given the old reasons no longer apply,
        the BCI has now been enabled in order to get better text rendering when
        embedded hints are available.

        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):

2017-07-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r219361.
        https://bugs.webkit.org/show_bug.cgi?id=174434

        Huge PLUM memory regression on iOS (Requested by kling on
        #webkit).

        Reverted changeset:

        "[WebIDL] Convert MutationCallback to be a normal generate
        callback"
        https://bugs.webkit.org/show_bug.cgi?id=174140
        http://trac.webkit.org/changeset/219361

2017-07-12  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] a capture source failure should end the MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=174375

        Reviewed by Youenn Fablet.

        Test: fast/mediastream/media-stream-track-source-failure.html

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::captureFailed): New, signal observers that the source has ended.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::setupSession): Call captureFailed if setupCaptureSession fails.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setupCaptureSession): Return false on failure.
        (WebCore::AVVideoCaptureSource::shutdownCaptureSession): Delete unused instance variable.
        (WebCore::AVVideoCaptureSource::processNewFrame): Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::endMediaStreamTrackCaptureSource): Call track.source.captureFailed().
        * testing/Internals.h:
        * testing/Internals.idl:

2017-07-12  Timothy Hatcher  <timothy@hatcher.name>

        Improve font matching with FontConfig and FreeType
        https://bugs.webkit.org/show_bug.cgi?id=174374

        Reviewed by Michael Catanzaro.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData): Loop through all family name matches from FcFontMatch.

2017-07-12  Youenn Fablet  <youenn@apple.com>

        Reactivate audio ducking when restarting the shared unit
        https://bugs.webkit.org/show_bug.cgi?id=174428

        Reviewed by Eric Carlson.

        Currently, when another application ducks WebKit, there is no other way than to quit the UIProcess and restart it.
        By again audio ducking when starting the audio unit, reloading the page will be enough.
        Testing by launching a tab with audio capture and audio playing.
        Then make a FaceTime call and hear the tab volume go down.
        End the call to FaceTime and the tab volume remains low.
        Reload the tab and the volume has a normal level.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::startInternal):

2017-07-12  Antoine Quint  <graouts@apple.com>

        Playback controls should not hide while AirPlay is active
        https://bugs.webkit.org/show_bug.cgi?id=174422
        <rdar://problem/33011477>

        Reviewed by Eric Carlson.

        We now also track changes in AirPlay playback status and account for it when identifying whether we
        ought to let media controls automatically hide, which should only happen if the media is playing and
        not playing back through AirPlay.

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.get mediaEvents):
        (ControlsVisibilitySupport.prototype._updateControls):
        (ControlsVisibilitySupport):

2017-07-12  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build following <https://trac.webkit.org/changeset/219407>
        (https://bugs.webkit.org/show_bug.cgi?id=174386)

        Fix bad merge after <https://trac.webkit.org/changeset/219404>.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:

2017-07-12  Nan Wang  <n_wang@apple.com>

        AX: [iOS] Implement a way to retrieve a text marker range with desired text that is closest to a position
        https://bugs.webkit.org/show_bug.cgi?id=174393
        <rdar://problem/33248006>

        Reviewed by Chris Fleizach.

        Used the existing findClosestPlainText function to search the range on iOS.
        Also exposed a function on the iOS wrapper to return the selection rects of
        the result range from the searching. 

        Test: accessibility/ios-simulator/text-marker-range-matches-text.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::visiblePositionForPositionWithOffset):
        (WebCore::AXObjectCache::rangeMatchesTextNearRange):
        * accessibility/AXObjectCache.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper rangeFromMarkers:withText:]):
        (-[WebAccessibilityObjectWrapper textMarkerRangeFromMarkers:withText:]):
        (-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]):
        (-[WebAccessibilityObjectWrapper rectsForSelectionRects:]):

2017-07-12  Daniel Bates  <dabates@apple.com>

        NavigationAction should track whether the navigation was initiated by the main frame
        https://bugs.webkit.org/show_bug.cgi?id=174386
        <rdar://problem/33245267>

        Reviewed by Brady Eidson.

        Although we added state to NavigationAction to track whether the navigation was
        initiated by the main frame in r219170 it is not possible to initialize this state
        when instantiating a NavigationAction. Having NavigationAction track this state
        will be useful to ensure that we can always compute the source frame information
        when asking the embedding client whether to allow a navigation. We will make use
        of it in the fix for <https://bugs.webkit.org/show_bug.cgi?id=174385>.

        No behavior changed. So, no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL): Pass whether the load was initiated by the main frame
        when instantiating the NavigationAction.
        (WebCore::FrameLoader::load): For now, pass InitiatedByMainFrame::Unknown when instantiating
        the NavigationAction as we do not know if the load was initiated by the main frame.
        (WebCore::FrameLoader::loadWithDocumentLoader): Ditto.
        (WebCore::FrameLoader::reload): Ditto
        (WebCore::FrameLoader::loadDifferentDocumentItem): Ditto.
        (WebCore::createWindow): Pass whether the load was initiated by the main frame when
        instantiating the NavigationAction.
        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction): Modified to take argument of type InitiatedByMainFrame
        that indicates whether the navigation was initiated by the main frame.
        * loader/NavigationAction.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): For now, pass InitiatedByMainFrame::Unknown
        when instantiating the NavigationAction as we do not know if the load was initiated by the
        main frame.
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow): Pass whether the load was initiated by the main frame when
        instantiating the NavigationAction.

2017-07-12  Daniel Bates  <dabates@apple.com>

        Rename NavigationInitiatedByMainFrame to InitiatedByMainFrame
        https://bugs.webkit.org/show_bug.cgi?id=174427

        Rubber-stamped by Brady Eidson.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::initiatedByMainFrame):
        (WebCore::FrameLoadRequest::navigationInitiatedByMainFrame): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::shouldOpenExternalURLsPolicyToApply):
        (WebCore::applyShouldOpenExternalURLsPolicyToNewDocumentLoader):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::initiatedByMainFrame):
        (WebCore::NavigationAction::navigationInitiatedByMainFrame): Deleted.
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::ScheduledNavigation):
        (WebCore::ScheduledNavigation::initiatedByMainFrame):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::ScheduledNavigation::navigationInitiatedByMainFrame): Deleted.
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

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/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 ==
